Mike的Python學院

Scrapy、Python、網路爬蟲、資料擷取

Mike Ku

Learn Code With Mike品牌創辦人

2022/01/18

掌握Scrapy框架重要的XPath定位元素方法(下)

XPath(XML Path Language)是一個使用類似檔案路徑的語法,來定位XML文件中特定節點(node)的語言,因為能夠有效的尋找節點(node)位置,所以也被廣泛的使用在Python網頁爬蟲的元素(Element)定位上。
本文就以INSIDE硬塞的網路趨勢觀察網站-AI新聞( https://www.inside.com.tw/tag/ai ),來帶大家來認識如何在Scrapy框架中,使用內建的xpath()方法(Method)來定位想要爬取的網頁內容。
Q: Scrapy如何利用XPath方法取得子元素值?
在開發Python網頁爬蟲時,有很常的機率會需要透過逐層的方式,往下定位所要爬取的子元素(Element),這時候Scrapy xpath()方法(Method)中,所傳入的XPath路徑則跟檔案目錄一樣,一層一層的往下串接。
假設我們想從<div>標籤,逐層往下定位到<a>標籤,XPath路徑就會像以下範例:
import scrapy
class InsideSpider(scrapy.Spider):
name = 'inside'
allowed_domains = ['www.inside.com.tw']
def parse(self, response):
titles = response.xpath(
"//div[@class='post_list_item_content']/h3[@class='post_title']/a/text()").getall()
for title in titles:
print(title)
Q: Scrapy如何利用XPath方法取得元素屬性值?
Python網頁爬蟲除了能夠爬取網頁上顯示的內容外,也可以取得網頁元素(Element)的屬性值,舉例來說,像是<img>圖片的src來源屬性值或<a>超連結的href網址屬性值等,這時候,就需要在Scrapy框架的xpath()方法(Method)最後,加上「@屬性名稱」,如下範例:
import scrapy
class InsideSpider(scrapy.Spider):
name = 'inside'
allowed_domains = ['www.inside.com.tw']
def parse(self, response):
titles = response.xpath(
"//a[@class='js-auto_break_title']/@href").getall()
for title in titles:
print(title)
以上範例,即是爬取所有樣式類別(class)為「js-auto_break_title」的<a>標籤href屬性值,也就是文章標題的網址。
本文簡單示範了Scrapy框架的另一個定位元素方法XPath,很明顯的可以感受到語法和檔案路徑非常相似,使用上也很直覺,重點摘要如下:
1.取得單一元素值呼叫get()方法(Method)
2.取得多個元素值呼叫getall()方法(Method)
3.取得文字內容,加上「/text()」關鍵字
4.取得屬性值則加上「@屬性名稱」關鍵字
如果想要學習更多的Python應用教學,歡迎前往Learn Code With Mike(https://www.learncodewithmike.com/2021/01/scrapy-xpath-selectors.html
)網站觀看更多精彩內容。
2 0 87 0