当前位置: 首页 > 知识库问答 >
问题:

使用Python请求。开始解析不会立即加载的html代码

常宸
2023-03-14

我试图写一个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']")

此时,html_element应该是一个元素列表(我认为在这种情况下只有1),但它是空的。我认为这是因为网站不是一次加载的,所以当requests.get()出去抓取它时,它只是抓取了第一部分。所以我的问题是1:我对这个问题的评估正确吗?如果是这样,有没有办法让requests.get()在返回html之前等待,或者完全通过另一个路由来获取整个页面。

谢谢

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

共有2个答案

孔宇
2023-03-14

页面使用javascript加载在请求获取html时未加载的表,因此您获取的是所有html,而不是使用javascript生成的html,您可以使用selenium结合phantomjs进行无头浏览以获取html:

from selenium import webdriver

browser = webdriver.PhantomJS()
browser.get("http://www.anthropologie.eu/anthro/index.jsp#/")
html = browser.page_source
print(html)
狄元魁
2023-03-14

你对这个问题的评估不正确。

您可以检查结果并查看是否存在

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

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

对此有许多普遍的解决办法。例如:

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

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

  • 问题内容: 我正在处理HTTP流量数据集,该数据集由完整的POST和GET请求组成,如下所示。我已经用Java编写了代码,该代码已经分离了每个请求,并将其另存为数组列表中的字符串元素。 现在我很困惑如何在Java中解析这些原始HTTP请求,有什么方法比手动解析更好吗? 问题答案: 我[正在]处理[HTTP]流量数据集,该数据集由完整的POST和GET请求组成 因此,您想解析包含多个HTTP请求的文

  • 我正在研究HTTP流量数据集,它由完整的POST和GET请求组成,如下所示。我用java编写了代码,将每个请求分开,并将其保存为数组列表中的字符串元素。现在我很困惑如何在java中解析这些原始HTTP请求,有什么方法比手动解析更好吗?

  • 问题内容: 我从其他页面加载HTML以提取并显示该页面中的数据: 确实可以,但是由于我的浏览器尝试加载在205.html中链接的图像。这些图像在我的域中不存在,因此出现很多404错误。 有没有办法像解析页面一样但不将整个页面加载到浏览器中? 问题答案: 实际上,如果您查看jQuery文档,它说您可以将“所有者文档”作为第二个参数传递给。 因此,我们可以做的是创建一个虚拟文档,以使浏览器不会自动加载

  • 问题内容: 我正在尝试教自己一些基本的网络抓取。使用Python的请求模块,在尝试以下操作之前,我能够抓取各种网站的html: 我得到的不是基本的html,而是本页面的内容: 我已经尝试过将get / post与我可以从文档,SO和其他示例中猜到的每种语法进行多种组合。我不明白上面看到的内容,无法将其转换为可以阅读的任何内容,也无法弄清楚如何获得自己真正想要的东西。我的问题是,如何获取以上页面的h

  • 本文向大家介绍Python Http请求json解析库用法解析,包括了Python Http请求json解析库用法解析的使用技巧和注意事项,需要的朋友参考一下 httpparser介绍 :1.解析字节类型的http与https请求数据 :2.支持已k-v形式修改请求数据 :3.支持重新编码请求数据 源码 如何使用 1.解析请求数据 request_first,request_headers,req