亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

初學(xué)Python之爬蟲的簡單入門

系統(tǒng) 1750 0

初學(xué) Python 之爬蟲的簡單入門

一、 什么是爬蟲?

1. 簡單介紹爬蟲

? 初學(xué)Python之爬蟲的簡單入門_第1張圖片

?

爬蟲的 全稱為 網(wǎng)絡(luò)爬蟲,簡稱爬蟲 ,別名有 網(wǎng)絡(luò)機器人,網(wǎng)絡(luò)蜘蛛等等。

?

網(wǎng)絡(luò)爬蟲是一種自動獲取網(wǎng)頁內(nèi)容的程序,為搜索引擎 提供了重要的數(shù)據(jù)支撐。 搜索引擎通過網(wǎng)絡(luò)爬蟲技術(shù),將互聯(lián)網(wǎng)中 豐富 的網(wǎng)頁信息保存到本地,形成鏡像 備份 。 我們熟悉的 谷歌 、 百度本質(zhì)上也可 理解為 一種爬蟲。

?

如果形象地理解 ,爬蟲 就如同一只機器蜘蛛,它 的基本操作就是模擬人的行為去各個網(wǎng)站 抓取 數(shù)據(jù) 或返回數(shù)據(jù)

?

?

2. 爬蟲的分類

?

網(wǎng)絡(luò)爬蟲 一般分為傳統(tǒng)爬蟲和聚焦爬蟲。

?

傳統(tǒng)爬蟲從一個或若干 初始網(wǎng)頁的 URL 開始,抓取網(wǎng)頁 不斷從當前頁面上抽取新的 URL 放入隊列,直到滿足系統(tǒng)的一定條件 才停止,即 通過源碼解析來獲得想要的內(nèi)容。

?

聚焦爬蟲需要根據(jù)一定的網(wǎng)頁分析算法過濾與主題無關(guān)的鏈接,保留有用的鏈接并將其放入待抓取的 URL 隊列 ,再 根據(jù)一定的搜索策略從隊列中選擇下一步要抓取的網(wǎng)頁 URL ,并重復(fù)上述過程,直到滿足系統(tǒng)的一定條件 時停止 。另外,所有被爬蟲抓取的網(wǎng)頁 將會被系統(tǒng) 存儲、 分析、過濾,并建立索引,以便之后的查詢和檢索 ; 對于聚焦爬蟲來說,這一過程所得到的分析結(jié)果還可能對以后的抓取過程給出反饋和指導(dǎo)。

?

防爬蟲 :KS-WAF(網(wǎng)站統(tǒng)一防護系統(tǒng)) 將爬蟲行為分為搜索引擎爬蟲及掃描程序爬蟲,可屏蔽特定的搜索引擎爬蟲節(jié)省帶寬和性能,也可屏蔽掃描程序爬蟲,避免網(wǎng)站被惡意抓取頁面。 使用防爬蟲機制的基本上是 企業(yè) ,我們平時也能見到一些 對抗 爬蟲的經(jīng)典 方式 ,如 圖片驗證碼、滑塊驗證、封禁 IP 等等 。

?

?

3. 爬蟲的工作原理

下圖是一個網(wǎng)絡(luò)爬蟲的基本框架:

?

初學(xué)Python之爬蟲的簡單入門_第2張圖片

?

?

?

對應(yīng)互聯(lián)網(wǎng)的所有頁面可劃分為五部分:

?

初學(xué)Python之爬蟲的簡單入門_第3張圖片

?

1. 已下載未過期網(wǎng)頁 。

2. 已下載已過期網(wǎng)頁 :抓取到的網(wǎng)頁實際上是互聯(lián)網(wǎng)內(nèi)容的一個鏡像文件,互聯(lián)網(wǎng)是動態(tài)變化的,一部分互聯(lián)網(wǎng)上的內(nèi)容已經(jīng)發(fā)生了變化,這時,這部分抓取到的網(wǎng)頁就已經(jīng)過期了。

3. 待下載網(wǎng)頁 :待抓取 URL 隊列中的頁面。

4. 可知網(wǎng)頁 :既沒有被抓取也沒有在待抓取 URL 隊列中,但可通過對已抓取頁面或者待抓取 URL 對應(yīng)頁面進行分析獲取到的 URL ,認為是可知網(wǎng)頁。

5. 不可知網(wǎng)頁 :爬蟲無法直接抓取下載的網(wǎng)頁。

?

待抓取 URL 隊列中的 URL 順序排列涉及到抓取頁面的先后次序問題,而決定這些 URL 排列順序的方法叫做抓取策略。下面介紹六種常見的抓取策略:

?

1. 深度優(yōu)先遍歷策略

