iT邦幫忙

2022 iThome 鐵人賽

DAY 10
0
自我挑戰組

用Python學習網路爬蟲30天系列 第 10

[Day10] 擷取靜態HTML網頁資料5_XPath表達式

  • 分享至 

  • xImage
  •  

XPath表達式

XPath是一種表達是語言,可以在XML文件中走訪和標示節點位置。它可以直接依據HYML標籤內容來搜尋網頁內容,也可以直接傳回符合HTML元素的內容與屬性值。目前BeautifulSoap不支援此查詢語言,進階網路爬蟲函式庫(ex. Selenuim、Scrapy)則有支援。

下方有兩種方式可以取得XPath表達式:

  1. 用XPath Helper工具取得XPath表達式字串

    XPath Helper是Chrome瀏覽器的擴充功能,可以讓我們產生、編輯和測試XPath表達式來查詢網頁

    (1) 進入Chrome線上應用程式商店
    https://ithelp.ithome.com.tw/upload/images/20220924/20152180TSsEhpxlGi.png

    (2) 輸入”XPath Helper”搜尋商店,按下”加到Chrome”鈕
    https://ithelp.ithome.com.tw/upload/images/20220924/20152180NqLR21jt6K.png

    (3) 按下”新增擴充功能”鈕即可安裝
    https://ithelp.ithome.com.tw/upload/images/20220924/201521800JOmC5f61x.png

    (4) 按住”Shift”鍵並移動游標來選取HTML元素

  2. 用Google Chrome開發人員工具取得XPath表達式字串

    (1) 按F12開啟開發人員工具

    (2) 選取HTML元素
    https://ithelp.ithome.com.tw/upload/images/20220924/20152180FzYleGBINq.png

    (3) 取得CSS選擇器字串
    https://ithelp.ithome.com.tw/upload/images/20220924/20152180hTEgHULj7N.png

實作練習

以旗標網站為例找出Python網路爬蟲與資料視覺化應用實務的書籍名稱與圖片。這裡使用Ixml套件來定位需要擷取的網頁元素。
注意!!!
Ixml在剖析table元素時並沒有tbody子元素,所以在XPath表達式要刪除tbody,不然執行程式時會發生錯誤

import requests
from lxml import html 

r = requests.get("http://www.flag.com.tw/books/school_code_n_algo")
tree = html.fromstring(r.text)

tag_img = tree.xpath("/html/body/section[2]/table/tr[8]/td[2]/a/img")[0]
print(tag_img)
print(tag_img.tag)
print(tag_img.attrib["src"])

tag_p = tree.xpath("/html/body/section[2]/table/tr[8]/td[2]/a/p")[0]
print(tag_p)
print(tag_p.tag)
print(tag_p.text_content())

https://ithelp.ithome.com.tw/upload/images/20220924/20152180N7j6ai6P3j.png


上一篇
[Day9] 擷取靜態HTML網頁資料4_CSS選擇器
下一篇
[Day11] 走訪HTML網頁
系列文
用Python學習網路爬蟲30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言