首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Scrapy框架入门

一、环境

windows

python3.6.4

scrapy1.5.1

明白Python的基本语法系列

二、知识点

xpath

文字内容爬取并存本地文件

翻页爬取

图片爬取并存本地

简单的反爬虫

数据存数据库(mysql)

日志

网站地址:https://movie.douban.com/top250

三、项目构建及文件说明

1、项目创建

2、项目初始化

3、各文件说明

四、xpath解析说明

以Chrome插件(XPath Helper)为例。

即可解析出所有的电影信息模块,然后循环遍历进行处理即可。

PS:“//”即代表从任意路径下开始寻找

五、字段设置

即 item.py 文件。

六、爬虫编写

即 douban.py 文件。

以下代码,注释很详细,细节暂不赘述,简单提一下 yield 的用法:

yield 是个很重要的语法,有着 return 的部分功能,但完全不同于 return。

return 会返回信息并且终止当前的方法,而 yield 虽然也会返回一个信息给调用者,但是调用者使用完了之后程序还会回到此处继续执行。

比如用在此爬虫的 for 循环中的妙处是:此处生成 item 之后返回给调度器进行相关的处理,然后程序再回到这里继续运行,即继续下一个循环,然后再生成一个新的 item 提供给调度器,如此往复,直到循环结束。

七、“管道”说明

即 pipelines.py 文件。

说明:正如其名“管道”,它是用来处理 item 的,所以,我们可以写多个“管道”文件来处理 item,但是要注意:

① 每个“管道”处理完之后记得 return item,否则后续管道无法再进行处理,毕竟拿不到了嘛;

② 管道是有执行顺序的,所以需要我们进行定义其顺序(settings.py 文件),数字小,先执行:

1、文本内容存本地文件

即配置里面的:'Douban.pipelines.DoubanMoviePipeline': 300,

也是比较简单,看下文代码的注释即可,但是要注意编码。

2、图片内容保存本地

我们写在同一个“管道”文件里面。

注意继承类:ImagesPipeline,源码见:D:\IT\Python\Python36\Lib\site-packages\scrapy\pipelines\images.py

注意在 settings.py 中设置图片的下载路径:IMAGES_STORE = "D:\IT\Python\workspace\SpiderDemo\Douban\images\\"

代码同样比较简单,见下面的注释即可,注意,此处进行了文件重命名操作,并有打异常日志,日志后面会讲到。

3、数据存数据库还是写在同一个“管道”文件里面。

“管道”配置为:'Douban.pipelines.DoubanDBPipeline': 400

settings.py 中配置数据库信息:

代码理解也不困难,见注释即可,此处进行了简单的查重处理。

八、简单的反爬虫

1、添加用户代理

即添加 USER_AGENT,用于伪装浏览器

在 settings.py 中进行配置:

2、不遵守 robots 协议

在 settings.py 中进行配置:

3、请求间隙

即防止请求过于频繁。

在 settings.py 中进行配置,单位是秒:

4、设置 cookies

此处 Douban 的爬虫我们没有进行设置,github 中拉勾网的爬虫中有最简单设置。

即在爬虫代码中设置 cookie,然后在每个 Request 请求中直接添加。

或者完美一点的做法,应该是在中间件中设置,即在 middlewares.py 文件中进行配置。

九、日志

日后写一篇详细的介绍,此处暂不进行细说。

自定义的简单的日志模块为项目中的 logger.py 文件,使用方法见注释。

十、运行

1、查找可运行的 scrapy 项目

scrapy list

2、运行爬虫

scrapy crawl douban

3、运行爬虫并将 item 信息输出至文件

scrapy crawl douban -o doubanData.json

4、新建执行文件

新建 run.py 执行文件

文件内容为:

以后直接执行这个 python 文件即可。

十一、源码

https://github.com/goldenJet/SpiderDemo/tree/master/Douban

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181210G1MQMX00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券