鱼C论坛

 找回密码
 立即注册
查看: 4576|回复: 23

[技术交流] 23 糗事百科段子爬取

[复制链接]
发表于 2017-6-23 17:29:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 和vvv 于 2017-6-23 17:32 编辑
23 糗事百科段子爬取


经过前面urllib库和正则表达式的学习,我们已经可以利用爬虫来做许多事情了。在本文中,我们将爬取糗事百科的段子。


一、网站分析


(1)打开网站(https://www.qiushibaike.com/,可以看到有很多的段子。我们的目的就是爬取首页热门栏目下的段子。划到最后,你会看到页数。对,我们也要实现翻页的功能。


(2)右键“查看源文件”。“Ctrl+F搜索段子:
图片1.png



可以发现一定的规律。在搜索“<div class="content">”,上下浏览,基本上都是段子。因此,我们就找到了写正则表达式的方法。因为网页源码中出现了换行,于是要使用模式修正符(re.S)。
  1. data = opener.open(url).read().decode('utf-8','ignore')
  2.     pat = '<div class="content">\s*?<span>(.*?)</span>.*?</div>'
  3.     rst = re.compile(pat,re.S).findall(data)
复制代码
代码中的“ignore”的功能是:即使解码utf-8出现错误,也继续操作。



(3)于是,我们就可以编写完整的代码:
  1. #糗事百科
  2. import urllib.request
  3. import re
  4. #浏览器伪装
  5. headers = ("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0")
  6. opener = urllib.request.build_opener()
  7. opener.addheaders = [headers]
  8. urllib.request.install_opener(opener)
  9. data = opener.open(url).read().decode('utf-8','ignore')
  10. pat = '<div class="content">\s*?<span>(.*?)</span>.*?</div>'
  11. rst = re.compile(pat,re.S).findall(data)
  12. print(rst[:5])
复制代码
结果:
  1. ['下班回家,正常行驶中就见一孕妇拉着一女宝直接无视路上往来车辆横冲直撞,都不带左右观察一下路况的!我说这位大姐,您这肚里装一个,手里拉一个的能负点责任么,好歹也是祖国的2朵小花骨朵,总不能还没盛开哪天就给您稀里糊涂的给造没了吧?那可都是祖国的未来啊!', '下午的时候嘴馋,想吃点重口味的(比如凤爪、烤鱿鱼之类),让我爸逛超市的时候给我随便带点。结果他在超市转了半天,最后给我买了一瓶辣椒酱。。。', '半夜起来尿瓶子里面了,刚才扔了垃圾就在厕所拉屎。听到收垃圾的大妈在骂人,我是不是该出去怼她?', '第一次发糗事,留着有用,不割<br/>今天lz拿着手机走在路上,神奇地一脚踩到一块西瓜皮,我的个亲娘诶,差点摔死lz,一屁股坐到了地上,幸亏手机屏幕碎了,挣扎着起来,神奇的手又摁到了西瓜皮,又摔了一次,也是没谁了,换屏幕花了200多,回家擦点药酒,匿了', '初中踢球,球好不容易到我脚边我一踢人倒了,鞋飞了有三米多高,球一丝也没动之后我被笑了一个月。']
复制代码
当然也可以把全部内容输出来,但也只有几十条。因此,实现翻页是必须的。



(4)实现翻页爬取
目前来说,实现翻页就是观察url中的某个字段的变化,找出其与页数之间的关系。


糗事百科第1页:
  1. https://www.qiushibaike.com/
复制代码
第2页:
  1. https://www.qiushibaike.com/8hr/page/2/?s=4994028
复制代码
可以精简:
  1. https://www.qiushibaike.com/8hr/page/2/
复制代码
第3页:
  1. https://www.qiushibaike.com/8hr/page/3/?s=4994032
复制代码
精简后:
  1. https://www.qiushibaike.com/8hr/page/3/
复制代码


于是,我们就很容易地找到了翻页的关键:
  1. https://www.qiushibaike.com/8hr/page/页数/
复制代码
因此,爬取的url可以这样构造:

  1. for k in range(0,页数):
  2.     url = "http://www.qiushibaike.com/8hr/page/"+str(k+1)
复制代码


二、代码完整实现
游客,如果您要查看本帖隐藏内容请回复

由于结果太多,只有前面一部分:
  1. 中午老师打电话来说儿子鞋坏了,不能穿了,我赶紧买了一双新的送去幼儿园<br/>进教室的时候我茫然了,一堆穿着一样校服的小萝卜头谁是我儿子???<br/>我看着这些孩子:这个不是,那个也不是,………<br/>彻底蒙圈的我忍不住大声:儿子,出来!<br/>身旁一双小手轻轻的扯我衣角:妈妈,你不认识我了?我在这里好久了!
  2. ----------------
  3. 记得好多年前刚开始玩QQ,不知道很多英文缩写什么意思,记得一个女性网友的男朋友(后来才知道)给我发来SB,当时不明白什么意思,思虑良久开始回复,这个回复至今都让自己佩服:这是你的英文名缩写吗?
  4. ----------------
  5. 今天和儿子玩卖菜游戏,拿了一个篮子,坐在小板凳上。叫着:“卖菜喽,卖菜喽。”我问:“茄子多少钱?”“茄子两块钱。”黄瓜呢?黄瓜两块钱,豆子呢?豆子一块钱。辣椒一块钱。给我拿两个黄瓜,一个茄子,二个豆子,二个辣椒总共要多少钱?儿子沉默了一下,掰着手指。说,爸爸,你走开,我不想卖给你。
  6. ----------------
  7. 老姐脾气不好,经常欺负姐夫。有时姐夫跟老爸吐槽,老爸总是语重心长地拍着姐夫肩膀:女婿啊,虽然她是我女儿,但是毕竟你老婆,你们夫妻的事,我不好管的!<br/>姐夫吐槽失败,继续受老姐气~<br/>我偷偷问老爸:你真不管他们的事?<br/>老爸微笑:你姐没吃亏,我就不管了……
  8. ----------------
  9. 大学的时候。<br/><br/>宿舍在二楼,很大,有二十多张高低铺,还带有卫生间。<br/><br/>暑假我打算做家教,所以没回老家。空荡荡的宿舍闷热难当。<br/><br/>夜里没法入睡,只有一遍又一遍的去冲凉,在享受沐浴带来的畅快时,心里忽然有了个奇异的想法。<br/><br/>假期没有宿管,我用水泥砖头砌了个二十公分高的门槛,堵住了地漏,把淋浴的喷头牵到洗手间外面,让水哗哗的流到地上,如一汪汩汩而流的清泉 ,八爪鱼伸触角一般迅速流向每个角落。<br/><br/>水越聚越多,渐渐没过地面,齐着门槛了,风扇一吹,水波粼粼,室内凉气拂面,热气顿减。<br/><br/>关了水龙头,我既害怕又...
  10. ----------------
  11. 老妹那天和她闺蜜比年龄,闺蜜比她小一个多月,老妹反驳:“你其实比我大,因为我是早产儿,我早产了3个月……”
  12. ----------------
  13. 和男友刚谈恋爱时,软磨硬泡叫他说说以前的恋爱经历,每次他都搪塞敷衍,终于有一次耐不住我磨,开始给我讲……<br/>他说::“我的前任……”说着,竟然伸出舌头舔了舔嘴唇<br/>我上去就是一巴掌!
  14. ----------------
  15. 楼主左腿受伤后,医生叮嘱楼主每天要抬抬腿、勾勾脚,拉筋、锻炼肌肉……<br/>每次楼主疼的不想锻炼了,老妈就端来零食、水果各种‘鼓励’……<br/>还别说,零食的作用还真大。还没半个月,只要老妈一给楼主拿零食……我家大金毛就往地上一躺,不停的蹬着左腿、哀嚎着向老妈要零食……
  16. ----------------
  17. 去人工冲浪游乐场玩了回来剧烈胃痛被送急诊,诊断出误食脏东西引发急性胃炎。住院一周陆续迎来围观小伙伴~每每有人问到我病因时,我都只能默默的说:“说来你可能不信,我大概是去冲浪水喝多了……”
  18. ----------------
  19. 老姐第一年去外地上学,钱总不够花。老妈打了几次钱后,问她买什么花销最大,老姐说买卫生纸。<br/>把我老妈惊的,当天就请假跑去我姐的学校。到了学校才知道,我姐大大咧咧的性格,买的卫生纸就挂在卫生间,全宿舍女孩用……
  20. ----------------
  21. 有个特别扣的男友,我生日,什么礼物都没有,叫我出去,夜宵都不舍得请我吃,送我回去说太远,然后我说我自己打车回去,他说好,车费也没有帮我付,我在想,要不要分手,过了绝对分。我都不好意思实名了,还是匿了吧!唉!
  22. ----------------
  23. 听朋友讲的,大妈们排练广场舞,占用了篮球场。一占就是十几天,打球的人愤怒了,不肯让出场地。大妈发动群攻,多人扛不住撤退了,只有一个壮汉硬气的说:有老子在这里,谁来都没用!!<br/>一米九的壮汉,气势汹汹,骂他不走,推他不动。大妈们搞不定他,最后叫来一个以前的舞友,是个老太太。眨眼间壮汉就被他娘连人带球给拎回家了。。
  24. ----------------
  25. 参加一哥们婚礼,去的有些晚,都开席了,被安排个几个大叔一桌,几个大叔一边喝酒一边聊天,我是真饿了,闷头开吃,吃的正嗨,就听一个大叔对我说“小伙子,你能不能慢点吃!给我们留点下酒菜行不?”我。。。。。。
  26. ----------------
  27. 单位一男同事说红包里没钱了,让我帮他叫一份20元的外卖他给我现金,我立刻就答应了,然后他掏出了19块钱的零钱递给我说:“上上个月有一次我和你一起做公交车,当时我帮你投了一块钱的币。”<br/>我:……额……
  28. ----------------
  29. 早上刚睡醒,就听见侄儿大叫大喊 : 奶奶,快来看!姑姑学坏了,姑姑学抽烟了!<br/>我就觉得纳闷了,我啥时候抽烟了?赶紧从房里跑出来!<br/>卧槽,原在我包包里的一盒杜蕾斯,现在正被侄儿高高举在手里,一脸得意的正向我妈邀功。。。
  30. ----------------
  31. 张大哥在街上卖菜。吆喝着:自己家种的,无公害的绿色蔬菜。围着买的人还不少。<br/>我跟他打招呼:哥,小力(他儿子)是不是又在家打农药(王者荣耀)呢。<br/>张大哥乐呵呵的回答:是啊,今天放假没事,打了一天了。<br/>人们一听,放下手里的菜,“呼啦”都散了。
  32. ----------------
  33. 今天看到住六楼的柴郡主戴着墨镜一脸忧郁的坐在楼下,我好奇心起,就去问了:柴郡主咋了这是?<br/>我瞎了!<br/>啥时候的事啊?前几天还好好的<br/>我暗恋对面五楼一男孩三年,天天拿望远镜偷看他洗澡,直到昨天我买了一高倍高清望远镜,我才发现原来他是个女孩……
  34. ----------------
  35. 初中第一次来好事儿,弄得我特别尴尬,手忙脚乱的……偷偷的跑进厕所,感觉自己手也在抖,脸都红了……,贴反了,粘住了,卧 槽~,疼 死 老 娘 了~
  36. ----------------
  37. 刚出去溜娃,一小孩(两岁左右)哭着到处找妈妈!问他话也不会说!我家两宝陪着他,牵着他的手,带着找到他那跳广场舞跳的嗨妈妈!这样带孩子真是放心!孩子被拐卖了都不知道!<br/>我家两宝宝真赞!有爱!
  38. ----------------
  39. 和老婆逛街,她给我买的裤子全是短裤。给她自己买的全是长裤。<br/>我很感动,觉得老婆很懂我,她知道我怕热。<br/>要不是在买单时,听到老婆嘀咕:“老公全是短裤,这下蚊子应该不会咬我了吧……”我会感动一辈子的!
复制代码


总的来说,本文利用的就是urllib库和正则表达式的基础知识,并不算太难,但却很实用。


评分

参与人数 1鱼币 +7 收起 理由
小甲鱼 + 7 支持楼主!

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-6-24 13:00:20 | 显示全部楼层
看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-7-24 21:36:18 | 显示全部楼层
好帖子顶起啦!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-16 13:51:28 | 显示全部楼层
支持楼主
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-16 15:17:53 | 显示全部楼层
111
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-9-16 15:46:16 | 显示全部楼层
11
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-9-18 16:00:04 | 显示全部楼层
不错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-9-19 18:18:10 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-9-19 18:32:59 | 显示全部楼层
看看~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-9-26 22:59:49 | 显示全部楼层

看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-9-27 10:56:11 | 显示全部楼层
感谢老铁分享
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-28 16:47:18 | 显示全部楼层
努力学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-28 21:43:45 | 显示全部楼层
看看~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-10-11 19:05:22 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-10-12 15:04:41 | 显示全部楼层
看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-11-9 21:53:08 | 显示全部楼层
好东西
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-10 11:11:58 | 显示全部楼层
学习!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-11-17 13:05:40 | 显示全部楼层
111111111111111111111
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-23 22:12:42 | 显示全部楼层
学习学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-29 13:18:36 | 显示全部楼层
老规矩,先回后下!!!!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 16:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表