2011-07-11 124 views
1

我想寫一個使用Python的爬蟲。這意味着:我已經獲得了某些網站的主頁的網址,並且我希望我的程序可以通過訪問網站的鏈接抓取所有網站。我怎樣才能輕鬆快速地做到這一點?我已經嘗試了BeautifulSoup,但它真的是CPU消耗,而且在我的電腦上很慢。Python的爬蟲?

+0

經常討論......看看處理「scrapy」的SO問題 –

回答

4

我推薦使用機械化與lxml.html組合。正如羅伯特國王建議的那樣,機械化可能是通過該網站進行導航的最佳選擇。提取元素我會使用lxml。 lxml比BeautifulSoup快得多,可能是Python可用的最快解析器。 this link顯示了python不同html解析器的性能測試。我個人不會使用scrapy包裝。

我還沒有測試過,但這可能是你要找的東西,第一部分是直接從mechanize documentationthe lxml documentation也相當有幫助。特別看看thisthis部分。

import mechanize 
import lxml.html 

br = mechanize.Browser() 
response = br.open("somewebsite") 

for link in br.links(): 
    print link 
    br.follow_link(link) # takes EITHER Link instance OR keyword args 
    print br 
    br.back() 

# you can also display the links with lxml 
html = response.read() 
root = lxml.html.fromstring(html) 
for link in root.iterlinks(): 
    print link 

您還可以通過root.xpath()獲取元素。一個簡單的wget甚至可能是最簡單的解決方案。

希望我能幫到你。

+0

我不認爲第一個for循環正在做你打算做的事情。 – cerberos

+0

我迄今爲止只使用機械化來瀏覽表格。它不是簡單地打印網站上的每個鏈接,然後按照它? br.back可能是不必要的。但在我看來,它的確如此。帖子[這裏](http://stackoverflow.com/questions/3569622/python-mechanize-follow-link-by-url-and-what-is-the-nr-parameter)是相似的。但是由於我對Python /編程一般都很陌生,如果我錯了,請糾正我。 – ilprincipe

+0

無論如何,我開始使用lxml,一切都變得更快!謝謝! –

1

看一看scrapy(和related questions)。至於性能......很難在看不到代碼的情況下提出任何有用的建議。

2

我喜歡使用機械化。它非常簡單,你下載它並創建一個瀏覽器對象。有了這個對象,你可以打開一個URL。您可以像在普通瀏覽器中一樣使用「後退」和「前進」功能。您可以遍歷頁面上的表單並在需要時填寫表單。 您也可以迭代頁面上的所有鏈接。每個鏈接對象都有你可以點擊的網址等。

這裏有一個例子: Download all the links(related documents) on a webpage using Python