Scrapy簡介
Scrapy是Python實現的爬蟲框架,使用只需要關注核心業務即可.安裝教程請參考官方文檔
安裝完成之後可通過scrapy 命令創建項目,爬蟲,及運行爬蟲,詳情使用 scrapy -h 命令查看
創建項目及爬蟲後重寫爬蟲中parse方法即可實現簡單內容爬取,支持xpath及css模式提取內容
項目結構說明
圖片中meijm_practice爲創建的項目名稱.
- spiders文件夾:存放具體爬蟲類繼承自scrapy.Spider及其子類,作用是爬取網頁並生產具體實體
- items.py:存放爬蟲中使用到的實體
- middlewares.py: 中間件,例如ip代理等
- pipelines.py:直譯是管道,對爬蟲產生的實體進行後續處理,例如存儲至數據庫,下載等
- settings.py:項目全局配置,設置啓用的中間件,管道,請求頭等.
scrapy.Spider類簡介
核心屬性及方法說明
名稱 | 類型 | 說明 |
---|---|---|
name | 字符串屬性 | 爬蟲名稱,執行爬蟲時使用 |
custom_settings | 字典屬性 | 自定義設置,指定中間件管道,請求頭等 |
allowed_domains | 數組屬性 | 允許的域名,創建爬蟲時指定,非必須 |
start_urls | 數組屬性 | 爬蟲開始的地址 |
start_requests(slf) | 重載方法 | 爬蟲開始地址的方法模式,返回爲<br /> yield scrapy.Request(url=地址, callback=self.parse) |
parse(self, response) | 重載方法 | 解析網頁,並生產具體實體或啓動下次爬取 |
例子
import scrapy
class QuotesSpider(scrapy.Spider):
name = "quotes"
start_urls = [
'http://quotes.toscrape.com/page/1/',
'http://quotes.toscrape.com/page/2/',
]
def parse(self, response):
for quote in response.css('div.quote'):
yield {
'text': quote.css('span.text::text').get(),
'author': quote.css('small.author::text').get(),
'tags': quote.css('div.tags a.tag::text').getall(),
}
命令行執行爬蟲
scrapy crawl quotes -O quotes.json
直接執行會將爬取到的內容輸出至qutoes.json文件中不加"-O quotes.json"則僅輸出至控制檯
其它
parse中返回下次爬取網址的幾種方法
- response.follow_all(response.xpath("a標籤"), self.解析函數)
- yield scrapy.Request(url地址絕對路徑, callback=self.解析函數)
- yield response.follow(url相對路徑/選擇器返回的單個a標籤, callback=self.解析函數)
- yield from response.follow_all(選擇器返回的所有a標籤, callback=self.解析函數)
self爲當前類,解析函數參數與parse相同
scrapy.Spider還有幾個官方子類,常用的是CrawlSpider:支持正則過濾url
參考資料
官方網站 https://scrapy.org/