巧用抓包 ― 爬遍SCU玻璃杯事件所有神回复

最近我川又搞事情了

然后info又炸了,,,

据说最开始是这样的:
玻璃杯1.png

然后是这样的:

玻璃杯2.png

然后一发不可收拾了,校园各处不约而同响起了摔杯的声音,微信微博朋友圈qq空间,特么也全是玻璃碎片啊!!!


玻璃杯3.png

玻璃杯4.png
玻璃杯5.png

摔碎一个玻璃杯炸出我川多少优秀段子手!
据说后面还引来了武大、浙大等校观光团。

如此空前盛况怎能错过,宝宝决定搞点事情。

怎么可能又摔杯!!

(话说我的杯子是塑料的好吧,还PET呢)

4390568406.png
不胡扯了,上Info爬取玻璃杯事件100条热门神评论,嗯先立个flag。

</br>

一、过程

搜了一下网页版的scuinfo

scuinfo.jpg
首先初步观察分析

点击一看也是瀑布流,需要下拉刷新。
再看一下源码,一下就懵了,什么关键数据也没有呀,用pycharm获取一样。可以看出采用的javascript和jquery,有点难办了。

pageSource1.jpg
pageSource2 .png

最先想到是用selenium定位然后截屏什么的,结果连续报错:无法定位到元素。
都快洗洗睡了,最后想到之前在知乎上有人用的抓包,回去翻了相关帖子,峰回路转。
这里感谢这个教程。


爬虫由入门到放弃.jpg

</br>
打开开发者工具,切换至network抓包。

这里是我们要到包

点开看到每个评论真实URL地址,估计每一个评论皆有个特殊的id

将URL粘贴至浏览器

原来所有信息都在这个包里面了!!!
找到所有id构造URL,requests获取即可。
下拉找到原帖id=131599

玻璃杯原帖.jpg
接着就是获取最新帖子id。

特么我在这又兜圈了!因为帖子是随时更新的,想着可以一试selenium模拟浏览器。结果又定位失败,搞了好久决定先搁置。
</br>

先去获取和处理数据

仔细观察数据,发现string格式的,里面是一个dict,dict里面data又是一个dict。
如何将string格式转变为dict
百度搜到一靠谱答案。测试可用。

将string格式转为dict

后面才发现这一堆原来是json格式的(回去翻基础,难怪如此熟悉),又将eval()换成json.loads()。基础不牢地动山摇啊。。。

提取重要信息,再从comment中提取“玻璃杯事件”评论,决定匹配正则最快。
可“如何在中文中匹配中文关键词”?

之前都是在标签中提取数据,情况少见真的把我难住了,编码问题让人头痛。
滚去睡觉,第二天查资料,统统的不行啊。

静下心想了想,pycharm获取的数据本来就是Unicode格式的,只要源码先不encode为utf-8,将中文关键词在IDE中转为Unicode格式,不就可以匹配的上了么?
事实如此!
正则的四个关键词:
“玻璃”、“杯”、“摔”、“观光”

    pattern=re.compile(u'\u73bb\u7483|\u676f|\u6454|\u89c2\u5149',re.S)
    items=re.search(pattern,body)

我以为接下来就是美滋滋地等待一堆数据,结果又报错:


Error1.jpg

这个list什么鬼?于是回去查看。原来data是空的list,估计是已经删除的评论,所以为None。再试了下不存在的id,比如id=137945,同样如此。

listError.png

改了下代码,可以运行。

 if not isinstance(data, list):
         xxx(内容)
 else:
    print 'None'

</br>

返回获取最新帖子id

曾经想过最后打出10个或以上的None然后break结束,但发现代码无法实现,只能手动结束,心想这算什么程序,不行。

很无聊又到info上看帖去了(MDZZ。。。)
后来再打开network发呆了下,想到了。
既然打开一页可以抓包,那么刷新看新评论肯定也可以呀。

每次刷新页面便会请求
URL=“http://www.scuinfo.com/api/posts?pageSize=15”,验证了下15就是一页总评论数,这么简单,为什么之前没想到啊啊!
(简直想表演胸口碎大石)
</br>

筛选热门100条神回复

先把每一项的发言、点赞、评论保存入一个list中,然后多个list放到一个大的list中(暂且叫container)。

可提取的时候麻烦了,我想按照点赞数排列container中所有的list,怎么办呀。

试了许久,百度搜索“list集合中如何按照某一个属性排序”,无果。
心想这是给自己挖了个坑呀,便改用dict。
绕了好久最后终于解决了。
先按照点赞数大小,点赞相同时按照评论数大小。

 def getSort(self):
    container=self.getDetail()
    print u'\n',u'将所有评论按照点赞数大小排序:'
    container.sort(key=lambda k:k.get('comment',0))
    container.sort(key=lambda k:k.get('like',0),reverse=True)
    for index,r in enumerate(container):
        print u'\n\n序号:',index+1, u'\n发言:',r['body'],u'\n点赞:' ,r['like'],u'评论',r['comment']

</br>
原本以为到这里就结束了,结果运行过程中又出新bug了
(真怀疑自己是否是招bug体质哎。。。):

Error2.jpg

没见过于是查资料,原来如此,get !


httpError.png

二、结果和代码

comment-Number.png

数据是昨天的。
今天又运行了程序,发现已不止1200
下面就是热门评论了


page1.png
page2.png

爬取的数据实在是多,象征性放前20条

想看完整版100条的可以去我微博:

http://weibo.com/u/5690935322?refer_flag=1005055010_&is_all=1

源码在Github上:

https://github.com/LUCY78765580/Python-web-scraping/blob/master/BoLiBei.py

终于搞定一切,接下来干点什么好?

04009040.jpg

这一次写爬虫,遇到不少问题,总结如下:
1、破解javascript动态网页(抓包)
2、json格式数据解析(json.loads())
3、在中文中匹配特定中文的正则表达式(先将关键词转换)
4、多个dict按照某一属性排序问题
(lambda函数和enumerate迭代器)
5、http连接太多没有关闭报错的问题

回去补补基础。
不过算是学会了抓包,这种东西简直有如神器。嘿嘿,本篇就是这样啦~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,590评论 18 139
  • # 一度蜜v3.0协议 --- # 交互协议 [TOC] ## 协议说明 ### 请求参数 下表列出了v3.0版协...
    c5e350bc5b40阅读 640评论 0 0
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,016评论 4 62
  • 1.内容概述: 指数型企业家要想获得巨大的成功,需要借助指数型技术的强大力量,也需要利用各种心理工具提供的...
    寻__梦阅读 684评论 0 48
  • 最是那低头一抹淡淡的乡愁 恰似那夜色不解游子的温柔 独自徘徊 游荡 又漂流…… 迷失在那繁华又寂寥的城路 听 … ...
    北冥湫阅读 589评论 0 1