使用Python requests.get解析不会立即加载的html代码

使用Python requests.get解析不会立即加载的html代码,python,html,web-scraping,python-requests,Python,Html,Web Scraping,Python Requests,我正在尝试编写一个Python脚本,定期检查一个网站,看看是否有可用的项目。在过去,我成功地使用requests.get、lxml.html和xpath来自动化网站搜索。对于这个特定的URL()和同一网站上的其他URL,我的代码不起作用 import requests from lxml import html page = requests.get("http://www.anthropologie.com/anthro/product/4120200892474.jsp?cm_vc=SEAR

我正在尝试编写一个Python脚本,定期检查一个网站,看看是否有可用的项目。在过去,我成功地使用requests.get、lxml.html和xpath来自动化网站搜索。对于这个特定的URL()和同一网站上的其他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_元素应该是一个元素列表(我认为在本例中只有1个),但它是空的。我认为这是因为网站并不是一次加载所有内容,所以当requests.get()发出并抓取它时,它只抓取第一部分。所以我的问题是 1:我对这个问题的评估正确吗? 和 2:如果是这样的话,有没有一种方法可以让requests.get()在返回html之前等待,或者完全通过另一种途径来获取整个页面

谢谢


编辑:感谢这两个回复。我使用了Selenium并使脚本正常工作

页面使用javascript加载在请求获取html时未加载的表,因此您获取的是所有html,而不是使用javascript生成的html,您可以结合使用for headless browsing来获取html:

from selenium import webdriver

browser = webdriver.PhantomJS()
browser.get("http://www.anthropologie.eu/anthro/index.jsp#/")
html = browser.page_source
print(html)

你对这个问题的估计不正确

您可以检查结果,并看到末尾附近有一个
。这意味着你已经拥有了整个页面

请求。文本总是占据整个页面;如果您想一次流一点,就必须显式地这样做

您的问题是,该表实际上不存在于HTML中;它是通过客户端JavaScript动态构建的。您可以通过实际读取返回的HTML看到这一点。所以,除非你运行JavaScript,否则你没有这些信息

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

  • 使用
    selenium
    或类似工具驱动实际浏览器下载页面
  • 手动计算JavaScript代码的功能,并在Python中执行等效的工作
  • 对已构建的DOM运行无头JavaScript解释器

如何设置PhantomJ和selenium?