我想寫一個使用Python的爬蟲。這意味着:我已經獲得了某些網站的主頁的網址,並且我希望我的程序可以通過訪問網站的鏈接抓取所有網站。我怎樣才能輕鬆快速地做到這一點?我已經嘗試了BeautifulSoup,但它真的是CPU消耗,而且在我的電腦上很慢。Python的爬蟲?
回答
我推薦使用機械化與lxml.html組合。正如羅伯特國王建議的那樣,機械化可能是通過該網站進行導航的最佳選擇。提取元素我會使用lxml。 lxml比BeautifulSoup快得多,可能是Python可用的最快解析器。 this link顯示了python不同html解析器的性能測試。我個人不會使用scrapy包裝。
我還沒有測試過,但這可能是你要找的東西,第一部分是直接從mechanize documentation。 the lxml documentation也相當有幫助。特別看看this和this部分。
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甚至可能是最簡單的解決方案。
希望我能幫到你。
我不認爲第一個for循環正在做你打算做的事情。 – cerberos
我迄今爲止只使用機械化來瀏覽表格。它不是簡單地打印網站上的每個鏈接,然後按照它? br.back可能是不必要的。但在我看來,它的確如此。帖子[這裏](http://stackoverflow.com/questions/3569622/python-mechanize-follow-link-by-url-and-what-is-the-nr-parameter)是相似的。但是由於我對Python /編程一般都很陌生,如果我錯了,請糾正我。 – ilprincipe
無論如何,我開始使用lxml,一切都變得更快!謝謝! –
看一看scrapy(和related questions)。至於性能......很難在看不到代碼的情況下提出任何有用的建議。
我喜歡使用機械化。它非常簡單,你下載它並創建一個瀏覽器對象。有了這個對象,你可以打開一個URL。您可以像在普通瀏覽器中一樣使用「後退」和「前進」功能。您可以遍歷頁面上的表單並在需要時填寫表單。 您也可以迭代頁面上的所有鏈接。每個鏈接對象都有你可以點擊的網址等。
這裏有一個例子: Download all the links(related documents) on a webpage using Python
下面是一個very fast (concurrent) recursive web scraper using eventlet的示例。它只會打印找到的網址,但您可以修改它以完成您想要的操作。也許你想用lxml(快速),pyquery(慢但仍然快)或BeautifulSoup(慢)解析html來獲得你想要的數據。
- 1. Python爬蟲 - html.fromstring
- 2. Python網絡爬蟲
- 3. Python中的網絡爬蟲
- 4. Python爬蟲的問題
- 5. python中的Facebook爬蟲
- 6. 硒與python網絡爬蟲
- 7. Python多線程爬蟲
- 8. 網絡爬蟲
- 9. 爬蟲實例
- 10. Python的網絡爬蟲:連接超時
- 11. Python的多網絡爬蟲問題
- 12. 簡單的Python網絡爬蟲
- 13. Python簡單的網絡爬蟲錯誤(無限循環爬行)
- 14. Python BeautifulSoup提取標題網頁爬蟲
- 15. 網絡爬蟲多處理在Python 3
- 16. Python網絡爬蟲沒有輸出
- 17. Python多域名爬蟲InvalidSchema異常
- 18. python網站爬蟲(多個網站)
- 19. Python網絡爬蟲與MySQL數據庫
- 20. Python爬蟲。解析並執行ajax
- 21. 與Python 2.7.9分頁網絡爬蟲
- 22. Python網絡爬蟲,深度問題
- 23. 使用python beautifulsoup進行網頁爬蟲
- 24. PHP與Python對於網絡爬蟲
- 25. 開源C++爬蟲?
- 26. C++網絡爬蟲
- 27. Java Web爬蟲庫
- 28. 文件爬蟲OSError
- 29. PHP網絡爬蟲
- 30. java網絡爬蟲
經常討論......看看處理「scrapy」的SO問題 –