【发布时间】:2014-11-15 17:26:49
【问题描述】:
我正在尝试抓取一个通过 ajax 加载其大部分内容的页面。
例如,我试图从this webpage 中获取所有具有data-section 属性的li 节点。响应 html 有六个我需要的必需节点,但其余大部分是通过 ajax 请求加载的,该请求返回包含剩余 li 节点的 html。
所以我从使用请求切换到使用带有 PhantomJS 驱动程序的 selenium,它应该是 xhr 友好的,但我没有得到额外的 ajax 加载内容。
可运行:
from selenium import webdriver
from lxml import html
br = webdriver.PhantomJS()
br.get(url)
tree = html.fromstring(br.page_source)
print tree.xpath('//li[@data-section]/a/text()')
简而言之,以上代码无法通过 xhr 将 html 注入网页。我怎样才能做到这一点?如果没有,我的其他无头选项是什么。
【问题讨论】:
-
@ArtjomB。谢谢,虽然在那个问题中,有一个可以检查预期条件的唯一表,但这里似乎有任意数量的相同
li元素正在加载。你有任何提示如何检查吗? EC 解决方案听起来比隐式等待更好,因为它会减慢爬取速度 -
由于以前不知道元素的数量,您应该尝试使用implicit wait。我不知道你的网站,如果没有什么可以用作条件,那么你需要使用隐式等待。
-
@ArtjomB。刚刚在我之前的评论中编辑过。我要爬几万页,隐式等待听起来不是很有吸引力。网络不稳定,所以我必须为隐式等待设置一个严重的值来解释慢速时段,这也会在良好的网络期间拖累爬网。
标签: python ajax selenium selenium-webdriver phantomjs