python 爬虫 新手如何优雅地爬取一个中型网站的内容

新手教程,主要理清思路,有不足之处请多多指教。

三天前,也就是2021年1月18日,第一次使用python,上手很快。

 

背景介绍:

一直使用一个网站的api提供的资源,速度很慢,一次查询最多要10多秒。

我很担心有一天这个网站挂了,所以先全部保存到本地再说吧。

结果:

从来没接触过python的我,用三天时间,爬取了十几万条有效记录。

第一天,安装python及mongo

第二天,分析网页并编写模块

第三天,测试功能,并最终得到数据

 

第一天,安装python及mongo

关于python,像这种任务我知道肯定要花很长时间,所以我就上docker hub上面找了一个官方镜像,直接pull到服务器上面了。

测试跑了一下,没太大问题,就是库之类的要自己安装,所以不要alpine版本,因为有些依赖没有。

找了一个据说最好的国产python的IDE   novalIDE,折腾了一下,能跑,就是插件库啥的都装不上,弃用。直接上note++。

数据存储方面,保存在txt中肯定不合适。所以要先建一个数据库,有现成的mysql,但是mongo更合适。顺带写了一个连接用的库,读取配置。

 

第二天,到网站上去下载了两个页面回来,一个目录页,一个详情页。目录页列出了所有的资源详情链接,和详情页上的信息一样用xpath简单获取。

首先获取所有目录页url,因为有分页,所以直接按分页规则生成url,保存到mongo中。

然后根据mongo中的url信息来下载资源,成功的标记200,将获取到的详情页url再记录到另一个集合中。

再根据详情url下载详情页,将结果保存到数据库中。

获取网页的教程太多,这里不写了,唯一想说的就是如何优雅?

因为不清楚用抓取的速度,所以拿谷歌主页做了下测试,2000+就被封了,直接返回429。百度倒是没有限制。所以一定要控制好连接数及并发,单线程无并发的请无视我。

 

第三天,测试了几个页面没有问题后,就把任务扔到服务器上面跑,跑了两个小时才把目录全抓下来,共计十几万条。

 

个人感受,python真的上手很快,各种教程也多,随手就能Ctrl + C 再粘贴。

新手建议:

想要提速,多线程或多进程或协程。

限制并发,避免突然给服务器带来大流量,数据没抓几条就被把服务器挂了。

建议并发10以下,拿百度做测试,并发大于10,没有任何提速效果,只会马上得到429。

数据一定要保存在数据库中,不用二次加工,提取出方便。

有条件的可以放在服务器上面跑,没条件的就别关电脑。

不要获取有关个人和企业的情报,不然就python学得好,监狱蹲到老。

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值