小编典典

使用Python request.get解析无法一次加载的html代码

python

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

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']")

在这一点上,html_element应该是一个元素列表(我认为在这种情况下只有1个),但是它是空的。我认为这是因为网站不会一次加载所有内容,因此,当request.get()退出并对其进行抓取时,它仅抓取了第一部分。所以我的问题是1:我对问题的评估正确吗?和2:如果是这样,是否有一种方法可以使request.get()等待返回html之前,或者完全通过另一种途径来获取整个页面。

谢谢

编辑:感谢两个答复。我使用了Selenium并使脚本工作。


阅读 241

收藏
2021-01-20

共1个答案

小编典典

您对问题的评估不正确。

您可以检查结果,查看</html>结尾处是否有正确的位置。这意味着您已经掌握了整个页面。

requests.text 始终 抓住整个页面;如果您想一次流式传输,则必须显式地进行。

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

有许多通用的解决方案。例如:

  • 使用selenium或类似的方法驱动实际的浏览器下载页面。
  • 手动计算JavaScript代码的功能,并在Python中做等效的工作。
  • 对已建立的DOM运行无头JavaScript解释器。
2021-01-20