Linux中國

三種 Python 網路內容抓取工具與爬蟲

在一個理想的世界裡,你需要的所有數據都將以公開而文檔完備的格式清晰地展現,你可以輕鬆地下載並在任何你需要的地方使用。

然而,在真實世界裡,數據是凌亂的,極少被打包成你需要的樣子,要麼經常是過期的。

你所需要的信息經常是潛藏在一個網站里。相比一些清晰地、有調理地呈現數據的網站,更多的網站則不是這樣的。 爬取數據 crawling 挖掘數據 scraping 、加工數據、整理數據這些是獲取整個網站結構來繪製網站拓撲來收集數據所必須的活動,這些可以是以網站的格式儲存的或者是儲存在一個專有資料庫中。

也許在不久的將來,你需要通過爬取和挖掘來獲得一些你需要的數據,當然你幾乎肯定需要進行一點點的編程來正確的獲取。你要怎麼做取決於你自己,但是我發現 Python 社區是一個很好的提供者,它提供了工具、框架以及文檔來幫助你從網站上獲取數據。

在我們進行之前,這裡有一個小小的請求:在你做事情之前請思考,以及請耐心。抓取這件事情並不簡單。不要把網站爬下來只是複製一遍,並其它人的工作當成是你自己的東西(當然,沒有許可)。要注意版權和許可,以及你所爬行的內容應用哪一個標準。尊重 robots.txt 文件。不要頻繁的針對一個網站,這將導致真實的訪問者會遇到訪問困難的問題。

在知曉這些警告之後,這裡有一些很棒的 Python 網站爬蟲工具,你可以用來獲得你需要的數據。

Pyspider

讓我們先從 pyspider 開始介紹。這是一個帶有 web 界面的網路爬蟲,讓與使之容易跟蹤多個爬蟲。其具有擴展性,支持多個後端資料庫和消息隊列。它還具有一些方便的特性,從優先順序到再次訪問抓取失敗的頁面,此外還有通過時間順序來爬取和其他的一些特性。Pyspider 同時支持 Python 2 和 Python 3。為了實現一個更快的爬取,你可以在分散式的環境下一次使用多個爬蟲進行爬取。

Pyspyder 的基本用法都有良好的 文檔說明 ,包括簡單的代碼片段。你能通過查看一個 在線的樣例 來體驗用戶界面。它在 Apache 2 許可證下開源,Pyspyder 仍然在 GitHub 上積極地開發。

MechanicalSoup

MechanicalSoup 是一個基於極其流行而異常多能的 HTML 解析庫 Beautiful Soup 建立的爬蟲庫。如果你的爬蟲需要相當的簡單,但是又要求檢查一些選擇框或者輸入一些文字,而你又不想為這個任務單獨寫一個爬蟲,那麼這會是一個值得考慮的選擇。

MechanicalSoup 在 MIT 許可證下開源。查看 GitHub 上該項目的 example.py 樣例文件來獲得更多的用法。不幸的是,到目前為止,這個項目還沒有一個很好的文檔。

Scrapy

Scrapy 是一個有著活躍社區支持的抓取框架,在那裡你可以建造自己的抓取工具。除了爬取和解析工具,它還能將它收集的數據以 JSON 或者 CSV 之類的格式輕鬆輸出,並存儲在一個你選擇的後端資料庫。它還有許多內置的任務擴展,例如 cookie 處理、代理欺騙、限制爬取深度等等,同時還可以建立你自己附加的 API。

要了解 Scrapy,你可以查看網上的文檔或者是訪問它諸多的社區資源,包括一個 IRC 頻道、Reddit 子版塊以及關注他們的 StackOverflow 標籤。Scrapy 的代碼在 3 句版 BSD 許可證下開源,你可以在 GitHub 上找到它們。

如果你完全不熟悉編程,Portia 提供了一個易用的可視化的界面。scrapinghub.com 則提供一個託管的版本。

其它

  • Cola 自稱它是個「高級的分散式爬取框架」,如果你在尋找一個 Python 2 的方案,這也許會符合你的需要,但是注意它已經有超過兩年沒有更新了。
  • Demiurge 是另一個可以考慮的潛在候選者,它同時支持 Python 2和 Python 3,雖然這個項目的發展較為緩慢。
  • 如果你要解析一些 RSS 和 Atom 數據,Feedparser 或許是一個有用的項目。
  • Lassie 讓從網站檢索像說明、標題、關鍵詞或者是圖片一類的基本內容變得簡單。
  • RoboBrowser 是另一個簡單的庫,它基於 Python 2 或者 Python 3,它具有按鈕點擊和表格填充的基本功能。雖然它有一段時間沒有更新了,但是它仍然是一個不錯的選擇。

這遠不是一個完整的列表,當然,如果你是一個編程專家,你可以選擇採取你自己的方法而不是使用這些框架中的一個。或者你發現一個用其他語言編寫的替代品。例如 Python 編程者可能更喜歡 Python 附帶的 Selenium,它可以在不使用實際瀏覽器的情況下進行爬取。如果你有喜歡的爬取和挖掘工具,請在下面評論讓我們知道。

(題圖:You as a Machine. Modified by Rikki Endsley. CC BY-SA 2.0

via: https://opensource.com/resources/python/web-scraper-crawler

作者:Jason Baker 譯者:ZH1122 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國