Mike的Python學院

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

Mike Ku

Learn Code With Mike品牌創辦人

2022/01/18

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

本文就以INSIDE硬塞的網路趨勢觀察網站-AI新聞( https://www.inside.com.tw/tag/ai ),來帶大家來認識如何在Scrapy框架中,使用內建的xpath()方法(Method)來定位想要爬取的網頁內容。
Q: Scrapy如何利用XPath方法取得單一元素值?
首先,開啟INSIDE硬塞的網路趨勢觀察網站-AI新聞網頁( https://www.inside.com.tw/tag/ai ),在文章標題的地方按滑鼠右鍵,選擇「檢查」,可以看到HTML原始碼,如果想要以XPath語法定位這個<a>標籤的位置,語法就像檔案路徑一樣,如下範例:
//a[@class='js-auto_break_title']
意思就像是根目錄下的<a>標籤,並且利用「[@class='']」來指定它的樣式類別(class),如此就能夠定位到文章標題的<a>標籤。
接下來,在spiders / inside.py的parse()方法(Method)中,將網頁回應的結果(response),改為呼叫xpath()方法(Method),並且,貼上剛剛所得知的XPath路徑,如下範例:
import scrapy
class InsideSpider(scrapy.Spider):
name = 'inside'
allowed_domains = ['www.inside.com.tw']
def parse(self, response):
title = response.xpath("//a[@class='js-auto_break_title']/text()").get()
print(title)
接著,利用以下指令執行inside網頁爬蟲:
$ scrapy crawl inside
以上範例,利用XPath路徑定位到所要爬取的<a>標籤後,由於要取得其中的網頁內容文字,所以在XPath路徑的最後需加上「/text()」關鍵字,並且,呼叫get()方法(Method)取得單一元素值。
Q: Scrapy如何利用XPath方法取得多個元素值?
如果想要利用Scrapy xpath()方法(Method)取得多個元素值,使用XPath路徑定位到所要爬取的網頁元素<a>標籤後,呼叫getall()方法(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']/text()").getall()
print(titles)
從執行結果可以看到,getall()方法(Method)會回傳一個串列(List),包含所有樣式類別(class)為「js-auto_break_title」的<a>標籤標題文字,接下來,就需要透過迴圈來進行讀取,如下範例:
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']/text()").getall()
for title in titles:
print(title)
如果想要學習更多的Python應用教學,歡迎前往Learn Code With Mike(https://www.learncodewithmike.com/2021/01/scrapy-xpath-selectors.html
)網站觀看更多精彩內容。
2 0 213 0