使用Python requests.get来解析一次不加载的html代码

bro*_*phi 3 html python web-scraping python-requests

我正在尝试编写一个Python脚本,该脚本将定期检查网站以查看项目是否可用.我过去成功使用了requests.get,lxml.html和xpath来自动化网站搜索.对于此特定网址(http://www.anthropologie.com/anthro/product/4120200892474.jsp?cm_vc=SEARCH_RESULTS#/)和其他人在同一网站上,我的代码无效.

import requests
from lxml import html
page = requests.get("http://www.anthropologie.com/anthro/product/4120200892474.jsp?cm_vc=SEARCH_RESULTS#/")
tree = html.fromstring(page.text)
html_element = tree.xpath(".//div[@class='product-soldout ng-scope']")
Run Code Online (Sandbox Code Playgroud)

在这一点上,html_element应该是一个元素列表(我认为在这种情况下只有1),但它是空的.我认为这是因为网站没有一次加载,所以当requests.get()熄灭并抓住它时,它只抓住第一部分.所以我的问题是1:我对问题的评估是否正确?和2:如果是这样,有没有办法让request.get()在返回html之前等待,或者可能是另一条路径完全获取整个页面.

谢谢

编辑:感谢两位回复.我使用Selenium并让我的脚本工作.

aba*_*ert 6

您对问题的评估不正确.

您可以检查结果,看看</html>附近是否有权利.这意味着你已经拥有了整个页面.

并且requests.text 总是抓住整个页面; 如果你想一次流一点,你必须明确地这样做.

您的问题是该表实际上并不存在于HTML中; 它是由客户端JavaScript动态构建的.您可以通过实际读取返回的HTML来查看.因此,除非您运行该JavaScript,否则您没有这些信息.

有很多一般的解决方案.例如:

  • 使用selenium或类似驱动实际浏览器下载页面.
  • 手动设计JavaScript代码的功能,并在Python中完成相同的工作.
  • 针对您构建的DOM运行无头JavaScript解释器.

  • phantomjs作为无头js翻译工作得很好 (2认同)