python爬取去哪网数据_初识Python爬虫-爬取无需登录的分页数据

一、背景

最近比较有时间,于是学习了一下python,并尝试爬取了自己比较感兴趣的几个网站,如纵横中文小说网、千图网以及GIF动态图网站,成功爬取这几个网站的数据后,在这里总结下爬取此类网站的一些固定套路以及遇到的一些问题

二、项目架构

本人使用的Python环境时python3.8,爬虫主要依赖的是scrapy框架以及requests库,这些第三库可以使用pip工具安装,如果安装速度很慢,可以更换下载源,操作方式请自行百度或询问我,pip直接安装scrapy时可能出现安装失败的情况,如果安装失败可以参考scrapy安装进行安装

三、案例说明

学习了scrapy框架后,我第一个练手的项目就是纵横中文网,这里我的目的是爬取指定小说的全部内容,刚开始做的时候比较low,数据全部保存在一个txt文件中。项目代码地址:纵横中文网爬虫项目

使用scrapy框架创建一个爬虫项目非常的简单:在命令窗口执行命令 scrapy startproject 你的项目名 即可

b4202d48be57f8c32e81d81cea4b73b2.png


scrapy创建项目

这时查看对应的目录下就会多出一个名为demo的项目,我们用vscode打开此项目查看下项目结构

28970b3693eb7bb06e68efbfbf2de143.png


demo项目的结构

这就是一个基本版的scrapy项目框架,其中items.py是用来书写保存爬虫数据的对象,pipelines.py是用来编写处理爬取数据的位置,settings.py使用来更改环境配置的位置,而spiders文件夹下面用来编写具体的爬虫操作的python对象

下面让我们以纵横中文网的爬虫案例讲解下如何使用scrapy框架

第一步:编写item

3d2b9d02145d7422337ad2dee65be23b.png


编写item

其实就是定义要爬取的内容

第二步:编写爬虫文件,在spiders文件夹下创建对应的爬虫文件

23d7ac67f6e1b9a94af2f22c17779bb2.png


爬虫文件

重点来了,创建好这个文件后,文件名和其中的爬虫类名不重要,重要的是爬虫的类的name字段的要和文件名保持一致,

其次是allowed_domains设置为你希望爬取的网站的域名

start_urls存储的是开始爬虫的第一个地址

最重要的是parse函数,这个函数是爬虫开始后获取到响应数据第一个调用的函数,我们在这个函数里编写解析响应数据的代码

首先我们查看下要爬取的页面:

4755eb9772496a65d337b1257577e22d.png


目标网站

可以看到这个页面上直接展示了所有的章节数据,我们要做的第一步就是找到对应的详情页的链接地址,这里我采用的xpath方式

'//ul[@class="chapter-list clearfix"]/li/a/@href',获取到对应的链接地址列表后,我们采用循环的方式异步调用

7e1619e4a193623d4a2bdcc3259f3502.png

这个地方创建的item就是需要保存的数据对象,通过yield请求详情页的地址并指定回调函数为parseText,传递item数据

接下来就是在parseText函数中处理详情页的数据,解析数据的方式也是xpath

087de9dfc0a95fd585779a4532619a2d.png

然后将对应数据存入item对象;至此数据解析完毕

第三步:处理解析到的爬虫数据

在pipelines.py中编写对应的代码,其实就是处理获取到的item数据

37c3ba5bb48dcac268b4f42cae075858.png

这个类中默认有一个方法process_item方法处理解析到的数据,但爬取小说数据时,我们不能直接在这个函数里进行处理,因为小说章节都是由顺序的,而scrapy框架是异步编程,这样就会导致写入文件的顺序变乱,为了解决这个问题,我们需要重写open_spider和close_spider方法,在close_spider中完成文件的写入操作,这个应该比较容易理解,就相当于我们存储了多次item,process_item在每次获取到item时都会调用,而open_spider和close_spider只会在连接和关闭时调用一次,这样就可以自行处理获取到的数据

第四步:配置setttings.py

在这个文件中配置对应的环境数据,如浏览器请求参数和爬虫处理的管道数等

b49167d9ea4a921f9ad5e1c86467b6fa.png

至此,爬虫项目编写完成。

既然爬取这样的小说网站可以,那么我们也可以参照这个方式爬取图片网站的数据,这里我选择的千图网的gif动图数据

项目代码地址:千图网爬虫

核心的爬虫代码如下所示:

c600ade220bed01762f5b97baa1a6f12.png


爬取千图网的数据

7f35573fcd62b93a2d250ed0800a7f36.png
b1b66ffeaee0d8439ed1eea8ba30dd62.png


爬虫效果

5be5aa60b2680b4727435d3c3a24efab.png

完成这个项目后我又找了福利汇的网站进行爬取

项目地址福利汇

在这个项目里实现了保存数据至数据库,如下图所示

8d101b2e237d3c2417810b2c7e8ef1f9.png
b656ef582f08c20974524f691c0ea528.png


settings配置处理方式

4c7c55fd53df8905df2eec08ea03e70d.png


爬虫效果

fc7c7d2e86776b8bf727a112ec213102.png


爬虫效果

这些数据量挺大的,全部下载要比较久的时间,所以我就直接存在数据库了

针对上面三个练手项目,我们可以轻易的掌握使用scrapy这个框架进行爬虫,我作为一个python的初学者,编写一个这样的项目也只需要一个小时以内而已。此外我还编写了一个爬取买家秀的项目,欢迎大家访问我的码云主页查看。

使用这个框架的基本套路是:

编写item,定义需要的字段,编写爬虫文件,针对分页的数据,就按照如下的套路,在parse函数中获取详情的链接,以循环的方式请求详情页的数据解析,循环结束后,继续请求下一页的数据,在pipelines文件中编写处理爬虫数据,是不是感觉很简单呢,今日的分享到此为止,欢迎大家有任何问题加我微信交流技术,大家一起进步。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值