1. 程式人生 > >爬蟲入門到放棄系列02:html網頁如何解析

爬蟲入門到放棄系列02:html網頁如何解析

![](https://img-blog.csdnimg.cn/20210201173634123.png) ## 前言 上一篇文章講了爬蟲的概念,本篇文章主要來講述一下如何來解析爬蟲請求的網頁內容。 一個簡單的爬蟲程式主要分為兩個部分,請求部分和解析部分。請求部分基本一行程式碼就可以搞定,所以主要來講述一下解析部分。對於解析,最常用的就是xpath和css選擇器,偶爾也會使用正則表示式。 不論是xpah還是css,都是通過html元素或者其中某些屬性來選中符合條件的元素節點。 以斗羅大陸的部分html為例。 ```html

斗羅大陸 動漫

別 名: 斗羅大陸動畫版 地 區: 內地 更新集數: 更新至141集 出品時間: 2018 更新時間: 每週六10:00更新1集 標 籤: 戰鬥 簡 介: 唐門外門弟子唐三,因偷學內門絕學為唐門所不容,跳崖明志時卻發現沒有死,反而以另外一個身份來到了另一個世界,一個屬於武魂的世界,名叫斗羅大陸。這裡沒有魔法,沒有鬥氣,沒有武術,卻有神奇的武魂。這裡的每個人,在自己六歲的時候,都會在武魂殿中令武魂覺醒。武魂有動物,有植物,有器物,武魂可以輔助人們的日常生活。而其中一些特別出色的武魂卻可以用來修煉並進行戰鬥,這個職業,是斗羅大陸上最為強大也是最榮耀的職業“魂師”。 小小的唐三在聖魂村開始了他的魂師修煉之路,並萌生了振興唐門的夢想。當唐門暗器來到斗羅大陸,當唐三武魂覺醒,他能否在這片武魂的世界再鑄唐門的輝煌?? ``` ## css選擇器 很多學習過前端的小夥伴對css選擇器比較熟悉,**.是class選擇器,#是id選擇器**。這裡挑最幾個常用的來講一下,其他用法可百度。 ### 常見語法 ![](https://img-blog.csdnimg.cn/20210203154843213.jpg) 以上就是一些比較常用的css選擇器。其中裡面的元素a和span只用來舉例,可以替換成任意的html元素,href屬性也可以替換成元素的其他屬性。 ### 樣例說明 還是用之前斗羅大陸的程式來說明一下。 ```python import requests from bs4 import BeautifulSoup url = 'https://v.qq.com/detail/m/m441e3rjq9kwpsc.html' # 發起請求,獲取頁面 response = requests.get(url) # 解析html,獲取資料 soup = BeautifulSoup(response.text, 'html.parser') # .video_title_cn a 表示class=video_title_cn元素下的 # 這裡指的就是

下的,就一個,所以[0]取出此元素 name = soup.select(".video_title_cn a")[0].string # span.type表示屬性class=type的元素 # 這裡指的是動漫此元素 category = soup.select("span.type")[0].string # class=type_txt的有多個,所以根據下標取出列表中對應的元素 # 這裡指的是斗羅大陸動畫版 alias = soup.select("span.type_txt")[0].string # 內地 [1]代表是第二個元素 area = soup.select("span.type_txt")[1].string # 更新至141集 parts =soup.select("span.type_txt")[2].string # 2018 date = soup.select("span.type_txt")[3].string # 每週六10:00更新1集 update = soup.select("span.type_txt")[4].string # 戰鬥 tag = soup.select("a.tag")[0].string # describe = soup.select("span._desc_txt_lineHight")[0].string print(name, category, alias, parts, date, update, tag, describe, sep='\n') ``` soup.select()根據css規則選擇元素,返回包含一個或多個元素的list。 ![](https://img-blog.csdnimg.cn/20210203143033498.jpg) 因為html中class="type_txt"的span元素有五個,所以返回了五個元素的列表。遍歷列表,每個元素可以通過**string**屬性,來輸出元素中間的文字內容;每個元素通過**attrs**屬性,可以獲取標籤的屬性,返回一個字典。 ![](https://img-blog.csdnimg.cn/20210203145558433.jpg) ### 小技巧 如果你要問,不會css選擇器能不能寫爬蟲啊,我肯定不會回答我幫你寫啊,我只能告訴你可以!! ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20210203215952282.jpg) 複製的css選擇器如下: ``` body > div:nth-child(3) > div.site_container.container_detail_top > div > div > div > div:nth-child(3) > div:nth-child(1) > span.type_txt ``` 我們用這個測試一下: ![](https://img-blog.csdnimg.cn/20210203225006416.jpg) 雖然看起來比較長,但還是正確地選擇到了span元素。 ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20210203231106159.jpg) ## xpath xpah全名Xml Path Language(xml路徑語言),說實話,我沒用過xpath,現學現賣。 ![](https://img-blog.csdnimg.cn/20210204001156257.jpg) 如圖是比較常見的xpath語法,我從參考文件、使用測試到整理成表格一共用了半個多小時。從節點選擇路徑來說,一般相對路徑用的比較多。元素後面[]裡面的內容就是if條件。 同時,css選擇器無法選擇元素的父元素,而xpath可以通過../來選擇元素的父元素。 ### 樣例說明 這個斗羅大陸爬蟲樣例是部落格園的網友從評論區寫的,非常感謝。 ```python import requests from lxml.html import etree url = 'https://v.qq.com/detail/m/m441e3rjq9kwpsc.html' response = requests.get(url) response_demo = etree.HTML(response.text) # 選擇_stat屬性為info:title的a元素,/text()表示輸出選中的a元素的文字內容 # --- 寫的都是日常工作中的親身實踐,處於自己的角度從0寫到1,保證能夠真正讓大家看懂。 文章會在公眾號 [**入門到放棄之路**] 首發,期待你的關注。 ![公眾號](https://img-blog.csdnimg.cn/2020121714585714.jpg)