首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python 多进程爬虫初体验

最前

近期根据助教的推荐,在莫烦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日

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180414G0IPGU00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券