学过爬虫的朋友知道,requests库和BeautifulSoup4库可以爬取80%多的数据,但是还有少部分数据通过这两个库无法获取,所以今天介绍另外一个爬虫工具——Scrapy框架。
1.Scrapy框架介绍
- Scrapy是用python实现的一个用于爬取网站数据、提取结构性数据而编写的应用框架,用途非常广泛。
- 用户只需要定制开发几个模块就可以轻松实现数据、图片等的爬取,非常方便。
- Scrapy采用Twisted异步网络框架来处理网络通讯,可以加块下载速度。
2.Scrapy安装
在pychram中安装Scrapy,仍然可以在命令行中输入pip install scrapy
3.项目新建
安装好Scrapy之后,我们在pycharm界面下面找到Terminal,点击之后出现如下窗口,在希望创建的目录下输入scrapy startproject mytest1:
按enter键后,出现如下界面,表示项目创建成功:
项目成功创建之后,就会出现项目名为mytest1的文件(如下图),该文件下包含多个.py文件。
_init_py: 存放用户需要爬虫数据的属性,比如爬电影时,评分,电影名这些就在这个文件定义
items.py: 对数据进行封装
middlewares.py: 爬虫的中间健,主要用于一些反爬虫的设置
pipelines.py: 爬虫的管道,对items.py封装的数据进行处理
settings.py: 爬虫的一些设置,比如设置反爬虫、代理等
4.开始爬虫
下文以爬取慕课网下各课程网址、课程名、课程图片以及课程介绍为例进行讲解。
1. 定义爬虫数据的属性
首先打开items.py文件,一般建完项目后,Items.py中会默认有一个以项目名为类名的类,不过类名可以更改,不影响爬虫。因为要爬取各课程网址、课程名、课程图片以及课程介绍,所以需要定义四种属性。
import scrapy
#定义爬取数据的属性
class CourseItem(scrapy.Item):
title = scrapy.Field()
url = scrapy.Field()
image_url=scrapy.Field()
introduction=scrapy.Field()
student = scrapy.Field()
image_path = scrapy.Field()
2.开始爬虫
在项目中spiders文件下新建一个python文件Myspider.py,该文件是爬虫的核心,用户需要在里面写爬虫具体代码。首先导入Scrapy模块,同时需要导入第一步中的CourseItem类,因为我们需要用到CourseItem类定义的属性。注意,之后运行程序不是使用项目名,而是使用name,然后写爬虫网址的域名,以及爬取网页的网址,这三步是固定的,必须要写。 在parse函数中,首先创建CourseItem类对象,在Scrapy框架中,使用xpath来获取标签内容。关于xpath的具体用法见博客Scrapy中Xpath选选择器的基本用法
import scrapy
from ..items import CourseItem
class MySpider(scrapy.Spider