V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  practicer  ›  全部回复第 4 页 / 共 8 页
回复总数  149
1  2  3  4  5  6  7  8  
2016-07-17 19:29:49 +08:00
回复了 MyFaith 创建的主题 Python 有没有易懂的 Python 多线程爬虫代码?
最近一个月一直在理清爬虫多任务化的问题,结论是在 python 爬虫领域,实现多任务的正确姿势是单线程异步 IO 模型。
在写出同时能爬取多个链接的代码前,楼主必须先理解这个模型的原理:单线程异步 IO 模型的基础---- [事件循环+回调函数] 模型。

先说事件循环,它是一个系统,这个系统内由以下函数组成:
1.连接服务器的函数,
2.发送 GET 请求到服务器的函数,
3.接收并读取服务器响应的函数,
4.最后是解析响应内容用来获取数据的函数;

可以看到这几个函数基本就是我们写普通爬虫代码的一个流程:函数与函数之间都需要等待,也就是说只有函数 1 返回结果后才能执行函数 2 ,函数 2 返回结果后才能执行函数 3 。。。

那么,用事件循环来控制这些函数和写普通爬虫代码有什么不同呢?

答案就是,事件循环可以由程序员手动控制多个爬虫(任务),而不是像多线程那般把分配权交给操作系统随机分配。
当一号爬虫(任务)在执行函数 1 时,一执行完就立即返回(意思就是不等待最后获取值),并将控制权交还给事件循环,交给它之后,开始执行二号爬虫(任务);二号爬虫开始执行函数 1 ,同样,一执行完就立即返回,并将控制权交给事件循环;交给它之后,开始执行三号爬虫(任务),三号爬虫开始执行函数 1 ,同样,一执行完就立即返回。。。以此类推。。

问题来了,当一号爬虫(任务)的函数 1 处理完并返回值后该如何处理这个值?这个时候,回调函数就能派上用场了,回调函数起到通知的作用,告知循环系统在咱们这一号爬虫(任务)有个函数处理完了,要用它返回的结果来执行函数 2 。循环机制听到通知后,便开始执行一号爬虫(任务)的函数 2 。执行函数 2 和执行函数 1 的机制完全相同,也是一执行完就返回,并立即将分配权交给循环机制,这样让循环机制同时地、不停地处理二号、三号、四号。。。爬虫(任务)。

最后,直到一号爬虫获取最终想要爬取的数据,同时,二号、三号、四号。。。爬虫仍在同时工作,没有停止,然后二号爬虫也执行完了所有函数并得到数据,然后是三号、四号。。。

以上就是基于事件循环+回调函数的异步 IO 爬虫模型,虽然是单线程但是效率非常高,像 twisted , tornado 这些流行的异步 IO 库基本都是基于这个模型。但是这种模型也有很多弊端,最令人不爽的两个地方是, 1.调试起来非常恼火,根本看不到 traceback 。 2.一旦事件循环内的函数数量变多,代码逻辑也变的复杂。

So.python 3.4 在基于事件循环+回调函数模型的基础上利用生成器的特性,搞了一套改良版的异步 IO 模型,完美解决了以上两个问题。在 python3.5 进一步迭代,推出了 asyncio 库,再次优化了 python 异步 IO 性能。

