1. Scrapy框架简介
Scrapy是一个用于爬取网站并从中提取数据的框架。相较于其他Python爬虫框架,Scrapy具有编写简单、高效的特点。
Scrapy的组件主要包括:
引擎(Scrapy)
爬虫(Spider)
Item管道(Item Pipeline)
下载器(Downloader)
中间件(Middleware)
Scrapy的优势:
可扩展程度高,可以在框架中实现很多自定义的功能。
基于Twisted框架,支持异步IO操作。
遵循Robots协议,支持多个请求并发。
为Spider设计了回调函数方法,降低了代码的复杂性。
2. Scrapy安装和配置
2.1 安装
使用pip命令即可完成Scrapy的安装,命令如下:
pip install scrapy
安装完成后,可以在命令行中输入Scrapy,看是否能成功识别。
scrapy
2.2 配置
安装Scrapy之后,还需要进行相关配置,主要包括:
新建Scrapy项目
创建Spider
配置settings.py文件
编写Item Pipeline
2.3 Scrapy命令行
Scrapy提供了一些命令行工具,可以方便地完成一些操作。
新建Scrapy项目:
scrapy startproject [projectname]
创建Spider:
scrapy genspider [spidername] [domain]
运行Spider:
scrapy crawl [spidername]
启用HTTP代理:
scrapy crawl [spidername] -a proxy=http://host:port
3. Scrapy项目实例
下面以一个简单的实例来介绍Scrapy的使用方法,该实例为爬取豆瓣电影Top 250。
3.1 安装爬虫依赖库
安装requests库和beautifulsoup4库。
pip install requests
pip install beautifulsoup4
3.2 创建Scrapy项目
使用命令行工具创建Scrapy项目,命令如下:
scrapy startproject douban
在这个项目的文件目录中,有很多文件和文件夹,其中我们主要关注的是以下几个:
items.py 文件:这个文件定义了项目需要爬取的数据字段。
settings.py 文件:这个文件定义了爬虫的配置信息,如爬虫的名称、使用的中间件及管道等。
middlewares.py 文件:这个文件是中间件的实现方法文件,用于处理请求和响应。
pipelines.py 文件:这个文件定义数据的存储方式。
spiders 文件夹:这个文件夹存放的是项目需要爬取的Spider程序。
3.3 编写Spider爬虫程序
在本项目中,我们可以通过网络请求的响应HTML内容中获得相应电影的信息。
其中,我们可以先通过一下代码测试网络请求接口是否成功:
import requests
response = requests.get('https://movie.douban.com/top250')
print(response.content.decode())
如果成功,输出的HTML内容与浏览器访问网站的内容基本一致。
接下来,在该项目douban目录下,我们创建一个名为douban_spider.py的文件,文件代码如下:
import scrapy
from douban.items import DoubanItem
class DoubanSpider(scrapy.Spider):
name = 'douban'
allowed_domains = ['movie.douban.com']
start_urls = ['https://movie.douban.com/top250']
def parse(self, response):
item = DoubanItem()
movie_list = response.xpath('//div[@class="article"]//ol[@class="grid_view"]/li')
for movie in movie_list:
item['rank'] = movie.xpath('.//em/text()').extract()[0]
item['name'] = movie.xpath('.//span[@class="title"]/text()').extract()[0]
item['score'] = movie.xpath('.//span[@class="rating_num"]/text()').extract()[0]
yield item
在该文件中,我们主要利用Scrapy提供的XPath选择器来解析响应的HTML内容,从而获取电影的相关信息。
3.4 编写数据Pipeline
我们还需要编写一个数据Pipeline,将数据存储到MongoDB中。在douban目录下,我们创建一个名为pipelines.py的文件,代码如下:
import pymongo
class DoubanPipeline(object):
def __init__(self, mongo_uri, mongo_db):
self.mongo_uri = mongo_uri
self.mongo_db = mongo_db
def open_spider(self, spider):
self.client = pymongo.MongoClient(self.mongo_uri)
self.db = self.client[self.mongo_db]
def close_spider(self, spider):
self.client.close()
def process_item(self, item, spider):
collection_name = 'douban'
self.db[collection_name].insert(dict(item))
return item
在该文件中,我们主要通过pymongo库将获取到的电影信息存储到MongoDB数据库中。
3.5 配置Scrapy爬虫
在Scrapy项目中,我们还需要完成一些配置,如设置中间件、Item管道等信息。在项目的settings.py文件中进行相关配置代码如下:
BOT_NAME = 'douban'
SPIDER_MODULES = ['douban.spiders']
NEWSPIDER_MODULE = 'douban.spiders'
ROBOTSTXT_OBEY = False
MONGODB_SERVER = 'localhost'
MONGODB_PORT = 27017
MONGODB_DB = 'top250'
MONGODB_COLLECTION = 'douban'
ITEM_PIPELINES = {
'douban.pipelines.DoubanPipeline': 300,
}
在该配置文件中,设置了BOT_NAME、SPIDER_MODULES、MONGODB_SERVER、ITEM_PIPELINES等,这些设置将会影响爬虫程序的运行结果。
3.6 运行Scrapy爬虫
在完成以上代码的编写后,我们就可以运行Scrapy爬虫进行数据爬取和存储了。Scrapy爬虫的运行方式主要有两种:
命令行方式
在Python代码中嵌入Scrapy爬虫
在此,我们使用命令行方式来运行该爬虫。在项目的主目录下,使用以下命令启动Scrapy爬虫:
scrapy crawl douban
运行之后,爬取的数据将被存储到MongoDB中。
4. 总结
Scrapy是一个用于爬取网站并从中提取数据的框架。使用该框架可以实现高效、简单的数据爬取和存储。本文主要介绍了Scrapy的基本概念、安装和配置、命令行以及爬虫程序的编写。