深度優(yōu)先遍歷策略是指網(wǎng)絡(luò)爬蟲從起始頁開始,由一個鏈接跟蹤到另一個鏈接,這樣不斷跟蹤鏈接下去直到處理完這條線路,之后再轉(zhuǎn)入下一個起始頁,繼續(xù)跟蹤鏈接。以下圖為例:

?

初學(xué)Python之爬蟲的簡單入門_第4張圖片

?

遍歷路徑: A-F-G ?E-H-I ?B C D

?

需要注意的是,深度優(yōu)先可能會找不到目標節(jié)點(即進入無限深度分支),因此,深度優(yōu)先策略不一定能適用于所有情況。

?

2. 寬度優(yōu)先遍歷策略

寬度優(yōu)先遍歷策略的基本思路是,將新下載網(wǎng)頁中發(fā)現(xiàn)的鏈接直接插入待抓取 URL 隊列的末尾。也就是指網(wǎng)絡(luò)爬蟲會先抓取起始網(wǎng)頁中鏈接的所有網(wǎng)頁,然后再選擇其中的一個鏈接網(wǎng)頁,繼續(xù)抓取在此網(wǎng)頁中鏈接的所有網(wǎng)頁。還是以上圖為例:

?

初學(xué)Python之爬蟲的簡單入門_第5張圖片

?

?

遍歷路徑:第一層: A-B-C-D-E-F ,第二層: G-H ,第三層: I

?

廣度優(yōu)先遍歷策略會徹底遍歷整個網(wǎng)絡(luò)圖,效率較低,但覆蓋網(wǎng)頁較廣。

?

3. 反向鏈接數(shù)策略

反向鏈接數(shù)是指一個網(wǎng)頁被其他網(wǎng)頁鏈接指向的數(shù)量。反向鏈接數(shù)反映一個網(wǎng)頁的內(nèi)容受到其他人推薦的程度。因此,很多時候搜索引擎的抓取系統(tǒng)會使用這個指標來評價網(wǎng)頁的重要程度,從而決定不同網(wǎng)頁的抓取先后順序。

?

而現(xiàn)實是網(wǎng)絡(luò)環(huán)境存在各種廣告鏈接、作弊鏈接的干擾,使得許多反向鏈接數(shù)反映的結(jié)果并不可靠。

?

4. Partial PageRank 策略

Partial PageRank 策略借鑒了 PageRank 算法的思想:對于已下載網(wǎng)頁,連同待抓取 URL 隊列中的 URL ,形成網(wǎng)頁集合,計算每個頁面的 PageRank 值,然后將待抓取 URL 隊列中的 URL 按照 PageRank 值的大小進行排列,并按照該順序抓取頁面。

?

若每次抓取一個頁面,就重新計算 PageRank 值,則效率太低。

一種折中方案是:每抓取 K 個頁面后,重新計算一次 PageRank 值。而對于已下載頁面中分析出的鏈接,即暫時沒有 PageRank 值的未知網(wǎng)頁那一部分,先給未知網(wǎng)頁一個臨時的 PageRank 值,再將這個網(wǎng)頁所有鏈接進來的 PageRank 值進行匯總,這樣就形成了該未知頁面的 PageRank 值,從而參與排序。以下圖為例:

?

初學(xué)Python之爬蟲的簡單入門_第6張圖片

?

設(shè) k 值為 3 ,即每抓取 3 個頁面后,重新計算一次 PageRank 值。

已知有 {1,2,3} 3 個網(wǎng)頁下載到本地,這 3 個網(wǎng)頁包含的鏈接指向待下載網(wǎng)頁 {4,5,6} (即待抓取 URL 隊列),此時將這 6 個網(wǎng)頁形成一個網(wǎng)頁集合,對其進行 PageRank 值的計算,則 {4,5,6} 每個網(wǎng)頁得到對應(yīng)的 PageRank 值,根據(jù) PageRank 值從大到小排序,由圖假設(shè)排序結(jié)果為 5,4,6 ,當網(wǎng)頁 5 下載后,分析其鏈接發(fā)現(xiàn)指向未知網(wǎng)頁 8 ,這時先給未知網(wǎng)頁 8 一個臨時的 PageRank 值,如果這個值大于網(wǎng)頁 4 6 PageRank 值,則接下來優(yōu)先下載網(wǎng)頁 8 ,由此思路不斷進行迭代計算。

?

5. OPIC 策略

此算法其實也是計算頁面重要程度。在算法開始前,給所有頁面一個相同的初始現(xiàn)金( cash )。當下載了某個頁面 P 之后,將 P 的現(xiàn)金分攤給所有從 P 中分析出的鏈接,并且將 P 的現(xiàn)金清空。對于待抓取 URL 隊列中的所有頁面按照現(xiàn)金數(shù)大小進行排序。

