Python爬虫框架scrapy抓取旅行家网所有游记!从此出游不发愁!

Scrapy是一个用 Python 写的 Crawler Framework ,简单轻巧,并且非常方便。Scrapy 使用 Twisted 这个异步网络库来处理网络通讯,架构清晰,并且包含了各种中间件接口,可以灵活的完成各种需求。

以上是网上摘录的一段介绍scrapy框架的文字,大过年的,懒癌高发期...

安装scrapy,pip可以解决你的问题: pip install scrapy。

这里插一句,如果你运行代码后看到这个错误:

ImportError: No module named win32api

深坑出现,你需要安装pywin32,如果已经安装了pywin32,还出现错误,你仍需手动将你python安装目录下\Lib\site-packages\pywin32_system32下:pythoncom27.dll, pywintypes27.dll两个文件复制到c:\windows\system32下!当然如果不是windows系统的话,请无视!

话不多说,开始我们的爬虫吧!

首先来分析网页结构:

1、url:https://you.autohome.com.cn 打开旅行家的主页,这里我用的是火狐浏览器,看下图

点击精彩游记,然后跳出游记页面,

然后在点击全部游记,我们的目标就出现了,拉到最下面,一共3993页,1页20篇

很简单的一个网站

2、我们开始分析每页的数据,直接打开F12抓包,然后刷新网页或者点击其他页,看看服务器返回的请求都有哪些!

找到一个get请求,里面是json格式的内容,里面有游记的作者、标题、缩略图等等内容,ok,我们可以开始写代码了!

Ps:这里我们只做个简单的页面目录的爬虫,就不一 一抓取文章内容了(如果有需要的小伙伴可以自行添加相关内容)。

3、打开cmd新建一个scrapy框架,命令为:scrapy startproject autohome ,然后系统自动帮我们建立好相关的目录和py文件,我们仍需手动建立一个spider.py(文件名可自取)来放入我们的爬虫

先打开item.py,这里存放的是我们的目标,告诉爬虫我们要爬取的内容是什么!代码如下:

然后打开setting.py(如无必要,不要修改这里的内容),将ROBOTSTXT_OBEY的值改为False(不改的话,有些内容爬不到,这里是选择是否遵循robots协议),然后将你的UA写入下面的头部信息中!

其他都不用管了。最后打开spider文件夹,在这里我们要开始写我们的爬虫了!

4、打开新建的py文件,先导入用到的模块

(导入模块后有错误提示可以不用理会),写入如下代码:

第6行的name是唯一的,可自行命名

第7行为定义爬虫的范围,也就是允许执行的url范围是:autohome.com.cn,注意这里是列表形式

第9.10.11行为抓取的内容所在url,通过yield Request返回,上图未截全部分为:

yield Request('https://you.autohome.com.cn/summary/getsearchresultlist?ps=20&pg={}&type=3&tagCode=&tagName=&sortType=3'.format(pg),self.parse)

因为只有3993页,直接for循环取到所有页码,定义了start_requests函数后可省略start_urls列表也就是起始列表

第14行开始定义爬取方法

第15行,将json格式的内容赋值给一个变量

第16行,初始化导入的Items文件中所定义的类

第17-24行,循环json格式的内容,并将相应的值赋值给item,这里item是一个字典格式,然后返回给items文件

到这里就写完了这个爬虫,为方便使用,我们直接将结果写入json格式

打开cmd,命令:scrapy crawl autohome -o autohome.json -t json

因为我们爬取的内容很少,所以速度还是很快的

概十来分钟吧,数据就抓取完成!来看看结果,因为是json格式,截取一小段找个在线解析的网页就可以看了

验证一下:

So easy!

喜欢就关注下呗(;°○° )!

原文发布于微信公众号 - 云飞学python(P542110741)

原文发表时间:2018-02-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏码字搬砖

工作中用到的sh脚本(持续更新)

day=(date−d‘−0day′‘+echo“(date−d‘−0day′‘+echo“(date -d ‘-0 day’ ‘+%Y-%m-%d’) e...

2015
来自专栏fixzd

redis系列:通过队列案例学习list命令

这一篇文章将讲述Redis中的list类型命令,同样也是通过demo来讲述,其他部分这里就不在赘述了。

3061
来自专栏前端说吧

Gulp安装流程、使用方法及cmd常用命令导览

4266
来自专栏JavaEE

Java实现把图片上传到图片服务器(nginx+vsftp)前言:需求:功能实现:总结:

2.1K3
来自专栏葡萄城控件技术团队

Winform文件下载之WinINet

在C#中,除了webclient我们还可以使用一组WindowsAPI来完成下载任务。这就是Windows Internet,简称 WinINet。本文通过一个...

2218
来自专栏张戈的专栏

分享最近对网站外链跳转页面代码的一些改善

很久之前在博客分享了几篇关于外链跳转的代码或教程。如果没看过的可以先了解下: 分享两种外链跳转方法,可避免权重流失。 分享一个 WordPress 外链跳转...

1K8
来自专栏编程

小白爬虫之爬虫快跑,多进程和多线程

使用多线程时好像在目录切换的问题上存在问题,可以给线程加个锁试试 Hello 大家好!我又来了。 你是不是发现下载图片速度特别慢、难以忍受啊!对于这种问题 一般...

2127
来自专栏aoho求索

基于可靠消息方案的分布式事务(四):接入Lottor服务

在上一篇文章中,通过Lottor Sample介绍了快速体验分布式事务Lottor。本文将会介绍如何将微服务中的生产方和消费方服务接入Lottor。

2741
来自专栏Web项目聚集地

三周学会小程序第五讲:登录的原理和实现

前面我们耗费在环境搭建上面已经很多时间,这一讲开始真正的和小程序功能对接。 登录便是小程序的开始,小程序可以方便的使用微信登录,获取用户的个人信息,这样我们就能...

1222
来自专栏Android开发指南

eclipse遇到的问题

40010

扫码关注云+社区

领取腾讯云代金券