2

我正在用scrapy写一个蜘蛛,但是,我遇到了一些用js渲染的网站,因此urllib2.open_url不起作用。我发现我可以使用 webbrowser.open_new(url) 打开浏览器,但是,我没有找到如何使用 webbrowser 获取页面的 src 代码。有没有什么方法可以用 webbrowser 来做到这一点,或者有没有其他没有 webbrowser 的解决方案来处理 js 站点?

4

4 回答 4

5

您可以将刮板与可用的 Webkit 引擎一起使用。

其中之一是干刮。

例子:

import dryscrape

search_term = 'dryscrape'

# set up a web scraping session
sess = dryscrape.Session(base_url = 'http://google.com')

# we don't need images
sess.set_attribute('auto_load_images', False)

# visit homepage and search for a term
sess.visit('/')
q = sess.at_xpath('//*[@name="q"]')
q.set(search_term)
q.form().submit()

# extract all links
for link in sess.xpath('//a[@href]'):
  print link['href']

# save a screenshot of the web page
sess.render('google.png')
print "Screenshot written to 'google.png'"

查看更多信息:

https://github.com/niklasb/dryscrape
https://dryscrape.readthedocs.org/en/latest/index.html

于 2013-01-11T03:14:43.640 回答
1

如果你需要一个完整的 js 引擎,可以通过多种方式从 Python 驱动 webkit。直到最近,这些事情都是用Selenium完成的。Selenium 驱动整个浏览器。

最近有更新和更简单的方法可以从 Python 运行 webkit 引擎(包括 v8 javascript 引擎)。看到这个问题: Headless Browser for Python (Javascript support REQUIRED!)

它引用这个博客作为一个例子Scraping Javascript Webpages with Webkit。它看起来或多或少只是你需要的。

于 2013-01-11T03:29:53.687 回答
1

几天来,我正试图找到相同问题的答案。

我建议你尝试使用WebKit的QT 框架。有两个 python 绑定。一个是PyQt,另一个是PySide。如果你想创建更复杂的东西或者你想 100% 控制你的代码,你可以直接使用它们。

对于像在浏览器环境中执行 JavaScript 这样的琐碎事情,您可以使用Ghost.py。从命令行使用它时,它有一些文档和一些问题,但除此之外它就很棒。

于 2013-01-12T15:10:22.757 回答
0

如果您需要处理 JavaScript,则需要实现 JavaScript 引擎。这使您的蜘蛛更加复杂。主要是因为 JavaScript 几乎总是根据时间或用户采取的操作来修改 DOM。这使得在爬虫中处理 JS 变得极具挑战性。如果你真的需要在你的蜘蛛中处理 JavaScript,你可以看看 Mozilla 的 JavaScript 引擎:https ://developer.mozilla.org/en/docs/SpiderMonkey

于 2013-01-11T03:06:47.920 回答