Python爬蟲基礎學習,從一個小案例來學習xpath匹配方法

學習目的是爲了實踐,而實踐又能夠加深咱們的學習效率,今天給你們帶來了lxml庫的xpath匹配方法的實例!教程你們網上搜索有不少,咱們只看實用功能,固然,若是您已經很熟練了,能夠跳過不看的!html

Python爬蟲基礎學習,從一個小案例來學習xpath匹配方法

 

開始前準備

版本:python3.6python

工具:pycharm、lxml庫(pip安裝便可)json

內容:新浪新聞搜索關鍵字抓取相關信息並保存本地txt文檔工具

思路

咱們先打開網頁url,看下它的頁面數據是怎麼加載的學習

Python爬蟲基礎學習,從一個小案例來學習xpath匹配方法

 

搜索世界盃,而後在開發者工具中先抓包看看是否爲json數據,結果發現並無,那麼直接打開源代碼看看呢網站

Python爬蟲基礎學習,從一個小案例來學習xpath匹配方法

 

源代碼往下翻,到1200行左右看內容,眼熟不?全部的新聞都在源代碼中存在,那麼就簡單了!直接能夠抓取相關內容url

開始寫代碼吧

先介紹一下xpath的語法,其實各類教程都有寫,咱們只須要記住幾點spa

  • 它解析網頁源代碼的語法爲etree.HTML(html)#html爲網頁源代碼的文本形式
  • 它的匹配方式爲data.xpath('//a[@class=***]/text()')#data爲上步解析後的源碼或者指定源碼
  • 它匹配出來的結果爲列表
  • 儘可能不要用開發者工具提供的複製xpath路徑功能,由於它對於後期維護或者修改你的代碼很不友好

ok,不囉嗦了,直接上代碼了3d

Python爬蟲基礎學習,從一個小案例來學習xpath匹配方法

 

能夠看到幾行代碼直接獲取了全部新聞的標題,簡單說一下那幾行代碼xml

一、url,有人可能已經注意到了,我在代碼中用的url和網頁實際的有些不一樣,那是由於url中?後面的內容,若是&後面的參數沒有結果的話,是能夠省略的,還有能夠省略的就是相似時間戳等等,你們能夠嘗試下!

二、html = requests.get(url)常規的獲取網頁源代碼,用的是requests庫,由於這個網站沒有反爬,因此很容易就取到了

三、data = etree.HTML(html.text)這裏就是上文所說,解析源碼的語法,並且lxml解析源碼還一個好處就是,若是源碼中存在非閉合的標籤或者不是很規範的標籤,它會自動補全,很是實用!

四、重點來了:infos = data.xpath('//div[@class="r-info r-info2"]/h2/a')這行代碼是獲取源代碼中帶有"r-info r-info2"值的class屬性,而且它在div標籤中,而後在標籤內容中查找h2標籤及h2標籤下的a標籤,咱們來看看網頁中的位置

Python爬蟲基礎學習,從一個小案例來學習xpath匹配方法

 

這裏須要注意的是,儘可能選擇用class屬性去定位是比較好的,由於它的屬性通常都是功能惟一的,比較方便!你們能夠先複製屬性值而後去源代碼中搜索,若是惟一或者所在的標籤所有是須要的內容,那麼就可使用,若是不是,請往上級查找!

五、由於剛纔定位到的標籤是列表形式,因此用for循環來遍歷取出,這裏重點講解下string(.)的用法:

上面的標籤內容是很是方便的,標題就在a標籤下的文本中,可是依然存在一種狀況,好比標題中含有咱們是搜索的關鍵字的時候,它就不是隻存在a標籤下了,好比下圖

Python爬蟲基礎學習,從一個小案例來學習xpath匹配方法

 

短短一行,存在2個標籤,a和a標籤下的span標籤,那麼這種狀況下,咱們就須要使用string(.)來匹配了,它的主要功能是取出所屬標籤下全部文本內容!因此咱們的語法就成了info.xpath('string(.)',而後用print顯示就達到了效果!

好了,語法大概說到這,咱們將全部的標題和url、簡介所有抓取下來,而後寫到txt文檔,篇幅有限就抓5頁的內容吧!

Python爬蟲基礎學習,從一個小案例來學習xpath匹配方法

 

ok,內容所有寫到文件了,固然了,還能夠繼續往下寫,好比進入每個新聞頁面,抓取全部文本內容,也是同樣的寫法,你們有興趣的能夠自行完善哦!

最後

推薦一個我我的的學習方法,那就是多看多聽多練!多看看大神的教程、博客、經驗總結等等,多聽聽大神的思路分析,最重要的是多練,代碼必定要多寫!代碼必定要多寫!代碼必定要多寫!這樣才能更快的學習進步!!你們加油

相關文章
相關標籤/搜索