網路爬蟲框架 Scrapy 入門教程

2021-08-27 03:56:42 字數 3273 閱讀 4895

scrapy 是乙個用 python 開發的爬蟲框架,用於抓取 web 頁面並提取其中的結構化資料。

安裝

首先,確定你的電腦上已經安裝了 python 3 以及對應的 pip。可以使用下面的命令檢視:

$ python3 --version

python 3.6.3

$ pip3 --version

pip 9.0.1 from /usr/local/lib/python3.6/site-packages (python 3.6)

如果沒有安裝的話,推薦使 homebrew 這個工具來進行安裝。

$ pip3 install scrapy
教程:乙個抓取豆瓣電影 top 250 的爬蟲

首先,我們使用下面的命令來建立並初始化 scrapy 專案:

$ scrapy startproject doubanmovie
這樣便會在當前目錄下建立乙個 doubanmovie 的爬蟲專案,其內部結構如下:

$ tree

.├── doubanmovie

│ ├── __init__.py

│ ├── __pycache__

│ ├── items.py

│ ├── middlewares.py

│ ├── pipelines.py

│ ├── settings.py

│ └── spiders

│ ├── __init__.py

│ └── __pycache__

└── scrapy.cfg

其中:

scrapy.cfg 為 scrapy 專案的核心配置檔案

items.py 用於定義爬蟲程式爬取到的資料實體的屬性結構

piplines.py 用於定義爬蟲程式每次爬取到的資料實體進行後續處理的操作流程,比如寫入檔案系統或資料庫

settings.py 為爬蟲程式的配置檔案,可以在這裡定義多個 pipline 和 middleware

spiders 資料夾中存放爬蟲檔案

接著,我們需要在 items.py 檔案中定義電影實體的屬性結構:

class doubanmovieitem(scrapy.item):

# define the fields for your item here like:

# name = scrapy.field()

rank = scrapy.field() # 豆瓣排名

title = scrapy.field() # 電影名稱

poster = scrapy.field() # 電影海報

link = scrapy.field() # 鏈結位址

rating = scrapy.field() # 豆瓣評分

pass

然後,我們使用下面的命令來建立乙個名為 doubanspider 的爬蟲程式:

$ scrapy genspider moviespider douban.com
執行之後會在 spiders 目錄下生成乙個名為 moviespider.py 的爬蟲檔案,內部定義了爬蟲的名稱、作用域及起始 url 等基本資訊,以及乙個解析函式,該函式的主要功能便是通過 xpath 分析頁面中的 html 元素,並將解析結果輸出:

class moviespiderspider(scrapy.spider):

name = 'moviespider'

allowed_domains = ['douban.com']

start_urls = ['']

def parse(self, response):

movie_items = response.xpath('//div[@class="item"]')

for item in movie_items:

movie = doubanmovieitem()

movie['rank'] = item.xpath('div[@class="pic"]/em/text()').extract()

movie['title'] = item.xpath('div[@class="info"]/div[@class="hd"]/a/span[@class="title"][1]/text()').extract()

movie['poster'] = item.xpath('div[@class="pic"]/a/img/@src').extract()

movie['link'] = item.xpath('div[@class="info"]/div[@class="hd"]/a/@href').extract()

movie['rating'] = item.xpath('div[@class="info"]/div[@class="bd"]/div[@class="star"]/span[@class="rating_num"]/text()').extract()

yield movie

pass

通過爬蟲解析後的實體資料,會通過一種 pipeline 的過程將結果進行列印輸出、存入檔案或資料庫等:

class doubanmoviepipeline(object):

def process_item(self, item, spider):

print('豆瓣排名:' + item['rank'][0])

print('電影名稱:' + item['title'][0])

print('豆瓣評分:' + item['rating'][0] + '\n')

return item

from scrapy.**********middlewares.useragent import useragentmiddleware

class fakeuseragentmiddleware(useragentmiddleware):

def process_request(self, request, spider):

最後,我們將上述修改寫入配置檔案:

# enable or disable ********** middlewares

# see

**********_middlewares =

# configure item pipelines

# see

item_pipelines =

執行 scrapy crawl moviespider 命令,便會在控制台中輸出爬取到的資料。

網路爬蟲框架 Scrapy

網路爬蟲框架 scrapy 簡介 開源的python爬蟲框架,用於抓取web站點並從頁面中提取結構化的資料 用途廣泛,可用於資料探勘 監測和自動化測試 scrapy優點 快速強大 量簡潔便可完成爬取 易擴充套件 可新增新的功能模組 scrapy高階特性 內建資料抽取器css xpath re 互動式...

爬蟲框架scrapy入門(一)

這段時間一直在學爬蟲,做了一些簡單的專案,爬取資料的過程中,被封過ip,需要翻牆,為了大規模的資料採集,開始學習scrapy框架。參照的是靜覓大神的 python3網路爬蟲開發實戰 本次爬取的 是scrapy官網 建議使用anaconda的一鍵安裝,我的電腦上同時有anaconda和pycham,一...

Python爬蟲框架scrapy入門

寫好,程式開始執行.spider 老大要我處理 x.com。引擎 你把第乙個需要處理的url給我吧。spider 給你,第乙個url是 x.com。引擎 hi!排程器,我這有request請求你幫我排序入隊一下。排程器 好的,正在處理你等一下。引擎 hi!排程器,把你處理好的request請求給我。...