目錄
一、CrawlSpider 簡介?
二、實戰案例:圖片網站爬取?
三、代碼解析:核心組件詳解?
類定義:
? ? ? ? 2.核心屬性:?
? ? ? ? 3.爬取規則(Rules):?
? ? ? ? 4.數據提取方法(parse_item):?
四、運行與調試?
五、常見問題解決?
? ? ? ? 1.鏈接提取失敗
? ? ? ? 2.爬取范圍失
?????????3.??重復爬取
在網絡數據采集領域,Scrapy 框架以其高效、靈活的特性深受開發者青睞。本文將以爬取 4K 美女圖片網站為例,詳細講解 Scrapy 中 CrawlSpider 的基礎用法,幫助初學者快速掌握全站爬取技巧。?
一、CrawlSpider 簡介?
CrawlSpider 是 Scrapy 提供的一種高級爬蟲類,特別適合對整站內容進行爬取。它通過定義爬取規則(Rule),可以自動跟進鏈接并提取數據,極大簡化了爬蟲的開發流程。與基礎的 Spider 相比,CrawlSpider 更擅長處理具有一定結構的網站,如新聞網站、電商平臺等。?
二、實戰案例:圖片網站爬取?
以下是本次使用的基礎爬蟲代碼:?
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Ruleclass TupianSpider(CrawlSpider):name = "tupian"# allowed_domains = ["pic.netbian.com"]start_urls = ["https://pic.netbian.com/4kmeinv/"]rules = (Rule(LinkExtractor(restrict_xpaths=('//*[@id="main"]/div[4]/ul/li')), callback="parse_item", follow=True),Rule(LinkExtractor(restrict_xpaths=('//*[@id="main"]/div[5]/a')), follow=True) #翻頁,不需要回調函數)def parse_item(self, response):item = {}print(response.xpath('//*[@id="main"]/div[3]/div[1]/div[1]/h1').extract_first())return item
三、代碼解析:核心組件詳解?
-
類定義:
TupianSpider繼承自CrawlSpider,這是使用 CrawlSpider 的基礎。?
? ? ? ? 2.核心屬性:?
- name:爬蟲名稱,用于在命令行啟動爬蟲時使用(如scrapy crawl tupian)。?
- start_urls:起始 URL 列表,爬蟲從這些 URL 開始爬取。這里設置為 "https://pic.netbian.com/4kmeinv/",即 圖片分類頁。?
- allowed_domains:可選屬性,用于限制爬蟲只在指定域名下爬取。本例中注釋掉該屬性,允許爬蟲跟進所有相關鏈接。?
? ? ? ? 3.爬取規則(Rules):?
- 規則是 CrawlSpider 的核心,由Rule對象組成的元組。每個Rule定義了一種鏈接提取和處理方式。?
- 第一個規則:LinkExtractor(restrict_xpaths=('//*[@id="main"]/div[4]/ul/li'))表示使用 XPath 提取符合條件的鏈接,這些鏈接對應圖片詳情頁。callback="parse_item"指定用parse_item方法處理這些鏈接的響應,follow=True表示繼續跟進該頁面中的鏈接。?
- 第二個規則:用于提取翻頁鏈接,follow=True確保爬蟲能自動爬取多頁內容,由于翻頁鏈接不需要直接提取數據,因此沒有指定callback。?
? ? ? ? 4.數據提取方法(parse_item):?
該方法用于處理詳情頁響應,通過 XPath 提取圖片標題(//*[@id="main"]/div[3]/div[1]/div[1]/h1)并打印。實際應用中,可根據需求提取更多信息,如圖片 URL、發布時間等。?
四、運行與調試?
保存代碼為tupian_spider.py,放入 Scrapy 項目的spiders目錄下。?
在項目根目錄執行命令:scrapy crawl tupian啟動爬蟲。?
觀察控制臺輸出,若能正常打印圖片標題,說明爬蟲運行成功。?
五、常見問題解決?
? ? ? ? 1.鏈接提取失敗
檢查 XPath 表達式是否正確,可使用 Scrapy Shell(scrapy shell URL)測試 XPath。?
? ? ? ? 2.爬取范圍失
合理設置allowed_domains屬性,避免爬蟲跳轉到無關網站。?
?????????3.??重復爬取
Scrapy 默認會過濾重復 URL,無需額外處理。?
通過本文的學習,相信你已掌握 CrawlSpider 的基本用法。下一篇文章將深入探討爬蟲的優化技巧,包括反爬處理、數據存儲等高級內容。