Python網絡爬蟲數據抓取思路,靜態與動態頁面爬取思路,爬蟲框架等

目錄

0、爬蟲介紹

一、靜態文件抓取(響應文件中存在的數據)

二、動態文件抓取(響應文件中不存在的數據)

三、多線程數據抓取

四、爬蟲數據存數據庫,存緩存的思路

五、Python爬蟲程序常用的解析模塊

六、爬蟲框架


 

該篇文章有助於初學者理清網絡爬蟲的思路,文章內容並不深奧,主要以案例的形式幫助大家學習爬蟲程序,學會這些基本的工具後,你的爬蟲之路纔剛剛開始。文章內容均來源於我博客裏有關python爬蟲的篇章,更多的內容可以參考我博客裏網絡爬蟲這個分欄。特別注意:如果要轉載請註明出處。

 

0、爬蟲介紹

做任何一件事情之前先搞清楚你爲什麼要做,可以通過什麼方式去做。

網絡爬蟲入門:網絡爬蟲的目的,企業獲取數據的方式,可以用於做爬蟲的程序語言,爬蟲爬取數據的步驟

 

一、靜態文件抓取(響應文件中存在的數據)

大部分的數據都是直接寫在靜態文件上的,靜態文件這裏通常指的一定時間內不會變化的,不需要與後臺進行交互的網頁。

1.首先確認抓取的數據是否存在於響應文件中

2.分析頁面結構,觀察URL地址規律

    1)查看網頁元素的佈局,整體結構預覽,常用控制檯來分析

    2)查看在瀏覽網頁(比如翻頁)時元素結構是否發生變化

    3)查看頁面跳轉時URL地址是否變化(判斷是否發生請求轉發或重定向),如果有則去JS代碼中找變化的原因

3.開始編寫代碼進行數據抓取

4.開始寫自己的第一個爬蟲程序

Python爬蟲入門,最簡單的爬蟲代碼,網站如何判斷是人爲的操作還是爬蟲程序的操作,爲url參數中的中文參數進行編碼,基於百度搜索的爬蟲程序

做完上面的案例後,可以再做一個案例練練手。Python爬蟲小程序,爬取百度貼吧網頁文件,新手練手的好案例

5.多級頁面爬取思路

上面兩個案例都是爬取一級頁面的,一級頁面指的是打開某個網頁,僅僅對該網頁上的內容做數據爬取,而二級頁面就是在一級頁面的基礎上,你點擊一個內容,這個內容往往是一個連接,它帶你來到了另一個頁面,這就是二級頁面。在做爬蟲時一般是先下載一級頁面,這個頁面沒有我們要爬的數據,但是它包含了存儲我們要的數據的網站的鏈接,收集所有鏈接後,我們擁有了所有的二級頁面,也就擁有了所有數據,這時候你再到二級頁面去爬數據即可。有二級頁面也有三級頁面四級頁面,但是原理都是一樣的。

我們再來看看如何爬取二級頁面的內容

Python爬蟲,4567電影網電影信息爬取,二級頁面處理方案

 

二、動態文件抓取(響應文件中不存在的數據)

這一部分的數據不是存在響應內容中,而是存在Ajax的XML文件或者JS文件中,而且它隨着你的操作而動態變化。

1.如果發現想要的內容不再響應文件中,大可能性是使用Ajax動態生成的

2.F12進入控制檯抓包,刷新頁面或執行某些行爲,查看XHR異步加載的數據包內容

   1)GET請求:查看Request Headers請求頭,查看請求頭是如何做的,是否需要僞裝請求頭。

                           查看Query String Paramters,查看請求參數,這些參數多包含在URL中

   2)Post請求:查看Request Headers請求頭,查看請求頭是如何做的,是否需要僞裝請求頭。

                           查看FormData表單數據,看post發送請求時封裝了哪些數據,這些數據哪些是動態的哪些是靜態的,動態再進一步分析如何生成(主要通過分析JS代碼)

3.觀察查詢參數或者Form表單數據規律,如果需要進行進一步抓包分析處理,應當去分析JS文件

4.使用request.get().json()獲取json數據,利用列表或字典的方法提取數據

 

三、多線程數據抓取

1.將待爬取的URL放入隊列中

需要使用到的模塊有:from queue import Queue

2.多個線程從隊列中取出地址,調用requests模塊獲取文件

需要用到的模塊有:from threading import Thread

3.在進行I/O讀寫的時候注意加鎖

需要用到的模塊有:from threading import Lock

4.調取隊列url地址的兩種寫法

當隊列值爲空時,線程再去做請求會陷入阻塞,所以要爲隊列做判空操作或者加拋異常

方式一:判斷隊列是否爲空,避免線程堵塞

while True:

    if not q.empty():

         url=q.get()

    else:

        break

方式二:超時拋異常

 try:

    url=q.get(block=True,timeout=5)

    ....

 except Exception as e:

     break

5.多線程爭搶共同文件時的操作

多線程寫入文件時不加線程鎖會導致一系列問題

方法如下:

from threading import Lock

lock=Lock()

lock.acquire() #加鎖

代碼塊

local.relase() #釋放

案例:

Python多線程爬蟲,騰訊招聘網職位爬取程序,Ajax異步數據爬取模板

 

四、爬蟲數據存數據庫,存緩存的思路

此內容會在將來補上..

 

五、Python爬蟲程序常用的解析模塊

pythoy一般用於解析頁面的模塊用re、lxml+xpath、json,以下是用法

1.re

re通過正則表達式來獲取想要得到的內容,核心在於如何編寫正則表達式

python正則表達式re模塊入門,貪婪匹配和非貪婪匹配,案例:貓眼電影TOP100信息提取

 

2.lxml+xpath

lxml+xpath是通過編寫xpath,然後使用lxml來解析xpath進行匹配,需要知道xpath的規則(教程):

Python常用插件類舉,lxml+Xpath實現爬蟲,使用Xpath爬取鏈家二手房源信息

 

3.ajax/json 

json一般是ajax動態數據,請求得到ajax響應內容後,將它json化,再進一步處理,如存庫,存緩存

Python多線程爬蟲,騰訊招聘網職位爬取程序,Ajax異步數據爬取模板

 

4.pyexecjs

python爬蟲程序之百度翻譯,pyexecjs模塊的用法(python裏的js解析庫)

 

六、爬蟲框架

1.Selenium

Selenium嚴格意義上來講並不是一個框架,他與傳統爬蟲不一樣,Selenium更像是一個模擬人類操作的機器人,簡單點來說就是你打開一個網頁,比如起點小說網,裏面有非常多的小說,你想感興趣的小說都複製到本地,人爲來做這件事是不太可能的,一篇小說短則幾百篇,長則幾千上萬篇,你一篇一篇的複製可能嗎?這時候你可以寫一個Selenium爬蟲程序,模擬你的行爲:打開網頁,點擊一篇小說,打開第一章,複製第一章,關閉網頁,打開第二章,複製第二章.....直到最後一章。Selenium就是在做這樣一件事,並且這些操作都是可視化的(你能看到它在做這件事),這是與傳統爬蟲差別最大的地方。

Selenium+ChromeDriver框架,Selenium入門,百度搜索,貓眼電影,京東商城案例

 

2.Scrapy框架

Scrapy是目前python最爲流行的框架,這個框架幫我們做了很多前期工作,省去了重複編寫的麻煩,最關鍵的是爲爬蟲程序提供了一套可行的框架,儘可能做到了解耦,使團隊編程成爲可能,如果要做python爬蟲,Scarpy是必須掌握的。

教程:

Scrapy爬蟲框架,入門案例(非常詳細),Scrapy多線程思路

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章