首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Python在底层执行页面的JavaScript?

用Python在底层执行页面的JavaScript?
EN

Stack Overflow用户
提问于 2016-02-10 00:16:12
回答 3查看 75关注 0票数 1

当用urllib2抓取this页面时:

代码语言:javascript
复制
url = https://www.geckoboard.com/careers/
response = urllib2.urlopen(url)
content = response.read() 

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

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

因此,前端ENGINEER元素似乎是由Javascript动态加载的。有没有可能让这个Javascript在不涉及Selenium、BeautifulSoup或其他的情况下由urllib2 (或其他低级库)执行?

EN

回答 3

Stack Overflow用户

发布于 2016-02-10 00:25:57

这些信息片段是使用一些ajax request加载的。你可以使用mozillafirebug扩展,或者google chrome有它自己的工具来获取这些细节。只需在打开URL时在google chrome中点击f12即可。你可以在那里找到完整的细节。

在那里您将找到一个带有url https://app.recruiterbox.com/widget/13587/openings/的请求。

来自上述url的信息被呈现在该网页中。

票数 1
EN

Stack Overflow用户

发布于 2016-02-10 00:28:35

据我所知,你正在为多个网站构建一些通用的东西,并且不想深入到某个网站是如何加载的,什么请求是在幕后构造页面的。在这种情况下,真正的浏览器是您的朋友--通过selenium在真正的浏览器中自动加载页面--然后,一旦页面加载完成,将.page_source传递给lxml.html (在我看来,这是您选择的HTML解析器)以进行进一步的解析。

如果你不想让浏览器出现,或者你没有显示器,你可以使用headless - PhantomJS或者virtual display上的普通浏览器。

下面是一个示例代码,可以帮助您入门:

代码语言:javascript
复制
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解析器。

票数 1
EN

Stack Overflow用户

发布于 2016-08-10 02:50:42

我认为你正在寻找类似这样的东西:https://github.com/scrapinghub/splash

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35296860

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档