爬蟲三步走(二)解析源碼

更優閱讀體驗爬蟲三步走(二)解析源碼

=====================================================================

上一期爬蟲三步走(一)獲取源碼 講了如何獲取網頁源碼的方法,這一期說一說怎麼從其中獲得我們需要的和數據。

解析網頁的方法很多,最常見的就是BeautifulSoup和正則了,其他的像xpath、PyQuery等等,其中我覺得最好用的就是xpath了,xpath真的超級簡單好用,學了之後再也不想取用美麗湯了。下面介紹xpath的使用方法。

首先需要安裝lxml,windows下安裝lxml是個大坑,知乎上有人給出了解決方法Python LXML模塊死活安裝不了怎麼辦?

詳細的用法可以參考@爬蟲 所寫 爬蟲入門到精通-網頁的解析(xpath)

在這裡我們嘗試使用xpath來迅速獲取數據。

例如想要獲熊貓直播虎牙直播下主播的ID

import requestsnfrom lxml import etreennurl = http://www.huya.com/g/lolnheaders = {User-Agent:Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36}nres = requests.get(url,headers=headers).textns = etree.HTML(res)nprint(s.xpath(//i[@class="nick"]/text()))n

輸出:

下面一步步講解為什麼這樣做。

import requestsnfrom lxml import etreen

首先是導入模塊,requests很常見,但是xpath需要from lxml import etree,你肯點想問為什麼這樣寫,回答是「我也不知道」,就像是約定俗成的東西一樣。

url = http://www.huya.com/g/lolnheaders = {User-Agent:Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36}nres = requests.get(url,headers=headers).textn

這三步就是平常獲取源碼的過程,很簡單。

s = etree.HTML(res)n

給一個html,返回xml結構,為什麼這樣寫??答案和上面一樣。最重要的就是下面的這一步:

s.xpath(//i[@class="nick"]/text())n

按下F12看到「愛拍-古手羽」在i標籤下,接著我們右鍵打開「查看網頁源代碼」,搜索「愛拍-古手羽」

確實找到了「愛拍-古手羽」就在i標籤下,那我們就把他提出來吧!

s.xpath(//i[@class="nick"]/text())n

這個段代碼意思是,找到class為「nick」的i標籤,返回其中的文本信息,當然你也可以返回i標籤中的title,寫法如下:

s.xpath(//i[@class="nick"]/@title)n

text()返回的是文本信息,@title則是標籤裡面的具體屬性的值,例如我想知道觀眾人數

import requestsnfrom lxml import etreennurl = http://www.huya.com/g/lolnheaders = {User-Agent:Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36}nres = requests.get(url,headers=headers).textns = etree.HTML(res)nprint(s.xpath(//i[@class="js-num"]/text()))n

只需在原來基礎上修改一個屬性,i標籤class為「js-num」裡面的值

print(s.xpath(//i[@class="js-num"]/text()))n

返回結果是:

說明:在運行代碼中,發現虎牙反爬蟲做得挺好的,瞬間就識別爬蟲身份並封了IP,所以我換了IP去訪問,至於如何設置代理,在我的上一篇文章中有說到,去看看吧。

在實際操作中,你可能會遇到更加複雜的情況,所以一定記得去看看詳細的教程。爬蟲入門到精通-網頁的解析(xpath)

小廣告:喜歡爬蟲、數據的可以關注一下我的微信公眾號(zhangslob),多多交流。

aHR0cDovL3dlaXhpbi5xcS5jb20vci82a1NudjhYRUY1aG9yWUhjOXhINA== (二維碼自動識別)


推薦閱讀:

[6] Python列表
怎樣自學Python?
python數據科學-多變數數據分析
Python 構建一個簡單爬蟲系統 (二)

TAG:Python | 爬虫计算机网络 | XPath |