新聞中心
Scrapy是用純Python實(shí)現(xiàn)一個(gè)為了爬取網(wǎng)站數(shù)據(jù)、提取結(jié)構(gòu)性數(shù)據(jù)而編寫(xiě)的應(yīng)用框架,用途非常廣泛。

在東營(yíng)等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站建設(shè)、成都網(wǎng)站制作 網(wǎng)站設(shè)計(jì)制作定制網(wǎng)站,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站制作,成都營(yíng)銷(xiāo)網(wǎng)站建設(shè),外貿(mào)營(yíng)銷(xiāo)網(wǎng)站建設(shè),東營(yíng)網(wǎng)站建設(shè)費(fèi)用合理。
框架的力量,用戶只需要定制開(kāi)發(fā)幾個(gè)模塊就可以輕松的實(shí)現(xiàn)一個(gè)爬蟲(chóng),用來(lái)抓取網(wǎng)頁(yè)內(nèi)容以及各種圖片,非常之方便。
安裝
首先,確定你的電腦上已經(jīng)安裝了 Python 3 以及對(duì)應(yīng)的 pip??梢允褂孟旅娴拿畈榭矗?/p>
$ python3 --version
Python 3.6.3
$ pip3 --version
pip 9.0.1 from /usr/local/lib/python3.6/site-packages (python 3.6)
如果沒(méi)有安裝的話,推薦使 Homebrew 這個(gè)工具來(lái)進(jìn)行安裝。
pip 是 Python 的一個(gè)包管理工具,類(lèi)似于 npm,可以在線安裝、卸載所有的第三方 Python 模塊,并自動(dòng)處理依賴關(guān)系。這里我們使用下面的命令來(lái)安裝 Scrapy 模塊:
$ pip3 install scrapy
教程:一個(gè)抓取豆瓣電影 Top 250 的爬蟲(chóng)
首先,我們使用下面的命令來(lái)創(chuàng)建并初始化 Scrapy 項(xiàng)目:
$ scrapy startproject doubanmovie
這樣便會(huì)在當(dāng)前目錄下創(chuàng)建一個(gè) doubanmovie 的爬蟲(chóng)項(xiàng)目,其內(nèi)部結(jié)構(gòu)如下:
$ tree
.
├── doubanmovie
│ ├── __init__.py
│ ├── __pycache__
│ ├── items.py
│ ├── middlewares.py
│ ├── pipelines.py
│ ├── settings.py
│ └── spiders
│ ├── __init__.py
│ └── __pycache__
└── scrapy.cfg
其中:
scrapy.cfg 為 Scrapy 項(xiàng)目的核心配置文件
items.py 用于定義爬蟲(chóng)程序爬取到的數(shù)據(jù)實(shí)體的屬性結(jié)構(gòu)
piplines.py 用于定義爬蟲(chóng)程序每次爬取到的數(shù)據(jù)實(shí)體進(jìn)行后續(xù)處理的操作流程,比如寫(xiě)入文件系統(tǒng)或數(shù)據(jù)庫(kù)
settings.py 為爬蟲(chóng)程序的配置文件,可以在這里定義多個(gè) pipline 和 middleware
spiders 文件夾中存放爬蟲(chóng)文件
接著,我們需要在 items.py 文件中定義電影實(shí)體的屬性結(jié)構(gòu):
class DoubanmovieItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
rank = scrapy.Field() # 豆瓣排名
title = scrapy.Field() # 電影名稱
poster = scrapy.Field() # 電影海報(bào)
link = scrapy.Field() # 鏈接地址
rating = scrapy.Field() # 豆瓣評(píng)分
pass
然后,我們使用下面的命令來(lái)創(chuàng)建一個(gè)名為 doubanspider 的爬蟲(chóng)程序:
$ scrapy genspider moviespider douban.com
運(yùn)行之后會(huì)在 spiders 目錄下生成一個(gè)名為 moviespider.py 的爬蟲(chóng)文件,內(nèi)部定義了爬蟲(chóng)的名稱、作用域及起始 URL 等基本信息,以及一個(gè)解析函數(shù),該函數(shù)的主要功能便是通過(guò) XPath 分析頁(yè)面中的 HTML 元素,并將解析結(jié)果輸出:
class MoviespiderSpider(scrapy.Spider):
name = 'moviespider'
allowed_domains = ['douban.com']
start_urls = ['https://movie.douban.com/top250']
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
通過(guò)爬蟲(chóng)解析后的實(shí)體數(shù)據(jù),會(huì)通過(guò)一種 Pipeline 的過(guò)程將結(jié)果進(jìn)行打印輸出、存入文件或數(shù)據(jù)庫(kù)等:
class DoubanmoviePipeline(object):
def process_item(self, item, spider):
print('豆瓣排名:' + item['rank'][0])
print('電影名稱:' + item['title'][0])
print('鏈接地址:' + item['link'][0])
print('豆瓣評(píng)分:' + item['rating'][0] + '\n')
return item
由于豆瓣電影的網(wǎng)站設(shè)置了防爬蟲(chóng)技術(shù),所以在完成上述步驟后運(yùn)行爬蟲(chóng)會(huì)出現(xiàn) 403 的 HTTP 狀態(tài)碼。于是我們需要在發(fā)送的請(qǐng)求中加入 User Agent 信息來(lái)偽裝成一個(gè)瀏覽器:
from scrapy.downloadermiddlewares.useragent import UserAgentMiddleware
class FakeUserAgentMiddleware(UserAgentMiddleware):
def process_request(self, request, spider):
request.headers.setdefault('User-Agent', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36')
最后,我們將上述修改寫(xiě)入配置文件:
# Enable or disable downloader middlewares
# See http://scrapy.readthedocs.org/en/latest/topics/downloader-middleware.html
DOWNLOADER_MIDDLEWARES = {
'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware': None,
'doubanmovie.fakeuseragent.FakeUserAgentMiddleware': 543,
}
# Configure item pipelines
# See http://scrapy.readthedocs.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {
'doubanmovie.pipelines.DoubanmoviePipeline': 300,
}
運(yùn)行 scrapy crawl moviespider 命令,便會(huì)在控制臺(tái)中輸出爬取到的數(shù)據(jù)。
新聞名稱:快速上手網(wǎng)絡(luò)爬蟲(chóng)框架Scrapy
標(biāo)題URL:http://fisionsoft.com.cn/article/codiodi.html


咨詢
建站咨詢
