Mike的Python學院

Python、網路爬蟲、Scrapy

Mike Ku

Learn Code With Mike品牌創辦人

2022/01/18

詳解Scrapy框架爬取分頁資料的實用技巧(上)

Q: Scrapy專案建立網頁內容爬取方法(Method)
首先,為了提升Scrapy網頁爬蟲(spiders/inside.py)的parse()方法(Method)爬取邏輯的重用性,本文將它獨立成一個新方法(Method),如下範例:
import scrapy
class InsideSpider(scrapy.Spider):
name = 'inside'
allowed_domains = ['www.inside.com.tw']
def parse(self, response):
yield from self.scrape(response) #爬取網頁內容
def scrape(self, response):
# 爬取文章標題
post_titles = response.xpath(
"//h3[@class='post_title']/a[@class='js-auto_break_title']/text()"
).getall()
# 爬取發佈日期
post_dates = response.xpath(
"//li[@class='post_date']/span/text()"
).getall()
# 爬取作者
post_authors = response.xpath(
"//span[@class='post_author']/a/text()"
).getall()
for data in zip(post_titles, post_dates, post_authors):
NewsScraperItem = {
"post_title": data[0],
"post_date": data[1],
"post_author": data[2]
}
yield NewsScraperItem
由於爬取邏輯被獨立為一個新方法(Method),這時候在parse()方法(Method)中,則需使用「yield from」關鍵字來進行呼叫,並且傳入網頁的回應結果(response),來執行網頁資料的爬取。
Q: Scrapy定位網頁的下一頁按鈕
如果想要利用Scrapy網頁爬蟲框架,繼續爬取第二頁的資料時,就需要取得下一頁的網址,通常都會位於「下一頁」按鈕的href屬性中。
在「下一頁」按鈕點擊右鍵,選擇「檢查」,可以看到它的HTML原始碼。接下來,回到Scrapy專案的spiders/inside.py檔案,在parse()方法(Method)中,即可利用Scrapy框架的xpath()方法(Method),傳入「下一頁」按鈕的樣式類別(class)來進行定位,如下範例:
import scrapy
class InsideSpider(scrapy.Spider):
name = 'inside'
allowed_domains = ['www.inside.com.tw']
def parse(self, response):
yield from self.scrape(response)
# 定位「下一頁」按鈕元素
next_page_url = response.xpath(
"//a[@class='pagination_item pagination_item-next']/@href")
def scrape(self, response):
...
如果想要學習更多的Python應用教學,歡迎前往Learn Code With Mike(https://www.learncodewithmike.com/2021/02/scraping-multiple-pages-with-scrapy.html
)網站觀看更多精彩內容。
2 0 125 0