亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python 爬蟲教程之:Xpath簡易操作

發布時間:2020-07-10 11:21:53 來源:網絡 閱讀:488 作者:nineteens 欄目:編程語言

  簡介

  XPath ,全稱 XML Path Language ,即 XML 路徑語言,它是一門在 XML 文檔中查找信息的語言。它最初是用來搜尋 XML 文檔的,但是它同樣適用于 HTML 文檔的搜索。

  首先,還是敬上 Xpath 的官方網站:https://www.w3.org/TR/xpath/all/ 。

  其次,再敬上兩個還不錯的學習地址:

  w3school:https://www.w3school.com.cn/xpath/index.asp

  菜鳥教程:https://www.runoob.com/xpath/xpath-tutorial.html

  常用路徑表達式

  下面列出了最有用的路徑表達式:

  表達式  描述

  nodename  選取此節點的所有子節點。

  /  從根節點選取。

  //  從匹配選擇的當前節點選擇文檔中的節點,而不考慮它們的位置。

  .  選取當前節點。

  …  選取當前節點的父節點。

  @  選取屬性。

  注意,在使用 Xpath 之前,需要先確保安裝好 lxml 庫,如果沒有安裝,可以參考前面的前置準備進行安裝。

  Xpath 演示

  首先需要引入 lxml 庫的 etree 模塊,接著引入 Requests 模塊,小編這里直接以自己的博客站用作示例。

  from lxml import etree

  import requests

  response = requests.get('https://www.geekdigging.com/')

  html_str = response.content.decode('UTF-8')

  html = etree.HTML(html_str)

  result = etree.tostring(html, encoding = 'UTF-8').decode('UTF-8')

  print(result)

  結果如下:

  可以看到結果是成功爬取,這里我們首先使用 requests 獲取首頁的源代碼 byte 數據流,接著使用 decode() 進行解碼,解碼后將字符串傳入 etree.HTML() 構建了一個 lxml.etree._Element 對象,接著我們對這個對象做了 tostring() 轉換字符串并且進行打印。

  注意: 這里使用 tostring() 進行轉化字符串的時候,一定需要添加參數 encoding ,否則中文將會顯示為 Unicode 編碼。

  所有節點

  我們構建完成了 Element 對象,接著我們就可以開始愉快的 Xpath 學習了。

  我們會用 // 開頭的 XPath 規則來選取所有符合要求的節點。示例(依然采用上面的 html ):

  result_1 = html.xpath('//*')

  print(result_1)

  結果如下:

  [, , , , ,......

  結果太長僅截取部分。

  這里使用 * 代表匹配所有節點,也就是整個 HTML 文本中的所有節點都會被獲取。可以看到,返回形式是一個列表,每個元素是 Element 類型,其后跟了節點的名稱,如 html 、 head 、 meta 等,所有節點都包含在列表中了。

  當然,在這里匹配也可以指定節點的名稱,例如獲取所有的 meta 節點:

  result_2 = html.xpath('//meta')

  print(result_2)

  結果如下:

  [, , , , , , , , , , , , , , , , , , , ]

  這里要選取所有 meta 節點,可以使用 // ,然后直接加上節點名稱即可,調用時直接使用 xpath() 方法即可。由于返回的是一個列表,所有要獲取特定的某個 meta 的時候,可以直接在 [] 中加索引,例如 [0] 。

  子節點鄭州好的婦科醫院 http://www.zzkedayy.com/

  獲取子節點一般可以使用 / 或者 // 來獲取子節點或者孫子節點。

  比如現在想獲取所有的文章內容的塊,如下:

  紅框所標識的內容,可以看到 DOM 結構為 下面的 ,那么這個語句可以這么寫:

  result_3 = html.xpath('//main/article')

  print(result_3)

  結果如下:

  [, , , , , , , , , , , ]

  此處的 / 是用于獲取子節點,如果想要獲取孫子節點,

  則可以這么寫:

  result_4 = html.xpath('//main//div')

  print(result_4)

  結果就不貼了,太長了。

  父節點

  我們可以通過 / 和 // 來查找子節點,那么肯定有語法可以查找父節點,不然只能向下查詢不能向上查詢就有點就有點太傻了。

  父節點的查找是通過 .. 來實現的,比如我們先找到一篇文章的圖片,現在要向上查找它的 ,如下圖:

  這里我們通過 alt 屬性為 小白學 Python 爬蟲(16):urllib 實戰之爬取妹子圖 的

  ,然后獲取它的父節點 ,并且打印他的 href 屬性,代碼如下:

  result_5 = html.xpath('//img[@alt="小白學 Python 爬蟲(16):urllib 實戰之爬取妹子圖"]/../@href')

  print(result_5)

  結果如下:

  ['/2019/12/09/1691033431/']

  同時我們獲取父節點還可以使用 parent:: 。

  result_6 = html.xpath('//img[@alt="小白學 Python 爬蟲(16):urllib 實戰之爬取妹子圖"]/parent::*/@href')

  print(result_6)

  屬性過濾

  在選取節點的時候,我們可以使用 @ 符號進行屬性過濾。

  比如我們在選取

  的時候,可以使用 class 為 container 的

  。而在首頁的 的子節點中, class 為 container 的

  只有一個,代碼如下:

  result_7 = html.xpath('//section/div[@class="container"]')

  print(result_7)

  得到運行結果。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

万宁市| 施甸县| 互助| 武宣县| 阿拉善右旗| 开江县| 确山县| 巴东县| 商河县| 太和县| 五台县| 中宁县| 广灵县| 玉树县| 青岛市| 易门县| 彰化市| 长海县| 文登市| 竹溪县| 田东县| 淳化县| 司法| 乌鲁木齐市| 葫芦岛市| 芮城县| 朝阳区| 无为县| 邛崃市| 兖州市| 吉安县| 深泽县| 洛宁县| 英超| 东兴市| 邳州市| 古浪县| 嘉兴市| 汉阴县| 乌海市| 新泰市|