日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

一步一步学python爬虫_初学Python之爬虫的简单入门

發(fā)布時間:2024/8/23 python 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一步一步学python爬虫_初学Python之爬虫的简单入门 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

初學(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ò)爬蟲的基本框架:

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

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ù)跟蹤鏈接。以下圖為例:

遍歷路徑: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)頁。還是以上圖為例:

遍歷路徑:第一層: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值,從而參與排序。以下圖為例:

設(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)頁解析庫進行解析??赡苁荍son,可以直接轉(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)即可,具體如下。

importurllib.requestimportsocketfrom urllib importerrortry:

response= urllib.request.urlopen('https://www.python.org')print(response.status)print(response.read().decode('utf-8'))excepterror.HTTPError as e:print(e.reason,e.code,e.headers,sep='\n')excepterror.URLError as e:print(e.reason)else:print('Request Successfully')

運行結(jié)果如下:

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

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

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

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

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

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

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

參考資料:

總結(jié)

以上是生活随笔為你收集整理的一步一步学python爬虫_初学Python之爬虫的简单入门的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。