2013-01-11 26 views
2

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

+0

网页浏览器不存储页面的标记,它包含一个DOM。 – Bergi

回答

0

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

5

你可以在那里使用带有Webkit引擎的scraper。

其中之一是dryscrape。

例子:

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

+0

还有一个鬼(http://jeanphix.me/Ghost.py/)另一个无头webkit python实现。我还没有尝试过,所以我不能说哪个更好。 –

+0

Raslan:谢谢你的建议,我在windows上工作,当我尝试安装'dryscrape'时,它告诉安装成功,但是当我在运行时尝试导入drayscrape时失败,说'从cssselect导入GenericTranslator ImportError:没有名为cssselect的模块。 – user806135

+0

dryscrape的安装指南有命令 pip install -r requirements.txt 其中文件requirements.txt具有要安装的软件包列表。其中之一是cssselect。当我尝试运行'pip install -r requirements.txt'时,请按照后面的安装指南 –

1

如果你需要一个完整的JS引擎,有许多的方法可以在Python驱动的webkit 。直到最近,这些事情都是用Selenium完成的。 Selenium驱动整个浏览器。

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

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

1

我试图在几天内找到相同问题的答案。

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

对于在浏览器环境中执行JavaScript这样的琐碎事情,您可以使用Ghost.py。它具有some sort of documentation以及从命令行使用它时出现的一些问题,但除此之外它很棒。

相关问题