基于python的scrapy爬虫,关于增量爬取是怎么处理的

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于python的scrapy爬虫,关于增量爬取是怎么处理的相关的知识,希望对你有一定的参考价值。

参考技术A



new to scrapy, 仅提供几个思路,详细解决方案,自己解决后后续跟进。

    如果只是一次性的抓取某个网站的全部内容, 中途需要暂停并且恢复,只需要

    scrapy crawl somespider -s JOBDIR=crawls/somespider-1

    参考:Jobs: pausing and resuming crawls

    如果需求是过滤某些url,但是网站的主入口不被过滤掉,比如典型的论坛类网站,你只想过滤掉帖子,但是却不想过滤掉板块,你可以定制一下requestSeen

    scrapy/dupefilter.py at 0.24 · scrapy/scrapy · GitHub
    python - how to filter duplicate requests based on url in scrapy

    如果使所有网站的动态过滤,比如是不是多了一个新回复,在url上的变化并不能体现出来,搜索引擎采用的是一系列的算法,判断某一个页面的更新时机。个人应用一般不会使用到(其实是自己也不懂,写出来提供一下思路,也许你会呢)。大部分的网页在进入下一级页面的时候都会有一个类似于最后更新时间,最后活动时间等等,可以根据这个来进行判断。

Scrapy-基于python的最常见爬虫框架-实战

上一篇我们介绍了Scrapy的运行环境配置方法,并且成功运行了第一个“Hello World”程序。今天笔者准备爬取直聘页面的招聘信息,以加深对Scrapy的理解。


网上可以轻易搜到基于Scrapy爬取直聘信息的全过程记录,但基本都是2017年的某一版被四处转载,直聘网站页面的HTML信息已经有所修改,源代码多处失效,本文将会在其基础上提供最新调整后的爬取方法和具体过程。


一、开发环境


MacOS 10.13.6

Python 2.7.10

Scrapy 1.5.1

Atom 1.7.4


二、新建项目


$scrapy startproject www_zhipin_com


此处可以使用tree+'dirname'的指令查看你所创建项目的树形结构


三、定义要抓取的Item


在items.py文件中定义一个类,scrapy.Field()有点类似我们在数据库中定义的数据类型,也就是爬到的数据属性。



三、分析页面源代码


Scrapy-基于python的最常见爬虫框架-实战


在首页搜索栏输入关键字“AI”,返回的每一条招聘信息即是我们需要爬取的对象


Scrapy-基于python的最常见爬虫框架-实战


这是一条招聘记录的完整信息,爬虫就是使用 css 选择器获取标签里的文字或链接等。


四、爬虫代码


在 spiders 目录下新建 zhipin_spider.py


Scrapy-基于python的最常见爬虫框架-实战

Scrapy-基于python的最常见爬虫框架-实战

Scrapy-基于python的最常见爬虫框架-实战


headers的构造内容为

headers = {'Accept': '*/*',

               'Accept-Language': 'en-US,en;q=0.8',

               'Cache-Control': 'max-age=0',

               'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36\                 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36',

               'Connection': 'keep-alive',

               'Referer': 'https://www.baidu.com/'

        }


运行脚本 scrapy crawl zhipin -o item.json


生成的json脚本即为爬虫结果,如下:


Scrapy-基于python的最常见爬虫框架-实战


五、坑-集锦


1、在settings.py中添加FEED_EXPORT_ENCODING = 'utf-8'


2、如果出现爬取time关键字时报错,核对页面html代码,目标页面针对此内容进行了修改,需要对代码进行相应修改


Scrapy-基于python的最常见爬虫框架-实战



4、在不挂VPN的情况下,提示如下错误,挂载VPN后成功获取数据

(可能是cookie缓存的问题,尚未深究)


[scrapy.downloadermiddlewares.redirect] DEBUG: Redirecting (302) 



5、如果采用粘贴代码的方式,注意缩进格式和隐藏的空白符


6、控制爬取速率,如果仍出现数据残缺不全的情况,尝试修改settings.py内容


AUTOTHROTTLE_DEBUG = True 


六、结语


通过实际案例体会到Scrapy的用法,实现最基本的功能,回顾了css相关知识。后期可以将获得的json数据导入mongodb,为数据分析提供基础。


对代码感兴趣的同学可以留言获取源代码链接,能力有限,请多批评指正。



以上是关于基于python的scrapy爬虫,关于增量爬取是怎么处理的的主要内容,如果未能解决你的问题,请参考以下文章

基于python的scrapy爬虫,关于增量爬取是怎么处理的

爬虫07 /scrapy图片爬取中间件selenium在scrapy中的应用CrawlSpider分布式增量式

Scrapy框架--增量式爬虫

scrapy爬取数据时,为啥总是302

python爬虫--scrapy框架的学习和使用⭐---第二部分

Python网络爬虫之Scrapy框架(CrawlSpider)