Python爬蟲必備技能,xpath的用法和實戰

      網友投稿 1217 2025-04-04

      環境配置

      本文使用的python版本是python3

      使用到的依賴包如下:

      ```python

      pip install requests

      Python爬蟲必備技能,xpath的用法和實戰

      pip install scrapy

      ```

      在安裝scrapy之前需要先安裝Twisted(點擊下載) 下載符合自己版本的Twisted,然后將其放入python安裝目錄中,先使用命令安裝pip install Twisted。安裝完之后,scrapy就很容易安裝了,安裝命令如下:pip install scrapy。

      本文要點

      1.xpath 基本語法和用法示例

      2.使用 xpath 爬取《盜墓筆記》實例

      xpath 基本語法

      xpath,全稱XML Path Language,即XML路徑語言,它是一門在XML文檔中查找信息的語言。

      xpath的選擇功能十分強大,它提供了非常簡潔明了的路徑選擇表達式,幾乎所有我們想要定位的節點都可以用xpath來選擇。首先我們來看下xpath的基本語法。

      在這里列出了xpath的常用匹配規則,例如 / 代表選取直接子節點,// 代表選擇所有子孫節點,. 代表選取當前節點,.. 代表選取當前節點的父節點,@ 則是加了屬性的限定,選取匹配屬性的特定節點。

      xpath 用法舉例

      接下來我們以豆瓣電影為例子,來熟悉一下xpath基本用法:

      打開網頁 https://movie.douban.com/top250

      豆瓣電影top250

      首先需要找到我們所匹配的內容在html中的位置。

      從圖片中可以看到排名第一的電影標題是在標簽為div,class屬性為*hd中的a標簽中所有的span標簽里面!

      然后我們需要一級一級往上面找,因為這個層級太深了,有時候會匹配不到我們所需要的內容。

      我們最開始匹配的標簽要滿足它的所有特征加起來是唯一的。

      很容易看到屬性為article正是我們所需要的標簽!因為找不到第二個div標簽且class屬性為article的標簽!

      獲取電影標題語法如下,因為是文本內容,所以要用text():

      html.xpath(".//div[@class='article']/ol/li[1]//div[@class='hd']/a//span[1]/text()")

      同理,我們獲取電影詳情鏈接的語法,因為是屬性,所以要用@屬性值:

      html.xpath(".//div[@class='article']/ol/li[1]//div[@class='hd']/a/@href")

      我們可以將其加入到爬蟲代碼中,效果如下:

      豆瓣電影爬蟲

      使用 xpath 爬取盜墓筆記

      目標地址:

      盜墓筆記全篇 http://seputu.com/

      總體思路:

      1.分析網頁結構,取出我們需要的標題,以及下一步需要用到的鏈接

      2.根據章節的鏈接地址,再爬取出章節小說

      首先分析我們需要爬取的內容,在網頁中的位置。

      經過上面的講解,相信大家很容易就可以寫出xpath的語法。因為我們是要爬取所有小說內容,所以我們要循環所有li標簽里面的內容!

      ```python

      html.xpath(".//div[@class='box']/ul//li")

      ```

      遍歷這個列表,取出我們所需要的章節,詳細鏈接

      ```python

      li_list?=?selector.xpath(".//div[@class='box']/ul//li")

      fortextinli_list:

      title?=?text.xpath("./a/text()").extract_first('')

      href?=?text.xpath('./a/@href').extract_first('')

      ```

      接下來,從詳情鏈接中取出小說內容,即完成了這個小爬蟲!

      ```python

      p_list?=?selector.xpath(".//div[@class='content-body']//p")

      fordatainp_list:

      content?+=?data.xpath("./text()").extract_first('')

      ```

      最重要的分析部分完成了,接下來主要就是將所有的內容放入代碼中,然后保存到本地就完成了。

      最終爬蟲代碼如下:

      ```python

      #?coding:?utf-8

      fromscrapyimportSelector

      importrequests

      classKeyEnum(object):

      TITLE?="title"

      CONTENT?="content"

      HREF?="href"

      classNovelSpider(KeyEnum):

      def__init__(self):

      self.headers?=?{

      "User-Agent":"Mozilla/5.0?(Windows?NT?10.0;?Win64;?x64)?"

      "AppleWebKit/537.36?(KHTML,?like?Gecko)?Chrome/69.0.3497.100?Safari/537.36"

      }

      defspider(self):

      url?='http://seputu.com/'

      response?=?requests.get(url,?headers=self.headers)

      selector?=?Selector(text=response.content)

      data_list?=?[]

      li_list?=?selector.xpath(".//div[@class='box']/ul//li")#?章節列表

      fortextinli_list:

      title?=?text.xpath("./a/text()").extract_first('')#?標題

      href?=?text.xpath('./a/@href').extract_first('')#?鏈接

      content?=?self._content_spider(href)#?詳情頁面爬蟲

      data_list.append(

      {

      KeyEnum.HREF:?href,

      KeyEnum.TITLE:?title,

      KeyEnum.CONTENT:?content,

      }

      )

      returndata_list

      def_content_spider(self,?url):

      content?=''

      for_inrange(5):#?因為沒用代理,如果失敗,再重試5次

      ifurl:#?加個url是否為空的判斷

      response?=?requests.get(url,?headers=self.headers)

      ifresponse.status_code?!=200:

      continue

      selector?=?Selector(text=response.content)

      p_list?=?selector.xpath(".//div[@class='content-body']//p")

      fordatainp_list:

      content?+=?data.xpath("./text()").extract_first('')

      returncontent

      defmain(self):

      data_list?=?self.spider()

      foriindata_list:

      withopen('盜墓筆記.txt','a',?encoding='utf-8')asf:

      f.write(i['content'])

      if__name__?=='__main__':

      spider?=?NovelSpider()

      spider.main()

      ```

      總結

      本文主要介紹了 python 中解析庫xpath的使用方法和示例,用法其實很簡單,關鍵在于多多練習!下篇文章打算分享另一個解析庫css的用法,以及和xpath之間的區別,歡迎關注!

      Python Jupyter notebook XSLT & XPath

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:產品生產制造(產品生產制造方式怎么寫)
      下一篇:CHOOSE函數都有哪些用法
      相關文章
      亚洲一级黄色视频| 在线日韩日本国产亚洲| 亚洲v高清理论电影| 中文字幕第一页亚洲| 国产成人 亚洲欧洲| 国产精品亚洲AV三区| 亚洲午夜无码久久久久小说| 亚洲AV综合色区无码二区偷拍| 亚洲黄色片在线观看| 久久久亚洲欧洲日产国码aⅴ| 亚洲成人在线电影| 亚洲一区二区三区夜色| 亚洲视频中文字幕| 亚洲黄网站wwwwww| 亚洲成a人不卡在线观看| 亚洲成人免费网站| 亚洲fuli在线观看| 一本天堂ⅴ无码亚洲道久久| 色噜噜亚洲男人的天堂| 亚洲精品第一国产综合野| 国产精品亚洲精品青青青| 成人亚洲国产va天堂| 亚洲精品乱码久久久久久蜜桃图片 | 亚洲欧洲中文日韩av乱码| 亚洲精品国产高清嫩草影院| 亚洲日韩国产一区二区三区| 久久精品国产亚洲精品| 亚洲精品成人网站在线观看| 人人狠狠综合久久亚洲婷婷| 久久亚洲精品国产精品黑人| 亚洲日本一区二区| 亚洲国产精品日韩在线观看| 亚洲中文无码av永久| 国产亚洲玖玖玖在线观看| 亚洲国产精品自在自线观看| 国产精品亚洲а∨无码播放不卡| 亚洲国产精品13p| 国产亚洲免费的视频看| 亚洲一区二区在线免费观看| 亚洲另类图片另类电影| 亚洲乱色熟女一区二区三区蜜臀|