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

雲飛學程式設計發表於2018-06-19

學習目的是為了實踐,而實踐又可以加深我們的學習效率,今天給大家帶來了lxml庫的xpath匹配方法的例項!教程大家網上搜尋有很多,我們只看實用功能,當然,如果您已經很熟練了,可以跳過不看的!

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

開始前準備

版本:python3.6

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

內容:新浪新聞搜尋關鍵字抓取相關資訊並儲存本地txt文件

思路

我們先開啟網頁url,看下它的頁面資料是怎麼載入的

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

搜尋世界盃,然後在開發者工具中先抓包看看是否為json資料,結果發現並沒有,那麼直接開啟原始碼看看呢

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

原始碼往下翻,到1200行左右看內容,眼熟不?所有的新聞都在原始碼中存在,那麼就簡單了!直接可以抓取相關內容

開始寫程式碼吧

先介紹一下xpath的語法,其實各種教程都有寫,我們只需要記住幾點

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

ok,不囉嗦了,直接上程式碼了

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

可以看到幾行程式碼直接獲取了所有新聞的標題,簡單說一下那幾行程式碼

1、url,有人可能已經注意到了,我在程式碼中用的url和網頁實際的有些不同,那是因為url中?後面的內容,如果&後面的引數沒有結果的話,是可以省略的,還有可以省略的就是類似時間戳等等,大家可以嘗試下!

2、html = requests.get(url)常規的獲取網頁原始碼,用的是requests庫,因為這個網站沒有反爬,所以很容易就取到了

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

4、重點來了:infos = data.xpath(‘//div[@class=”r-info r-info2”]/h2/a’)這行程式碼是獲取原始碼中帶有”r-info r-info2”值的class屬性,並且它在div標籤中,然後在標籤內容中查詢h2標籤及h2標籤下的a標籤,我們來看看網頁中的位置

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

這裡需要注意的是,儘量選擇用class屬性去定位是比較好的,因為它的屬性一般都是功能唯一的,比較方便!大家可以先複製屬性值然後去原始碼中搜尋,如果唯一或者所在的標籤全部是需要的內容,那麼就可以使用,如果不是,請往上級查詢!

5、因為剛才定位到的標籤是列表形式,所以用for迴圈來遍歷取出,這裡重點講解下string(.)的用法:

上面的標籤內容是非常方便的,標題就在a標籤下的文字中,但是依然存在一種情況,比如標題中含有我們是搜尋的關鍵字的時候,它就不是隻存在a標籤下了,比如下圖

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

短短一行,存在2個標籤,a和a標籤下的span標籤,那麼這種情況下,我們就需要使用string(.)來匹配了,它的主要功能是取出所屬標籤下所有文字內容!所以我們的語法就成了info.xpath(‘string(.)’,然後用print顯示就達到了效果!

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

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

ok,內容全部寫到檔案了,當然了,還可以繼續往下寫,比如進入每一個新聞頁面,抓取所有文字內容,也是一樣的寫法,大家有興趣的可以自行完善哦!

最後

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


相關文章