引言
Scrapy
是Python
开发的一个快速、高层次的屏幕抓取和web
抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。本篇主要介绍基于Scrapy框架对豆瓣电影TOP250
:https://movie.douban.com/top250 进行信息抓取:包括电影排名、电影名称、电影介绍、星级、评价数、描述等信息,并存储到txt
、json
、MySQL数据库
。
准备工作
- 安装
Python3.7
Scrapy1.5.1
(安装过程这里不做介绍) - 安装
pymysql
(用于连接MySQL数据库) - 安装
MySQL
数据库(存储爬虫信息) - 在谷歌浏览器安装
XPath Helper
插件(解析前端页面并获取标签文本) - 开发工具
PyCharm
主要步骤
- 新建项目(创建一个新的
Scrapy
工程) - 明确目标(定义所需要要抽取的
Item
对象) - 制作爬虫(编写
spider
来爬取某个网站并提取出所有的Item对象) - 存储内容(编写
Pipline
来存储提取出来的Item对象)
示例操作
1、新建项目
我们以C盘根目录下创建项目douban为例,首先我们在CMD先进入到C盘,然后输入scrapy startproject douban
即可,如下图所示:
我们用PyCharm打开创建的douban项目,其项目目录结构如下所示,scrapy.cfg
为项目配置文件,定义了配置文件路径和部署信息等;item.py
用来定义数据结构;setting.py
为项目设置文件,定义全局设置;pipelines.py
用于数据清洗和存储;
spiders文件夹下主要是我们编写XPath地方,这里我们需要进一步生成,在cmd打开spiders文件,输入scrapy genspider douban_spider movie.douban.com
,运行即可,movie.douban.com
为我们爬取网站的域名。
在生成的douban_spider中主要编写我们爬虫的逻辑、正则表达式、XPath等
2、定义Item
打开item.py文件,按照提供的示例来定义我们爬取的内容:
class DoubanItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
# 排名序号
serial_name = scrapy.Field()
# 电影名称
movie_name = scrapy.Field()
# 电影介绍
introduce = scrapy.Field()
# 星级
star = scrapy.Field()
# 评论
evaluate = scrapy.Field()
# 描述
describe = scrapy.Field()
pass
3、编写spider
打开spider文件夹下的doban_spider.py,修改入口URL为https://movie.douban.com/top250
,在parse函数中输出返回的内容,然后运行程序测试一下。
class DoubanSpiderSpider(scrapy.Spider):
#爬虫名称
name = 'douban_spider'
#允许的域名
allowed_domains = ['movie.douban.com']
#入口URL
start_urls = ['https://movie.douban.com/top250']
#默认解析方法
def parse