最前
近期根据助教的推荐,在莫烦Python上学习了Python爬虫的新操作,主要是多进程和多线程。本次结合课程作业,体验了一把多进程的速度。
要求
输入一座城市的名称,获取其百度百科的基本介绍。如输入北京,访问 https://baike.baidu.com/item/北京 ,获得如下表格数据:
将其中的数据提取出来,写入一个.txt文本,如下图所示:
基本作业思路及代码
使用requests库访问页面,比原先使用urllib库更加方便,不再需要解决中文的问题。然后再利用beautifulsoup库进行提取,并写入文件。
【因微信公众号显示代码效果不佳,请点击原文访问】
尝试:获取中国所有县级以上城市的信息
1. 获取中国县级以上城市列表
经过多个来源尝试,最终从民政部官网上找到一份
2018年1月中华人民共和国县以上行政区划代码,利用爬虫进行爬取,整合省份信息,代码如下:
【因微信公众号显示代码效果不佳,请点击原文访问】
大致一共获取到了3200多座县级以上城市。
2.1 尝试简单循环获取所有县级以上城市的百科信息
第一次没有使用多进程,简单利用循环进行获取,结果花了半个小时才获取到所有城市的信息,基本没有丢失城市,代码如下:
【因微信公众号显示代码效果不佳,请点击原文访问】
2.2 尝试多进程循环获取所有县级以上城市的百科信息
由于简单循环实在太慢,结合新学的多进程技术,尝试修改了新代码,由于新手原因,折腾了很久都没成功,最后发现pool.map传入的参数本身需要的就是一个列表,才解决了问题,也是没有认真看视频教程好好记笔记的问题,代码如下:
【因微信公众号显示代码效果不佳,请点击原文访问】
果然多进程没有让我失望,仅用3分钟就完成了3200多座城市的信息获取,从速度上完胜,但遗憾的是,我发现有几座城市的返回信息为None,暂未明白出错的原因,如有大佬路过,请赐教,非常感谢!
最后
我学习Python的GitHub主页:https://github.com/busbyjrj/Python-Learning
本次学习的代码(GitHub):https://github.com/busbyjrj/Python-Learning/tree/master/multiprocessing/city_list
本爬虫仅学习使用,请控制爬取的速度,以免影响其他用户正常使用百度,谢谢。
我的多进程代码还有问题,可能会丢失几座城市的信息,暂未查明原因,如有大佬路过,请赐教,非常感谢!
我的代码虽然例子中只用于城市信息,但实测对其他百度词条也可以使用,但也可能存在一个Bug需要修正,也请赐教,谢谢!
最近更新时间:2018年4月14日
领取专属 10元无门槛券
私享最新 技术干货