?

6. 大站優(yōu)先策略

對于待抓取 URL 隊列中的所有網(wǎng)頁,根據(jù)所屬的網(wǎng)站進行分類。待下載頁面數(shù)多的網(wǎng)站優(yōu)先下載。

?

?

二、爬蟲的基本流程

首先簡單了解關(guān)于 Request Response 的內(nèi)容:

Request :瀏覽器發(fā)送消息給某網(wǎng)址所在的服務(wù)器,這個請求信息的過程叫做 HTTP Request 。

Response: 服務(wù)器接收瀏覽器發(fā)送的消息,并根據(jù)消息內(nèi)容進行相應(yīng)處理,然后把消息返回給瀏覽器。這個響應(yīng)信息的過程叫做 HTTP Response 。瀏覽器收到服務(wù)器的 Response 信息后,會對信息進行相應(yīng)處理,然后展示在頁面上。

?

根據(jù)上述內(nèi)容將網(wǎng)絡(luò)爬蟲分為四個步驟:

1. 發(fā)起請求 :通過 HTTP 庫向目標站點發(fā)起請求,即發(fā)送一個 Request ,請求可以包含額外的 headers 等信息,等待服務(wù)器響應(yīng)。

常見的請求方法有兩種, GET POST 。 get 請求是把參數(shù)包含在了 URL Uniform Resource Locator, 統(tǒng)一資源定位符)里面,而 post 請求大多是在表單里面進行,也就是讓你輸入用戶名和秘密,在 url 里面沒有體現(xiàn)出來,這樣更加安全。 post 請求的大小沒有限制,而 get 請求有限制,最多 1024 個字節(jié)。

?

2. 獲取響應(yīng)內(nèi)容 :如果服務(wù)器能正常響應(yīng),會得到一個 Response , Response 的內(nèi)容便是所要獲取的頁面內(nèi)容,類型可能有 HTML , Json 字符串,二進制數(shù)據(jù)(如圖片視頻)等類型。

?

3. 解析內(nèi)容 :得到的內(nèi)容可能是 HTML ,可以用正則表達式、網(wǎng)頁解析庫進行解析。可能是 Json ,可以直接轉(zhuǎn)為 Json 對象解析,可能是二進制數(shù)據(jù),可以做保存或者進一步的處理。

Python 語言中,我們經(jīng)常使用 Beautiful Soup 、 pyquery 、 lxml 等庫,可以高效的從中獲取網(wǎng)頁信息,如節(jié)點的屬性、文本值等。

Beautiful Soup 庫是解析、遍歷、維護“標簽樹”的功能庫,對應(yīng)一個 HTML/XML 文檔的全部內(nèi)容。安裝方法非常簡單,如下:

?

            
              #
            
            
              安裝方法
            
            
              
pips install beautifulsoup4

 


            
            
              #
            
            
              驗證方法
            
            
              from
            
             bs4 
            
              import
            
             BeautifulSoup
          

?

?

?

4. 保存數(shù)據(jù) :如果數(shù)據(jù)不多,可保存在 txt 文本、 csv 文本或者 json 文本等。如果爬取的數(shù)據(jù)條數(shù)較多,可以考慮將其存儲到數(shù)據(jù)庫中。也可以保存為特定格式的文件。

保存后的數(shù)據(jù)可以直接分析,主要使用的庫如下: NumPy 、 Pandas 、 Matplotlib

?

NumPy :它是高性能科學(xué)計算和數(shù)據(jù)分析的基礎(chǔ)包。

Pandas : 基于 NumPy 的一種工具,該工具是為了解決數(shù)據(jù)分析任務(wù)而創(chuàng)建的。它可以算得上作弊工具。

Matplotlib Python 中最著名的繪圖系統(tǒng) Python 中最著名的繪圖系統(tǒng)。它可以制作出散點圖,折線圖,條形圖,直方圖,餅狀圖,箱形圖散點圖,折線圖,條形圖,直方圖,餅狀圖,箱形圖等。

?

?

三、爬蟲簡單實例

運行平臺: Windows

Python 版本: Python3.7

?

首先查看網(wǎng)址的源代碼,使用 google 瀏覽器,右鍵選擇檢查,查看需要爬取的網(wǎng)址源代碼,在 Network 選項卡里面,點擊第一個條目可看到源代碼。

第一部分是 General ,包括了網(wǎng)址的基本信息,比如狀態(tài) 200 等,第二部分是 Response Headers, 包括了請求的應(yīng)答信息 , 還有 body 部分,比如 Set-Cookie,Server 等。第三部分是, Request headers ,包含了服務(wù)器使用的附加信息,比如 Cookie,User-Agent 等內(nèi)容。

