Python爬蟲框架Scrapy教程 1 入門

2021-07-04 22:34:06 字數 2321 閱讀 1595

最近實驗室的專案中有乙個需求是這樣的,需要爬取若干個(數目不小)**發布的文章元資料(標題、時間、正文等)。問題是這些**都很老舊和小眾,當然也不可能遵守 microdata 這類標準。這時候所有網頁共用一套預設規則無法保證正確抓取到資訊,而每個網頁寫乙份spider**也不切實際。

這時候,我迫切地希望能有乙個框架可以通過只寫乙份spider**和維護多個**的爬取規則,就能自動抓取這些**的資訊,很慶幸 scrapy 可以做到這點。鑑於國內外關於這方面資料太少,所以我將這段時間來的經驗和**分享成了本文。

為了講清楚這件事,我分成了三篇文章來敘述:

程式設計方式下執行 scrapy spider

使用scrapy定製可動態配置的爬蟲

使用redis和sqlalchemy對scrapy item去重並儲存

本篇文章主要介紹如何使用程式設計的方式執行scrapy爬蟲。

執行乙個scrapy爬蟲可以通過命令列的方式(scrapy runspider myspider.py)啟動,也可以使用核心api通過程式設計的方式啟動。為了獲得更高的定製性和靈活性,我們主要使用後者的方式。

我們使用官方教程中的 dmoz 例子來幫助我們理解使用程式設計方式啟動spider。我們的 spider 檔案dmoz_spider.py長這個樣子:

import scrapy

class dmozitem(scrapy.item):

title = scrapy.field()

link = scrapy.field()

desc = scrapy.field()

class dmozspider(scrapy.spider):

name = "dmoz"

allowed_domains = ["dmoz.org"]

start_urls = [

"",""

]def parse(self, response):

for sel in response.xpath('//ul/li'):

item = dmozitem()

item['title'] = sel.xpath('a/text()').extract()

item['link'] = sel.xpath('a/@href').extract()

item['desc'] = sel.xpath('text()').extract()

yield item

接下來我們需要寫乙個指令碼run.py,來執行dmozspider:

from dmoz_spider import dmozspider

# scrapy api

from scrapy import signals, log

from twisted.internet import reactor

from scrapy.crawler import crawler

from scrapy.settings import settings

def spider_closing(spider):

"""activates on spider closed signal"""

log.msg("closing reactor", level=log.info)

reactor.stop()

log.start(loglevel=log.debug)

settings = settings()

# crawl responsibly

crawler = crawler(settings)

# stop reactor when spider closes

crawler.signals.connect(spider_closing, signal=signals.spider_closed)

crawler.configure()

crawler.crawl(dmozspider())

crawler.start()

reactor.run()

你可以在 github 上看到本文的完整專案。

注:本文使用的 scrapy 版本是 0.24,github 上的master分支已支援 scrapy 1.0

本系列的三篇文章

python爬蟲框架scrapy教程(1)——入門

python爬蟲框架scrapy教程(2)—動態可配置

python爬蟲框架scrapy教程(3)—使用redis和sqlalchemy對scrapy item去重並儲存

Python爬蟲框架

一 u know!二 scrapy入門教程 三 網路爬蟲之scrapy框架詳解 四 scrapy編寫步驟 詳情見二 scrapy入門教程 1 mkdir乙個爬蟲資料夾 例 mkdir home zy pachong pa test 10 28 2 在 home zy pachong pa test ...

Python爬蟲 scrapy框架

開源的,對平台的爬蟲框架 舊版本 需要預先定義所需欄位 class myitem scrapy.item url scrapy.field 再將所需欄位填充 class myspier scrapy.spider defparse self,response return sudo apt inst...

python爬蟲scrapy框架

安裝 pip install scrapy startproject 建立乙個新專案 genspider 根據模板生成乙個新爬蟲 crawl 執行爬蟲 shell 啟動互動式抓取控制台 進入專案目錄 scrapy startproject crawlertest project name cd cr...