2012-05-31 57 views
0

我正在構建一個Django應用程序,我正在使用Spynner進行Web爬行。我有這個問題,我希望有人能幫助我。Spynner崩潰python

我在模塊中 「crawler.py」 這一功能:

import spynner 

def crawling_js(url) 
    br = spynner.Browser() 
    br.load(url) 
    text_page = br.html 
    br.close (*) 
    return text_page 

(*)我試圖與br.close()太
在另一模塊(例如: 「import.py」)我把這樣的功能:

from crawler import crawling_js  

l_url = ["https://www.google.com/", "https://www.tripadvisor.com/", ...] 

for url in l_url: 
    mytextpage = crawling_js(url) 
    .. parse mytextpage.... 

當我通過第一URL中的作用時,我通過第二「URL」蟒蛇的毀損是正確的。 Python在這行中崩潰:br.load(url)。有人可以幫助我嗎?非常感謝

我: Django的1.3 的Python 2.7 Spynner 1.1.0 PyQt4的4.9.1

回答

0

爲什麼您需要實例BR = spynner.Browser()和每次調用crawling_js時間關閉()。在一個循環中,這將利用很多資源,我認爲這是它崩潰的原因。讓我們這樣想,br是一個瀏覽器實例。因此,您可以使其瀏覽任意數量的網站,而無需關閉並重新打開。調整你的代碼是這樣的:

import spynner 

br = spynner.Browser() #you open it only once. 

def crawling_js(url): 
    br.load(url) 
    text_page = br._get_html() #_get_html() to make sure you get the updated html 
    return text_page 

那麼如果你堅持要關閉BR以後你根本:

from crawler import crawling_js , br 

l_url = ["https://www.google.com/", "https://www.tripadvisor.com/", ...] 

for url in l_url: 
    mytextpage = crawling_js(url) 
    .. parse mytextpage.... 

br.close() 
+0

完美!現在,它的工作,非常感謝 – RoverDar

+0

聽到這一點很高興。然後請考慮[接受](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)這個答案。 – YusuMishi