我正在尝试编写一个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并使脚本工作。
您对问题的评估不正确。
您可以检查结果,查看</html>结尾处是否有正确的位置。这意味着您已经掌握了整个页面。
</html>
并requests.text 始终 抓住整个页面;如果您想一次流式传输,则必须显式地进行。
requests.text
您的问题是该表实际上不存在于HTML中。它是由客户端JavaScript动态构建的。您可以通过实际阅读返回的HTML来查看。因此,除非运行该JavaScript,否则您将没有信息。
有许多通用的解决方案。例如:
selenium