上面的網(wǎng)頁源代碼,在 python 語言中,我們只需要使用 urllib 、 requests 等庫實現(xiàn)即可,具體如下。

?

            
              import
            
            
               urllib.request


            
            
              import
            
            
               socket


            
            
              from
            
             urllib 
            
              import
            
            
               error

 


            
            
              try
            
            
              :

    response 
            
            = urllib.request.urlopen(
            
              '
            
            
              https://www.python.org
            
            
              '
            
            
              )

 

    
            
            
              print
            
            
              (response.status)

    
            
            
              print
            
            (response.read().decode(
            
              '
            
            
              utf-8
            
            
              '
            
            
              ))

 


            
            
              except
            
            
               error.HTTPError as e:

    
            
            
              print
            
            (e.reason,e.code,e.headers,sep=
            
              '
            
            
              \n
            
            
              '
            
            
              )


            
            
              except
            
            
               error.URLError as e:

    
            
            
              print
            
            
              (e.reason)


            
            
              else
            
            
              :


            
            
              print
            
            (
            
              '
            
            
              Request Successfully
            
            
              '
            
            )
          

?

運行結(jié)果如下:

?

? 初學(xué)Python之爬蟲的簡單入門_第7張圖片

?

?

?

?

四、關(guān)于入門爬蟲

在如今這個信息爆炸的大數(shù)據(jù)時代,數(shù)據(jù)的價值是可觀的,而網(wǎng)絡(luò)爬蟲無疑是一個獲取數(shù)據(jù)信息的便捷途徑。合理利用爬蟲爬取有價值的數(shù)據(jù),可以為我們的生活提供不少幫助。

?

實際上,關(guān)于網(wǎng)絡(luò)爬蟲,我完全是一個新手,寫下這篇博客的途中也同時在零基礎(chǔ)學(xué)習。

?

首先,我了解到 python3 的語法是需要掌握的,因為要打好基礎(chǔ)。不過 python3 語法很簡潔,學(xué)起來應(yīng)該不會過分吃力。

?

接著是 python 的各種庫,目前接觸的不多,像我這種還是從基礎(chǔ)的庫開始學(xué)習會比較好,比如 urlib requests

?

在學(xué)習過程中也了解到現(xiàn)在很多大型企業(yè)在使用反爬蟲機制,爬蟲過程中可能會返回非法請求,需要使用代理防止封禁 IP ,爬取網(wǎng)頁需要偽裝成平時正常使用瀏覽器那樣。這又是另外要解決的問題了。

?

總之,對于新手來說是需要一步一步花時間深入學(xué)習的,平時也得多加練習,畢竟學(xué)習之事并非一朝一夕就能促成,重要的是堅持吧。

?

?

?

?

參考資料:

https://blog.csdn.net/a575553272/article/details/80265182

https://blog.csdn.net/byweiker/article/details/79234854

https://blog.csdn.net/weixin_42530834/article/details/80787875

https://mp.weixin.qq.com/s?__biz=MzUyODcxMjI1Nw==&mid=2247484287&idx=1&sn=a8cd321702e5ff844042d1bd73c9dafc&chksm=fa6d5451cd1add4765028169c34ea5af1c3f7a8dffc955b270b2f91125ffeca0c22357f73a59#rd

?


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。?!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 日韩欧美毛片免费观看视频 | 亚洲高清一区二区三区久久 | 欧美精品观看 | 涩涩色视频在线播放 | 久久99亚洲综合精品首页 | 奇米麻豆 | 日本无翼乌全彩无遮挡动漫 | 22222se男人的天堂 | 国产伦久视频免费观看 视频 | 美女国产在线 | 91最新免费观看在线 | 日本激情一区二区三区 | 黄页网站 播放器 日本 | 国产视频综合 | 中文国产成人精品久久无广告 | 亚洲第一永久在线观看 | 91精品视频在线看 | 亚洲国产日韩在线一区 | 91尤物在线视频 | 自拍偷自拍亚洲精品被多人伦好爽 | 亚洲 国产 图片 | 麻豆成人久久精品二区三区小说 | 久久免费精彩视频 | 亚洲成av人片天堂网 | 日本久久综合视频 | 99国产超薄丝袜足j在线播放 | 免费国产成人 | 久久国产精品伦理 | 香蕉国产在线观看免费 | 第一序列番外篇在哪里看 | 欧美日韩中文字幕久久伊人 | 欧美黑人猛xxxxbbbb | 亚洲在线视频一区 | xxx中国毛茸茸 | 久久亚洲日本不卡一区二区 | 99热久久国产这里有只有精品 | 狠狠亚洲丁香综合久久 | 久草国产在线 | 国产香蕉一区二区在线网站 | 99久久精品免费看国产一区二区 | 香蕉在线精品一区二区 |