一、环境
- windows
- python3.6.4
scrapy1.5.1
明白Python的基本语法系列
二、知识点
- xpath
文字内容爬取并存本地文件
翻页爬取
图片爬取并存本地
简单的反爬虫
数据存数据库(mysql)
日志
三、项目构建及文件说明
1、项目创建
1 | scrapy startproject Douban |
2、项目初始化
1 | cd Douban |
3、各文件说明
四、xpath解析说明
以Chrome插件(XPath Helper)为例。
1 | //ol[@class='grid_view']/li/div[@class='item'] |
即可解析出所有的电影信息模块,然后循环遍历进行处理即可。
PS:“//”即代表从任意路径下开始寻找
五、字段设置
即 item.py 文件。
1 | # 电影名字 |
六、爬虫编写
即 douban.py 文件。
以下代码,注释很详细,细节暂不赘述,简单提一下 yield 的用法:
yield 是个很重要的语法,有着 return 的部分功能,但完全不同于 return。
return 会返回信息并且终止当前的方法,而 yield 虽然也会返回一个信息给调用者,但是调用者使用完了之后程序还会回到此处继续执行。
比如用在此爬虫的 for 循环中的妙处是:此处生成 item 之后返回给调度器进行相关的处理,然后程序再回到这里继续运行,即继续下一个循环,然后再生成一个新的 item 提供给调度器,如此往复,直到循环结束。
1 | # 爬虫名称(必须唯一) |
七、“管道”说明
即 pipelines.py 文件。
说明:正如其名“管道”,它是用来处理 item 的,所以,我们可以写多个“管道”文件来处理 item,但是要注意:
① 每个“管道”处理完之后记得 return item,否则后续管道无法再进行处理,毕竟拿不到了嘛;
② 管道是有执行顺序的,所以需要我们进行定义其顺序(settings.py 文件),数字小,先执行:
1 | # Configure item pipelines |
1、文本内容存本地文件
即配置里面的:'Douban.pipelines.DoubanMoviePipeline': 300,
也是比较简单,看下文代码的注释即可,但是要注意编码。
1 | class DoubanMoviePipeline(object): |
2、图片内容保存本地
我们写在同一个“管道”文件里面。
注意继承类:ImagesPipeline,源码见:D:\IT\Python\Python36\Lib\site-packages\scrapy\pipelines\images.py
注意在 settings.py 中设置图片的下载路径:IMAGES_STORE = “D:\IT\Python\workspace\SpiderDemo\Douban\images\\”
代码同样比较简单,见下面的注释即可,注意,此处进行了文件重命名操作,并有打异常日志,日志后面会讲到。
1 | class DoubanImgPipeline(ImagesPipeline): |
3、数据存数据库
还是写在同一个“管道”文件里面。
“管道”配置为:'Douban.pipelines.DoubanDBPipeline': 400
settings.py 中配置数据库信息:
1 | # mysql 设置 |
代码理解也不困难,见注释即可,此处进行了简单的查重处理。
1 | class DoubanDBPipeline(object): |
八、简单的反爬虫
1、添加用户代理
即添加 USER_AGENT,用于伪装浏览器
在 settings.py 中进行配置:
1 | # Crawl responsibly by identifying yourself (and your website) on the user-agent |
2、不遵守 robots 协议
在 settings.py 中进行配置:
1 | # Obey robots.txt rules |
3、请求间隙
即防止请求过于频繁。
在 settings.py 中进行配置,单位是秒:
1 | DOWNLOAD_DELAY = 0.25 |
4、设置 cookies
此处 Douban 的爬虫我们没有进行设置,github 中拉勾网的爬虫中有最简单设置。
即在爬虫代码中设置 cookie,然后在每个 Request 请求中直接添加。
1 | yield scrapy.Request(job_url, cookies=self.cookie, meta={'item': item}, callback=self.parse_url) |
或者完美一点的做法,应该是在中间件中设置,即在 middlewares.py 文件中进行配置。
九、日志
日后写一篇详细的介绍,此处暂不进行细说。
自定义的简单的日志模块为项目中的 logger.py 文件,使用方法见注释。
十、运行
1、查找可运行的 scrapy 项目
scrapy list
2、运行爬虫
scrapy crawl douban
3、运行爬虫并将 item 信息输出至文件
scrapy crawl douban -o doubanData.json
4、新建执行文件
新建 run.py 执行文件
文件内容为:
1 | from scrapy.cmdline import execute |
以后直接执行这个 python 文件即可。
十一、源码
https://github.com/goldenJet/SpiderDemo/tree/master/Douban