新手教程,主要理清思路,有不足之处请多多指教。
三天前,也就是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学得好,监狱蹲到老。