我正在用scrapy写一个蜘蛛,但是,我遇到了一些用js渲染的网站,因此urllib2.open_url不起作用。我发现我可以使用 webbrowser.open_new(url) 打开浏览器,但是,我没有找到如何使用 webbrowser 获取页面的 src 代码。有没有什么方法可以用 webbrowser 来做到这一点,或者有没有其他没有 webbrowser 的解决方案来处理 js 站点?
4 回答
您可以将刮板与可用的 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
如果你需要一个完整的 js 引擎,可以通过多种方式从 Python 驱动 webkit。直到最近,这些事情都是用Selenium完成的。Selenium 驱动整个浏览器。
最近有更新和更简单的方法可以从 Python 运行 webkit 引擎(包括 v8 javascript 引擎)。看到这个问题: Headless Browser for Python (Javascript support REQUIRED!)
它引用这个博客作为一个例子Scraping Javascript Webpages with Webkit。它看起来或多或少只是你需要的。
如果您需要处理 JavaScript,则需要实现 JavaScript 引擎。这使您的蜘蛛更加复杂。主要是因为 JavaScript 几乎总是根据时间或用户采取的操作来修改 DOM。这使得在爬虫中处理 JS 变得极具挑战性。如果你真的需要在你的蜘蛛中处理 JavaScript,你可以看看 Mozilla 的 JavaScript 引擎:https ://developer.mozilla.org/en/docs/SpiderMonkey