用Python在低层执行页面的JavaScript?

2024-05-15 17:15:57 发布

您现在位置:Python中文网/ 问答频道 /正文

使用urllib2刮取this页时:

url = https://www.geckoboard.com/careers/
response = urllib2.urlopen(url)
content = response.read() 

在源(content)中找不到以下元素(到作业的链接)

enter image description here

查看在浏览器中呈现的完整源代码:

enter image description here

因此,前端工程师元素似乎是由Javascript动态加载的。有没有可能让urllib2(或其他低级库)执行这个Javascript,而不涉及Selenium、BeautifulSoup或其他类似的程序?你知道吗


Tags: httpscomurl元素readresponsewww作业
3条回答

我想你在找这样的东西:https://github.com/scrapinghub/splash

这些信息是使用一些ajax request加载的。你可以使用firebug扩展mozilla或者googlechrome有自己的工具来获取这些细节。只需在googlechrome中点击f12,同时打开URL。你可以在那里找到完整的细节。你知道吗

在那里你会发现一个url为https://app.recruiterbox.com/widget/13587/openings/的请求

来自上述url的信息将呈现在该网页中。你知道吗

据我所知,您正在为多个网站构建一些通用的,不想深入了解某个网站是如何加载的,在引擎盖下生成什么请求来构建页面。在本例中,真正的浏览器是您的朋友—通过^{}在真正的浏览器中自动加载页面—然后,在加载页面后,将.page_source传递给lxml.html(据我所知,这是您选择的HTML解析器),以便进一步解析。你知道吗

如果你不想让浏览器出现或者你没有显示器,你可以去无头的^{}或者一个virtual display上的普通浏览器。你知道吗

下面是一个示例代码,让您开始:

from lxml.html import fromstring
from selenium import webdriver

driver = webdriver.PhantomJS()
driver.set_page_load_timeout(15)
driver.get("https://www.geckoboard.com/careers/")

# TODO: you might need a delay here

tree = fromstring(driver.page_source)

driver.close()

# TODO: parse HTML

您还应该知道,这里有很多methods to locate elements in selenium,您甚至不需要单独的HTML解析器。你知道吗

相关问题 更多 >