Python爬虫进阶Scrapy框架精文讲解

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的基本概念、安装和配置、命令行以及爬虫程序的编写。

后端开发标签