分享"一只爬虫"

自接触爬虫以来,不管你有意识还是无意识都会不断的接触到这些概念:[多线程]、[多进程]、[协程]、[异步]...

本文分享一种对异步I/O支持操作的异步库asyncio的操作方法。

asyncio 是一种使用单线程、单个进程的方式切换

1. 主题:抓取开智读物书籍标题

2017年需要多多读书,立下的小目标是读25本非虚构类外国经典读物,时长大于100小时,每本书至少解决一个比较大的困惑。

这批书单比较有参考意义。

1483881852969.png

2. 环境及库

  • python3.5
  • asyncio
  • aiohttp
  • lxml
  • xpath

3.实践

1483881971121.png

只提取上文提到的书籍名称,其他类似,无非是不断的熟悉xpath或者其他解析方法的使用。

  • 网址
list_url = ["https://www.douban.com/doulist/41691053/?start={}&sort=seq&sub_type=4".format(number) for number in range(0, 125, 25)]
  • 获取网页源代码
async def fetch(url):
    async with aiohttp.ClientSession() as session:
        async with session.get(url) as html:
            response = await html.text(encoding="utf-8")
            return response
  • 解析网页源代码
async def parser(url):
    response = await fetch(url)
    print(response)
    dom = etree.HTML(response)
    selector = dom.xpath('//div[starts-with(@id,"item")]')
    for one in selector:
        print(one.xpath('div//div[@class="title"]/a/text()')[0].strip("\n").strip())
  • 事件循环
// 给一个函数添加了async关键字,就会把它变成一个异步函数
// 每个线程有一个事件循环,主线程调用asyncio.get_event_loop时会创建事件循环

// 把异步的任务丢给这个循环的run_until_complete方法,事件循环会安排协同程序的执行


loop = asyncio.get_event_loop()
tasks = [parser(url) for url in list_url]
loop.run_until_complete(asyncio.gather(*tasks))
  • 结果
失控
大自然如何工作
找工作
结构洞
创新的扩散
六度分隔
网络、群体与市场
链接
A New Kind of Science
怎样解题
统计数字会撒谎
啊哈,灵机一动
什么是数学
普林斯顿数学指南(第一卷)
大宇之形
黑客与画家
程序员的思维修炼
信息简史
软件随想录
程序员修炼之道
人月神话
"笨办法"学Python
追忆
唐宋词十七讲
马奇论管理
追寻记忆的痕迹
适应性思维
简捷启发式
笛卡尔的错误
Self Comes to Mind
社会认同过程
社会表征
看见成长的自己
成功,动机与目标
幸福的真意
创造力
失败的逻辑
为什么学生不喜欢上学?
象与骑象人
人格解码
出类拔萃的IQ
我们赖以生存的隐喻
态度改变与社会影响
持续的幸福
心灵导论
对权威的服从
亲密关系(第5版)
思维与决策(第四版)
复杂
隐秩序
风格的要素
文章作法
The Sense of Style
翻译乃大道
这就是纽约
埃科谈文学
一位年轻小说家的自白
修辞认识
《玩具屋》九讲
红玫瑰与白玫瑰
毛姆短篇小说精选集
青年王阳明:行动中的儒家思想(杜维明作品系列)
阳明学述要
王阳明大传:知行合一的心学智慧(全三册)
宗教与神话
如何理解中国人
中国人的心理
人情与面子
改变
行动科学
我生活的种种模式
致青年学者
Letters to a Young Scientist
反叛的科学家
论对话
哥德尔、艾舍尔、巴赫
经验的疆界
创新算法
莎士比亚、牛顿和贝多芬
基地
物种起源
自私的基因
The Extended Phenotype
地球上最伟大的表演
Darwin's Dangerous Idea: Evolution and the Meanings of Life
心灵种种
Intuition Pumps and Other Tools for Thinking
熊猫的拇指
生命的壮阔
魔鬼出没的世界
超越智商
机器人叛乱
这才是心理学
思考,快与慢
语言本能
心智探奇
人性中的善良天使
奖励的惩罚
无条件养育
进化心理学
穷查理宝典-查理.芒格的智慧箴言录-增订本
卓有成效的管理者
形式综合论
设计心理学
创新者的窘境(全新修订版)
技术与文明
奇特的一生
如何把事情做到最好
追时间的人

完:

新年愿景:

  • 学会js,scala
  • 读更多的书:技术 + 人文
  • 寻找机会展示:PPT

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏顶级程序员

你可能不信,我看pornhub是为了拯救大熊猫和乳腺癌,还有学python

源 / 顶级程序员 文 / 奶糖 China NO. 1! 这一次,我们伟大祖国再次拿下了一个世界第一。 我们成为全球最大色情网站Pornhub,在线观...

5.7K70
来自专栏大数据文摘

从如何跳橡皮筋,到如何优雅地kiss,老铁们到底在谷歌什么?

15120
来自专栏程序人生

软件随想录

(一) 软件领域有个叫格林斯潘的哥们,估计大家都不怎么熟悉,但下面这句话写过代码可能没几个不知道: Any sufficiently complicated C...

36590
来自专栏腾讯云安全的专栏

有 ai,更有年味——来自腾讯云安全的一封祝福信件

18030
来自专栏知晓程序

我要脱单!在微信这样表白,谁都不会拒绝你

当你发自内心地喜欢 ta,从眼神笑意,到肢体语言,浑身上下每一个细胞,无一不散发着爱的讯息,想藏也藏不住。可是由于种种原因,生活中的你我,往往爱在心头口难开。

14300
来自专栏程序人生

red,不红不专,但性感

red lang 前两天发布 0.6.3 了。osx GUI 终于得到了支持。 这事,连 hacker news 上都没掀出多少波澜。帖子在近二百多顶后,就渐渐...

378120
来自专栏前端大白专栏

payload 是什么意思

23860
来自专栏华章科技

第一代程序员王小波

喜欢读书的人,对王小波都不陌生,他是中国最富创造性的作家之一,他是中国近半世纪的苦难和荒谬所结晶出来的天才,他英年早逝。他的作品对我们生活中所有的荒谬和苦难作出...

12420
来自专栏数据和云

图说Oracle园区及历史

在旧金山时间明天早八点开始,Oracle 2015 OOW的大会就将拉开帷幕,虽然Larry的开场演讲要等到下午5点,但是之前已经有大量的User Group(...

34760
来自专栏吉浦迅科技

请原谅我是个这么努力的单身狗,单线程已经无法表达我的爱!

“ 生活不止眼前的苟且, 还有套路与反套路的情人节! ” 今天是2017年的情人节, 在这样一场年度虐狗大会中, 如果还用鲜花巧克力的套路, 那就实在太无趣...

360100

扫码关注云+社区

领取腾讯云代金券