【问题标题】:Selenium with headless chromedriver not able to scrape web data?带有无头 chromedriver 的 Selenium 无法抓取 Web 数据?
【发布时间】:2020-07-01 19:21:37
【问题描述】:

我编写了一个简单的程序来从https://stats.nba.com 中抓取数据。我的代码在这里工作得很好,因为它能够完美地从网站上获取数据:

chrome_options = webdriver.ChromeOptions()
d = webdriver.Chrome(ChromeDriverManager().install(),options=chrome_options)
d.get('https://stats.nba.com/teams/advanced/?sort=W&dir=-1')
scrape = BeautifulSoup(d.page_source, 'html.parser').find('table')

for row in scrape.find_all('tr'):
    for col in row.find_all('td'):
    #...more parsing code here

但是,只要我添加 chrome_options.add_argument('--headless'),整个代码失败,我得到AttributeError: 'NoneType' object has no attribute 'find_all'

为什么会这样?我到处找,找不到解决办法。谢谢!

编辑:问题似乎是d.page_source 为无头和非无头提供了不同的结果。有谁知道为什么会有差异?

【问题讨论】:

  • 看来你应该检查一下 d.page_source 的内容,看看是什么问题。
  • @Chris 我刚刚查了一下,奇怪的是,d.page_source 的无头输出没有我想要的表;但是, d.page_source 的非无头输出包含该表。为什么会存在这种差异?
  • 如果没有 recaptcha 或类似内容,可能是页面在不同视口下呈现不同。
  • @borisdonchev 我该如何解决这个问题?
  • 尝试添加一些东西来改变它,例如:chrome_options.add_argument("--start-maximized")

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


【解决方案1】:

编辑:

我想我已经找到了解决方案。看来他们有一个检查浏览器用户代理的系统,并且他们不允许无头 chrome

所以尝试将其添加到您的代码中:

# ...
user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'
chrome_options.add_argument(f'user-agent={user_agent}')
# ... 

这是我收到的输出:

scrape = BeautifulSoup(d.page_source, 'html.parser').find('table')
for row in scrape.find_all('tr'):
    print(row)
# <tr>
# <th></th>
# <th cf="" class="text" data-field="TEAM_NAME" ripple="" sort=""><br/>TEAM</th>
# <th cf="" data-dir="-1" data-field="GP" data-rank="" ripple="" sort="">GP</th>
# <th cf="" class="sorted asc" data-dir="-1" data-field="W" data-rank="" ripple="" sort="">W</th>
# <th cf="" data-dir="-1" data-field="L" data-rank="" ripple="" sort="">L</th>

【讨论】:

  • 你能保存页面的 HTML 内容并检查它吗?您收到的内容可能与您期望的不同。
  • 是的,当我无头运行时,由于某种原因,HTML 输出有所不同。我不明白为什么
  • @blueblast 我编辑了答案。您可以检查它现在是否有效(:
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-24
  • 2016-09-23
  • 2021-08-08
相关资源
最近更新 更多