2013-01-11 24 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以及從命令行使用它時出現的一些問題,但除此之外它很棒。

相關問題