從零開始學會Python 爬蟲,該怎麼做?

2020-12-11 潮流中文站

Python離我們最近的案例可能是春運的時候程式設計師利用Python各種腳本的搶票源碼搶到回家的車票了。

其實,Python能做的不僅僅是搶票哦,今天小編就給大家總結了一些Python爬取各種東西的案例,讓你看看Python到底有多強大。

從網站某一個頁面(通常是首頁)開始,讀取網頁的內容,找到在網頁中的其它連結地址,然後通過這些連結地址尋找下一個網頁,這樣一直循環下去,直到把這個網站所有的網頁都抓取完為止。如果把整個網際網路當成一個網站,那麼網絡蜘蛛就可以用這個原理把網際網路上所有的網頁都抓取下來。

網絡爬蟲(又被稱為網頁蜘蛛,網絡機器人,在FOAF社區中間,更經常的稱為網頁追逐者),是一種按照一定的規則,自動的抓取全球資訊網信息的程序或者腳本。另外一些不常使用的名字還有螞蟻,自動索引,模擬程序或者蠕蟲。

你需要學習:

基本的爬蟲工作原理

基本的http抓取工具,scrapy

Bloom Filter: Bloom Filters by Example

如果需要大規模網頁抓取,你需要學習分布式爬蟲的概念。其實沒那麼玄乎,你只要學會怎樣維護一個所有集群機器能夠有效分享的分布式隊列就好。最簡單的實現是python-rq: https://github.com/nvie/rq

rq和Scrapy的結合:darkrho/scrapy-redis · GitHub

後續處理,網頁析取(grangier/python-goose · GitHub),存儲(Mongodb)

1)首先你要明白爬蟲怎樣工作。

想像你是一隻蜘蛛,現在你被放到了互聯「網」上。那麼,你需要把所有的網頁都看一遍。怎麼辦呢?沒問題呀,你就隨便從某個地方開始,比如說人民日報的首頁,這個叫initial pages,用$表示吧。

在人民日報的首頁,你看到那個頁面引向的各種連結。於是你很開心地從爬到了「國內新聞」那個頁面。太好了,這樣你就已經爬完了倆頁面(首頁和國內新聞)!暫且不用管爬下來的頁面怎麼處理的,你就想像你把這個頁面完完整整抄成了個html放到了你身上。

突然你發現, 在國內新聞這個頁面上,有一個連結鏈回「首頁」。作為一隻聰明的蜘蛛,你肯定知道你不用爬回去的吧,因為你已經看過了啊。所以,你需要用你的腦子,存下你已經看過的頁面地址。這樣,每次看到一個可能需要爬的新連結,你就先查查你腦子裡是不是已經去過這個頁面地址。如果去過,那就別去了。

好的,理論上如果所有的頁面可以從initial page達到的話,那麼可以證明你一定可以爬完所有的網頁。

2)效率

通常的判重做法是怎樣呢?Bloom Filter. 簡單講它仍然是一種hash的方法,但是它的特點是,它可以使用固定的內存(不隨url的數量而增長)以O(1)的效率判定url是否已經在set中。可惜天下沒有白吃的午餐,它的唯一問題在於,如果這個url不在set中,BF可以100%確定這個url沒有看過。但是如果這個url在set中,它會告訴你:這個url應該已經出現過,不過我有2%的不確定性。注意這裡的不確定性在你分配的內存足夠大的時候,可以變得很小很少。

注意到這個特點,url如果被看過,那麼可能以小概率重複看一看(沒關係,多看看不會累死)。但是如果沒被看過,一定會被看一下(這個很重要,不然我們就要漏掉一些網頁了!)。

好,現在已經接近處理判重最快的方法了。另外一個瓶頸——你只有一臺機器。不管你的帶寬有多大,只要你的機器下載網頁的速度是瓶頸的話,那麼你只有加快這個速度。用一臺機子不夠的話——用很多臺吧!當然,我們假設每臺機子都已經進了最大的效率——使用多線程(python的話,多進程吧)。

3)集群化抓取

爬取豆瓣的時候,我總共用了100多臺機器晝夜不停地運行了一個月。想像如果只用一臺機子你就得運行100個月了...

那麼,假設你現在有100臺機器可以用,怎麼用python實現一個分布式的爬取算法呢?

我們把這100臺中的99臺運算能力較小的機器叫作slave,另外一臺較大的機器叫作master,那麼回顧上面代碼中的url_queue,如果我們能把這個queue放到這臺master機器上,所有的slave都可以通過網絡跟master聯通,每當一個slave完成下載一個網頁,就向master請求一個新的網頁來抓取。而每次slave新抓到一個網頁,就把這個網頁上所有的連結送到master的queue裡去。同樣,bloom filter也放到master上,但是現在master只發送確定沒有被訪問過的url給slave。Bloom Filter放到master的內存裡,而被訪問過的url放到運行在master上的Redis裡,這樣保證所有操作都是O(1)。(至少平攤是O(1),Redis的訪問效率見:LINSERT – Redis)

