【问题标题】:How can I scrape all the divs nested under a div into a list?如何将嵌套在 div 下的所有 div 刮到一个列表中?
【发布时间】:2018-07-10 08:13:51
【问题描述】:

我目前正在使用 Selenium 和 BeautifulSoup 开发一个网络爬虫。我觉得我遇到的问题更多是由于我缺乏 Python 经验而不是由于对库的经验。我的问题归结为,有没有类的 div 嵌套在 div 下,而我想将类添加到列表中。我不完全确定如何遍历那些嵌套的 div 并将所有信息放入列表中。我相信我的部分问题是由于我没有在 Python 中使用嵌套 for 循环的经验,因为我相信当前的 for 循环会导致无限循环。让我知道你想出了什么。谢谢!

from selenium import webdriver
from bs4 import BeautifulSoup
import time
import os

driver = webdriver.Firefox(executable_path="/Users/myuser/Documents/geckodriverfolder/geckodriver")

driver.get('https://rotogrinders.com/projected-stats?site=draftkings&sport=nba')

driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

html = driver.page_source

soup = BeautifulSoup(html, 'lxml')

salary_opp = []
for test in soup.find_all('div', class_='rgt-col'):
  for test2 in soup.find_all('div'):
    draft_kings = test2.text
    salary_opp.append(draft_kings)

print(salary_opp)

这是我在 for 循环之前所做的,但它只将嵌套在单数 div 下的第一个 div 放入列表中:

for test in soup.find_all('div', class_='rgt-col'):
  draft_kings = test.div.text
  salary_opp.append(draft_kings)

【问题讨论】:

  • 能否在问题中添加相关的html?还是太大了?
  • 最简单的查看方法是转到 rotogrinders.com/projected-stats?site=draftkings&sport=nba 并使用 Web 开发人员工具检查薪水列。它相当大。
  • 你不需要用BS解析整个页面源。您可以直接使用 selenium webdriver 选择特定元素。

标签: python selenium selenium-webdriver web-scraping beautifulsoup


【解决方案1】:

如果要获取没有类的标签,即<div>...</div>,可以使用class_=None

for test in soup.find_all('div', class_='rgt-col'):
    for test2 in test.find_all('div', class_=None):
        draft_kings = test2.text
        salary_opp.append(draft_kings)

我没有检查您的循环背后的逻辑,但使用 test.find_all('div', class_=None) 将回答您的问题。另外请注意,我已将第二个 for 循环从 soup.find... 更改为 test.find...

【讨论】:

  • 感谢您的快速回复。我相信这里的主要问题是我对 Python 中嵌套 for 循环的无能:)。
  • 我相信你很快就能学会。另外,看看list comprehension in python.,您将能够在一行中轻松完成您现在正在做的事情。我也可以为您提供该代码,但您最好自己尝试一下。
猜你喜欢
  • 1970-01-01
  • 2021-02-27
  • 1970-01-01
  • 1970-01-01
  • 2017-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多