根據爬取下來的資料,我們需要寫不同的解析方式,最常見的一般都是html資料,也就是網頁的原始碼,還有一些可能是json資料,json資料是一種輕量級的資料交換格式,相對來說容易解析,它的格式如下。
},
}, }, }]}
但是對於爬取下來是乙個html資料,其中標籤結構可能十分複雜,而且不同html的結構可能存在差異,所以解析方式也需要看情況而定。
相對方便的解析方式有正規表示式,xpath和beautifulsoup4庫。
三者的執行速度相比當然是正規表示式最快,xpath其次,bs4最慢了,因為bs4是經過封裝的庫,相對於另外兩個,無疑是重灌坦克一般,但bs4確實使用最簡單的乙個,而正規表示式是最麻煩的乙個。
正規表示式幾乎所有程式語言都支援,每一種語言的正規表示式都存在一點差異但大同小異。如果你是在設計乙個複雜系統,就不要考慮正規表示式了,因為這種方法太過於不穩定,你永遠不敢保證你寫的正則規則是對應當前系統完全不會報錯的。
xpath 是一門在xml文件中查詢資訊的語言。xpath可用來在xml文件中對元素和屬性進行遍歷。
關於正規表示式和xpath在之後的實戰中再做詳解,現在主要是掌握bs4的使用。
pip install lxml
pip install beautifulsoup4
當我們爬取下來一整個網頁的html之後,bs4就可以根據標籤的相對定位來找準你要爬取的資料了。
這個相對定位類似於如下:
body > div.banner > div > div.celeinfo-right.clearfix > div.movie-stats-container > div > div > span > span
可以理解把html頁面當做洋蔥一層一層剝開。
這種定位叫做selector,我們可以不用自己編寫它,比較html結構可能比較複雜,很容易寫錯。
我們可以開啟瀏覽器的控制台(f12),然後elements裡面找到我們想要爬取之後解析的內容,這時候你滑鼠放上去的位置對應頁面內容會變成藍色讓你來對比,如下圖。
可以發現,這些dd標籤裡面就是當前頁面所有的電影資訊了。哪吒之魔童降世你可以理解為dd-1,巨鱷風暴可以當做dd-2,以此類推。
然後你把滑鼠放在dd標籤上右鍵,會有乙個copy選項,裡面有乙個selector,就是將它的selector複製下來。
下面分別是哪吒之魔童降世和巨鱷風暴的selector,可以發現,只有最後的dd:nth-child不同。
有了這個規律,我們就可以很容易的一次性解析那種列表型網頁了。
# 請求頭設定
header =
data = requests.get('', headers=header)
soup = beautifulsoup(data.text, 'lxml')
print(titles)
來仔細講解一下上面這些**。
request.get(url,headers)是昨天說過的了,headers就是請求頭資訊,裡面包含了我們客戶端的資訊以及請求方式是get還是post等。
返回的data就是響應了,你可以直接print這個資料,但是這個響應體裡面不止包含網頁的html,還有這次請求的相關資料,比如響應碼,200說明成功,404說明沒有找到資源等。
data.text就是從響應體中拿到網頁html**了。
beautifulsoup就是我們的主要解析物件,lxml是相應的解析方式。
通過呼叫beautifulsoup的select選擇器方法,來從之前傳入的html中獲取相應的標籤。
這麼一看其實bs4還是很簡單的,但這只是bs4的基礎應用了,對於我們普通解析乙個網頁已經足夠用了,如果感興趣可以去深入去了解一下,不過這個這麼說也只是工具庫,如果你不嫌麻煩可以自己解析。
看完**,如果現在我要拿到這個頁面的電影名稱,這時候上面這個selector就不能用了,因為它不夠精確,它只到了'
',而我們要精確到電影名稱。
用這個selector。
其它方式幾乎都大同小異了。
以上是html的解析,我們爬取的資料有時還會是json資料,這類資料相對來說十分規則,我倒是很希望目標資料會是json格式。
比如上篇中的攜程。
它的航班資訊就是請求json返回的。
python中正規表示式的解析十分簡單,你把它當做字典資料型別就可以了。
最開始你獲得的json是一串字串,通過python的json.loads(jsondata)之後,返回的其實就是字典資料型別,直接操作就可以了。
Python爬蟲實戰(二)
實驗介紹 本實驗通過使用beautifulsoup方法對網頁進行簡單的爬取工作,並對beatifulsoup方法進行簡單的介紹。beautifulsoup開發手冊 示例網頁如下 實驗內容 從本地網頁爬取商品資訊,商品名,評分等級等相關資訊 實驗 from bs4 import beautifulso...
python實戰 網路爬蟲
學習網路爬蟲的目的 1,可以私人定製乙個搜尋引擎,可以深層次的了解搜尋引擎的工作原理。2,大資料時代,要進行資料分析,首先要有資料來源,學習爬蟲,可以讓我們獲取更多的資料。3,從業人員可以可好的利用爬蟲,了解其原理,更加優化你的程式。網路爬蟲的組成 網路爬蟲由控制節點,爬蟲節點,資源庫構成 爬蟲的型...
Python網路爬蟲實戰專案大全!
doubanspider 豆瓣讀書爬蟲。可以爬下豆瓣讀書標籤下的所有圖書,按評分排名依次儲存,儲存到excel中,可方便大家篩選蒐羅,比如篩選評價人數 1000的高分書籍 可依據不同的主題儲存到excel不同的sheet 採用user agent偽裝為瀏覽器進行爬取,並加入隨機延時來更好的模仿瀏覽器...