python - 能够抓取静态网站但不能抓取动态网站
问题描述
我正在尝试从 ESPN 获取下一场即将到来的比赛的时间,您可以在 ESPN 上找到:https ://www.espn.com/ (现在看来是尤文图斯和 AC 米兰之间的足球比赛)
我的 webscrape 有以下 python 代码:
import requests
from lxml import html
from selenium import webdriver
import chromedriver_binary
driver = webdriver.Chrome()
driver.get('https://www.espn.com/')
tree = html.fromstring(driver.page_source)
time = tree.xpath('//*[@id="news-feed"]/section[1]/header/a/div[2]/span[2]/span')
print(time)
但它返回此错误:
Traceback (most recent call last):
File "c:\Users\akash\Coding\test\scrape.py", line 9, in <module>
tree = html.fromstring(driver.page_source)
File "C:\Users\akash\AppData\Local\Programs\Python\Python38-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 679, in page_source
return self.execute(Command.GET_PAGE_SOURCE)['value']
File "C:\Users\akash\AppData\Local\Programs\Python\Python38-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "C:\Users\akash\AppData\Local\Programs\Python\Python38-32\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchWindowException: Message: no such window: target window already closed
from unknown error: web view not found
(Session info: chrome=83.0.4103.97)
我怀疑问题是因为这是 ESPN 网站上的动态内容,因为我能够使用相同的代码(除了更改 URL 和 XPath)从另一个具有恒定数据的网站上抓取数据。任何人都可以帮助解决此错误吗?
我已经在代码中安装了每个 python 库。(注意:我已经看过Scraping using python and xpath和Python Selenium Chrome Webdriver)
解决方案
就我而言,我使用了从chromium.org下载的二进制文件。代码如下:
from lxml import html
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument("--headless")
driver = webdriver.Chrome(r'./chromedriver', chrome_options=chrome_options)
driver.get('https://www.espn.com/')
tree = html.fromstring(driver.page_source)
time = tree.xpath("//*[@id='news-feed']//span[@class='game-time']/text()")[0].strip()
print(time)
--headless
传递给的参数chrome_options
是可选的(这只是在其“无头模式”下运行 Chrome)。
推荐阅读
- xml - 如何在 Adobe 体验管理器中使拖放图像响应?
- c# - 如何获取 ToolBarItem 的 x、y 位置?
- c# - 如何向动态创建的 ToolStripMenuItem.DropDown 项目添加点击操作?
- powershell - 如何使用powershell判断一系列文件何时完成添加到网络
- powershell - Powershell:使用 REST API 从共享点列表中删除项目 - 远程服务器返回错误:(400)错误请求
- javascript - 加载外部 .js 文件时如何克服“未定义函数”错误?
- java - 错误:找不到符号变量 itemsAdapter
- for-loop - 使用 Ansible 对文件中的项目运行命令
- node.js - Firestore 与 App Engine Node.js 后端的依赖关系
- jsp - 无法从 jsp 表单将日期时间传递给 google appengine