目前我会写简单的基于事件循环+回调函数的异步 IO 爬虫,仍在理清基于生成器的异步 IO 模型,如果楼主要深入了解,请参考: http://aosabook.org/en/500L/a-web-crawler-with-asyncio-coroutines.html ( python 之父写的异步爬虫教程)
2016-07-16 18:39:27 +08:00
回复了 wemore 创建的主题 程序员 大学生,感觉前途迷茫。。
这是缺少交流的表现,多和志同道合的人交流经验吧
2016-07-14 17:40:45 +08:00
回复了 qiuqiuqiu 创建的主题 酷工作 [广州 越秀] Python 急召!
我以前在 100 号待过耶,是中科院大院
看好你,不用下厨房的确不会做饭
这个 git 的作者有写,用的 SB Admin 2 Bootstrap Template
http://startbootstrap.com/template-overviews/sb-admin-2/
类似的 bootstrap Admin 还有很多选择,我用过的有 AdminLTE ( almsaeedstudio.com

其它 js 图表框架有很多:
轻框架有: chartjs.orghighcharts.com
重框架: d3js.org
国内有百度的: echarts.baidu.com
2016-07-12 10:35:15 +08:00
回复了 omg21 创建的主题 Python soup 对象怎么判断有没有内容?
bs 解析返回空值的原因有很多,不提供详细信息不好找原因,最好把目标网址发上来才好分析
小伙子,有出息
2016-07-08 16:02:35 +08:00
回复了 Ya 创建的主题 音乐 有什么好听的纯音乐?
来听电子音乐吧,从温柔一点的开始: http://www.di.fm/chillstep
2016-07-08 11:49:06 +08:00
回复了 namco1992 创建的主题 Python 拉勾网 python 相关职位爬取以及分析展示,希望各位批评指正
拉钩的请求速度怎么样?楼主有统计爬虫的速度嘛?
2016-07-07 16:54:53 +08:00
回复了 Mac 创建的主题 PHP 一条正则能过滤两个条件么?
A{3}\d?(?=\/)
补一个测试正则的地址: http://rubular.com/,比 regexr.com
2016-07-07 15:48:21 +08:00
回复了 liangmishi 创建的主题 Python 喜欢写爬虫,感觉好难找工作
坐标广州,这边招爬虫的一是电商公司,二是外包做网站的公司,三是金融行业
2016-07-07 12:40:43 +08:00
回复了 hackwjfz 创建的主题 问与答 四五百块左右的耳机求推荐
高斯( KOSS ) PORTA PRO White 头戴式便携超重低音耳机: http://item.jd.com/2247792.html
这款耳机适合听强调节奏的音乐,我拿来听 trance , dubstep 效果非常好
2016-07-06 21:22:30 +08:00
回复了 liangmishi 创建的主题 Python 喜欢写爬虫,感觉好难找工作
我写爬虫多一点,打算用它来找工作,但不是因为兴趣,只因用它作为转行的切入点。相比 web ,爬虫有这么几个优点:技能要求稍微低一点、竞争低( PHP,JAVA...)、和我现岗位属于一个行业(数据分析)。楼主既然因为兴趣做爬虫,应该比我用心多了,共勉吧。加微信交流 nickysher
2016-07-05 17:13:38 +08:00
回复了 c0878 创建的主题 职场话题 16 届高中毕业选专业 IT 相关哪个比较好些
不管什么专业都一样,反正最后还是靠自学,所以挑一个好一点的学校(文凭)更实在,其次是城市。
2016-07-04 21:44:54 +08:00
回复了 evttxs 创建的主题 Python 求推荐 python 3 教材
Python 核心编程(第 3 版): https://book.douban.com/subject/26801374/
2016-07-04 13:41:57 +08:00
回复了 xingzhela 创建的主题 程序员 程序员写技术博客的思路
从解决某个技术问题开始写。
一定要展现整个思考过程:遇到了什么坑、预估问题出在哪个地方、引用了哪些资料、亲自解决问题、难点在哪里、总结。
没有遇到问题怎么办? 1.自己多做项目 2.拓展新技能点 3.参与社区交流看看别人遇到了哪些问题
博客的形式不能像微博、说说那种几行文字概括,要有段落,结构,要有背景说明,写作目的,方法论(引用)和总结,所贴代码要详细,方便以后自己查看。
2016-06-30 09:14:34 +08:00
回复了 v2day 创建的主题 分享发现 天涯论坛副主编金波不幸去世:疑因脑溢血
看完这个新闻后我马上请了假回家休息去了,现在就在地铁上
2016-06-29 17:06:07 +08:00
回复了 fasling 创建的主题 程序员 有插件可以让 Chrome 显示完整的 url 么, http/https 那部分?
今年给现公司做移动数据跟踪方案选型的时候有调研过 growingIO ,很看好企业级数据行业,可惜我不在北京,哎。。
1  2  3  4  5  6  7  8  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3899 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 48ms · UTC 00:55 · PVG 08:55 · LAX 16:55 · JFK 19:55
Developed with CodeLauncher
♥ Do have faith in what you're doing.