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

Posted 机器学习成长笔记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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,为数据分析提供基础。


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



以上是关于Scrapy-基于python的最常见爬虫框架-实战的主要内容,如果未能解决你的问题,请参考以下文章

基于python的scrapy框架爬取豆瓣电影及其可视化

基于Scrapy框架的Python新闻爬虫

强大精简的爬虫框架Colly,能否取代 Scrapy?

Python爬虫面试常见问题

走近代码之Python--爬虫框架Scrapy

Python爬虫教程-30-Scrapy 爬虫框架介绍