如何将嵌套在div下的所有div刮到列表中?

时间:2018-01-31 09:14:57

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

我目前正在使用Selenium和BeautifulSoup开发webscraper。我觉得我遇到的问题更多是由于我缺乏Python经验而不是由于使用库的经验。我的问题可以归结为有些div没有嵌套在div下的类,我希望将其写入列表中。我不完全确定如何运行这些嵌套的div并将所有信息放入列表中。我相信我的部分问题是由于我在Python中使用嵌套for循环的经验不足,因为我相信当前的for循环会导致无限循环。让我知道你想出了什么。谢谢!

 insert into test_table  select rownum , sysdate  from dual connect by level <= 50  ;

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

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)

1 个答案:

答案 0 :(得分: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...