爬蟲三步走(二)解析源碼
更優閱讀體驗爬蟲三步走(二)解析源碼
=====================================================================
上一期爬蟲三步走(一)獲取源碼 講了如何獲取網頁源碼的方法,這一期說一說怎麼從其中獲得我們需要的和數據。
解析網頁的方法很多,最常見的就是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 構建一個簡單爬蟲系統 (二)