4)展望及後處理

雖然上面用很多「簡單」,但是真正要實現一個商業規模可用的爬蟲並不是一件容易的事。上面的代碼用來爬一個整體的網站幾乎沒有太大的問題。

但是如果附加上你需要這些後續處理,比如

有效地存儲(資料庫應該怎樣安排)

有效地判重(這裡指網頁判重,咱可不想把人民日報和抄襲它的大民日報都爬一遍)

有效地信息抽取(比如怎麼樣抽取出網頁上所有的地址抽取出來,「朝陽區奮進路中華道」),搜尋引擎通常不需要存儲所有的信息,比如圖片我存來幹嘛...

及時更新(預測這個網頁多久會更新一次)

當你這四步都能熟練掌握了之後,你還得熟練掌握對於一些有反爬網站得處理,這個我們下次介紹反爬你需要做的有哪些?然後覺得不錯的朋友給小編點個關注吧,非常感謝哦!

相關焦點

  • 如何從零開始學Python
    如何從零開始學python?書聲琅琅教育番茄老師介紹,零基礎的朋友學python相對來講難度要大,但是很多python大牛都是從零基礎上來的,對於這些python大牛來講,參加合理的培訓指導和有一套python學習路線是分不開的,有目標有計劃的學習才能更加高效。
  • 從零開始的 Python 爬蟲速成指南,10篇 Python 技術熱文
    其中有基礎知識,爬蟲項目實戰,資料庫,web開發等。註:以下文章,點擊標題即可閱讀《從零開始的 Python 爬蟲速成指南》本文主要內容為以最短的時間寫一個最簡單的爬蟲,可以抓取論壇的帖子標題和帖子內容等。
  • 從零開始的python爬蟲速成指南
    在前言:最近後臺有人留言問:有沒有python爬蟲的相關教程,爬蟲不是我專業方向,很多不是很熟悉,而網上很多資料講的過於散亂,不能很好的系統性學習爬蟲,而且水平參差不齊。特委託一位熟悉爬蟲的小夥伴,幫忙把關,將網上現有資料進行整合,整理了一份相對比較系統的資料。
  • 從零開始的Python爬蟲教程(一):獲取HTML文檔
    從零開始的Python爬蟲教程(零):粗識HTML結構中,粗略給大家介紹了一下HTML文檔,是為了在接下來的教程中讓大家更容易理解和掌握。在接下來的教程中,需要大家提前安裝python3.x版本,大家不必拘泥於具體的版本,不管安裝的是3.0還是最新的3.7,都不影響接下來的操作。至於安裝教程,這裡就不過多贅述了,讀者可自行搜索到詳細的教程。
  • Python視頻教程網課編程零基礎入門數據分析網絡爬蟲全套Python...
    Python視頻教程網課編程零基礎入門數據分析網絡爬蟲全套Python視頻教程 2020年07月08日 11:00作者:黃頁編輯:黃頁
  • Python 從零開始--入門篇
    ,目的只有一個是大家一起能夠使用 python 寫自己的爬蟲,能夠達到公司要求的基本水平。推薦一些 python 方面的書籍入門篇:簡明Python教程Head First Python 中文版笨辦法學Pythonpython 3.x 從零開始學進階篇:Python核心編程深入理解Pythonpython 視頻:推薦使用 小甲魚的 python 教程(褒貶不一)連結:https://pan.baidu.com/s/1oePd-y_ds5
  • Python 爬蟲「學前班」!學會免踩坑!
    作者 | 喵叔責編 | 胡巍巍爬蟲應用的廣泛,例如搜尋引擎、採集數據、廣告過濾、數據分析等。當我們對少數網站內容進行爬取時寫多個爬蟲還是有可能的,但是對於需要爬取多個網站內容的項目來說是不可能編寫多個爬蟲的,這個時候我們就需要智能爬蟲。
  • 從0開始學Python爬蟲——Lesson2
    本系列教程主要用的就是selenium庫來進行與瀏覽器交互,完成自動化處理,從而達到爬蟲的目的。講了這麼多,大家肯定迫不及待了,那麼咱們直接進入正題拿起你們的雙手,運行CMD,來更新一下pip,這是安裝和管理軟體包的,如圖所示輸入:python -m pip install --upgrade pip到最後提示successfully installed代表安裝成功然後我們再輸入pip install selenium來安裝selenium庫,如圖所示
  • Python爬蟲入門教程:超級簡單的Python爬蟲教程
    這是一篇詳細介紹 Python 爬蟲入門的教程,從實戰出發,適合初學者。讀者只需在閱讀過程緊跟文章思路,理清相應的實現代碼,30 分鐘即可學會編寫簡單的 Python 爬蟲。輸入代碼後,保存記事本,然後修改文件名和後綴名為"HTML.html";運行該文件後的效果
  • Python開發簡單爬蟲【學習資料總結】
    一、簡單爬蟲架構 開發爬蟲步驟 python語言基礎:(帶你熟悉python語言的特性,學會使用python開發環境,使用python開發一些簡單的案例)
  • 初學者如何用「python爬蟲」技術抓取網頁數據?
    想要入門Python 爬蟲首先需要解決四個問題:1.熟悉python編程2.了解HTML3.了解網絡爬蟲的基本原理4.學習使用python爬蟲庫1、熟悉python編程剛開始入門爬蟲,初學者無需學習python的類,多線程,模塊和其他稍微困難的內容。
  • Python入門指南教程:10天學會使用python做爬蟲!免費領取!
    從去年開始,公眾號鋪天蓋地的python廣告,讓很多行外人也知道了python這個東西,python語言開始變得無所不能,剛畢業的新手用python能做什麼?前些天我弟弟突然聊天,推薦我學python,我把聊天截圖給了學計算機的楊先生。楊先生的解釋:python和C語言、java一樣是一門程式語言。學會了或許可以三分鐘做好excel的數據分析。但是,為了寫這個三分鐘的程序,你可能要花一個星期的時間。就像讓你作圖前,先自己編一個PS軟體一樣,實際應用中要難的多。
  • @程式設計師,想要基於 Python 3.4 玩爬蟲該看些什麼?
    「編寫第一個網絡爬蟲」為了抓取網站,我們首先需要下載包含有感興趣數據的網頁,該過程一般稱為爬取(crawling)。爬取一個網站有很多種方法,而選用哪種方法更加合適,則取決於目標網站的結構。下面是該示例爬蟲的代碼。
  • 如何快速學會Python爬蟲(入門篇)
    Python爬蟲入門二之爬蟲基礎了解3. Python爬蟲入門三之Urllib庫的基本使用4. Python爬蟲入門四之Urllib庫的高級用法5. Python爬蟲入門五之URLError異常處理6.
  • python爬蟲-- Scrapy入門
    前言轉行做python程式設計師已經有三個月了,這三個月用Scrapy爬蟲框架寫了兩百多個爬蟲,不能說精通了Scrapy,但是已經對Scrapy有了一定的熟悉
  • python全棧+爬蟲+自動化+AI=python全能工程師-挑戰年薪30W+
    Python的排名從去年開始就藉助人工智慧持續上升,現在它的流行程度已經成為了第一名。Python的火熱,也帶動了工程師們的就業熱。據統計,現在初中級python工程師的起薪一般在10-20K。 Python工程師就業環境 目前網際網路企業包括騰訊、百度、阿里、滴滴、豆瓣等早已經開始做Python人才儲備布局,並且,各大技術企業也開始高薪招聘各類Python技術人才。 Python是一門開發語言,在企業不同業務環境中,有不同的用武之地。對於企業來說,會的技能越多,你的薪資也越高。
  • 如何開始寫你的第一個python腳本——簡單爬蟲入門!
    好多朋友在入門python的時候都是以爬蟲入手,而網絡爬蟲是近幾年比較流行的概念,特別是在大數據分析熱門起來以後,學習網絡爬蟲的人越來越多,哦對,現在叫數據挖掘了!其實,一般的爬蟲具有2個功能:取數據和存數據!好像說了句廢話。。。
  • 開課吧Python:Python爬蟲是什麼?爬蟲工程師薪資怎麼樣?
    這個時候你會怎麼做?手動上Ctrl+C和Ctrl+V?這個方法是對的。在數據量很小的情況下我們還是可以這樣做的,但是在數據數千的情況下你還是要這樣做嗎?爬蟲技術可以輕鬆解決問題。我們可以看到爬蟲技術主要可以幫助我們做兩種事情:一種是對數據採集的需求,主要針對特定規則下的大量數據的信息採集;另一個是自動化需求,主要用於信息聚合和搜索。
  • python爬蟲很強大,在爬蟲裡如何自動操控瀏覽器呢?
    概述:python通過selenium爬取數據是很多突破封鎖的有效途徑。但在使用selenium中會遇到很多問題,本文就通過一問一答的形式來通熟易懂的普及如何通過selenium執行javascript程序,進而獲取動態執行後的網頁。如果你喜歡,歡迎轉發本文。python爬蟲編程:用selenium執行javascript出錯了,該咋改?
  • Python爬蟲之urllib庫—爬蟲的第一步
    第一個爬蟲代碼的實現我想應該是從urllib開始吧,博主開始學習的時候就是使用urllib庫敲了幾行代碼就實現了簡單的爬數據功能,我想大多夥伴們也都是這麼過來的