虎扑步行街爬虫分析

最近学习scrapy,就拿虎扑练了下手,主要爬取虎扑步行街的帖子以及回帖的一些数据。

scrapy的教程可以看一下我写的上一篇博客:
python爬虫框架——Scrapy架构原理介绍
解析网页的时候还需要对xpath有所了解,也可以看一下我的这篇博客:
xPath 用法总结整理

一、爬虫功能

目前主要就实现3个功能:
1. 爬取步行街主干道的帖子
2. 爬取对应帖子的回帖信息
3. 爬取步行街上的所有图片,下载到本地(可通过配置文件开关,默认是关闭的)

下面简单分析一下爬取过程

二、抓取数据过程简单分析

开始爬取的时候,我们可以先分析步行街的首页url https://bbs.hupu.com/bxj,然后用chrome的开发者工具对网页的html进行分析。对于一些感兴趣的数据,分析它html节点对应的xpath语法。如果对html以及xpath不太熟悉的同学,也可以使用chrome开发者工具直接抽取xpath。

选中元素,然后右击
chrome抽取xpath

拿到对应的xpath后,我们就可以获取数据了。下面是对应parse()的方法:

    def parse(self, response):
        content_urls = []
        # 获取所有帖子,然后去遍历他们
        for li in response.xpath('//ul[@class="for-list"]/li'):
            # self.log(li.extract())
            # 获取标题的链接
            title_href = li.xpath(".//a[@class='truetit']/@href").extract_first()
            # 上面拿到的只是一个相对地址,这里拼接成一个绝对地址
            url = "https://bbs.hupu.com" + title_href
            # 虎扑帖子的id
            post_id = self.get_post_id(title_href)
            # 获取帖子的标题
            title = li.xpath(".//a[@class='truetit']/text()").extract_first()
            # 作者
            author = li.xpath(".//a[@class='aulink']/text()").extract_first()
            # 发表时间
            post_time = li.xpath(".//a[@style='color:#808080;cursor: initial; ']/text()").extract_first()
            # 获取浏览数/回复数
            count_des = li.xpath(".//span[@class='ansour box']/text()").extract_first()
            # 获取回复数
            reply_count = re.match('(\d+)[^0-9]*(\d+)', count_des).group(1)
            # 获取帖子浏览数
            view_count = re.match('(\d+)[^0-9]*(\d+)', count_des).group(2)
            content_urls.append(url)
            # 返回数据,交给pipeline去存储到数据库中
            yield {"id": post_id, "title": title, "url": url, "author": author, "post_time": post_time,
                   "view_count": view_count, "reply_count": reply_count}
        # 这下面返回帖子的url,这样scrapy引擎就会继续去查看帖子的详情,后面就可以直接爬取帖子的回帖数据了
        for content_url in content_urls:
            yield scrapy.Request(content_url, self.post_content_parse, dont_filter=True)

这样,我们就获取到步行街首页的所有帖子内容,要想获取第二页的数据也很简单,虎扑的分页是直接放在url上做处理的。要访问第二页,在后面加个-2就可以了,也就是https://bbs.hupu.com/bxj-2。我们就可以很方便的遍历各个页面的帖子数据了。

获取回帖数据

拿到帖子数据后,我们还希望拿到对应的帖子回帖详情,在前面的parse()方法里面,我们已经在最后返回了包含帖子url的Request,scrapy引擎会自动帮我们去下载对应url的内容,然后调用post_content_parse()方法。怎么获取回帖内容就不详细分析了,下面直接上代码:

    def post_content_parse(self, response):
        # 获取一共有几页
        page_match = self.page_compile.match(response.text)
        total_pages = 1
        if page_match is not None:
            total_pages = int(page_match.group(1))
        # 获取帖子的内容
        content = response.xpath("//div[@class='quote-content']").extract_first()
        # 帖子的具体回复时间,前面获取的时间值精确到天,这里的可以精确到秒
        post_detail_time = response.xpath("//div[@class='floor-show']//span[@class='stime']/text()").extract_first()
        post_id = self.get_post_id(response.url)
        # 这里返回帖子的内容和具体时间主要是为了修复前面的帖子数据
        yield {"type": 2, "content": content, "post_time": post_detailt_time, "id": post_id}
        # 遍历所有回帖楼层
        for reply in response.xpath("//div[@class='floor']"):
            if reply.xpath("@id") is None:
                continue
            hupu_reply_id = reply.xpath("@id").extract_first()
            floor_num = reply.xpath(".//a[@class='floornum']/@id").extract_first()
            if hupu_reply_id == "tpc" or floor_num is None:
                continue
            author = reply.xpath(".//div[@class='author']//a[@class='u']/text()").extract_first()
            reply_time = reply.xpath(".//div[@class='author']//span[@class='stime']/text()").extract_first()
            like_count = reply.xpath(
                ".//div[@class='author']//span[@class='ilike_icon_list']//span[@class='stime']/text()").extract_first()
            content = reply.xpath(".//tbody").extract_first()

            yield {"type": 3, "content": content, "hupu_reply_id": hupu_reply_id, "author": author,
                   "hupu_post_id": post_id, "reply_time": reply_time, "like_count": like_count, "floor_num": floor_num}
        # 如果回帖的页数大于1,还需要继续遍历其他页的回帖数据
        if total_pages > 1:
            for page in range(2, total_pages + 1):
                url = "https://bbs.hupu.com/%s-%s.html" % (post_id, page)
                scrapy.Request(url, self.post_content_page_parse, dont_filter=True)
        # 用来抽取本页面所有的图片内容
        image_urls = response.xpath("//tbody//img/@src").extract()
        if len(image_urls) > 0:
            yield {"type": 999, "image_urls": image_urls}
下载图片

上面爬取回帖内容的同时,还同时爬取了图片的url。本人也写了一个pipeline来处理这些图片url,功能很简单,就是直接把图片下载下来,不过默认情况下这个pipeline是关闭的。

三、步行街帖子数据分析

目前爬虫已经放到服务器上面运行,从6月12号开始,也累计了一些数据。下面对帖子以及回帖数据进行一些简单的分析:

1. 日发帖数
日期数量
2018-06-123194
2018-06-132692
2018-06-142494
2018-06-152191
2018-06-161705
2018-06-171793
2018-06-181980
2018-06-192051
2018-06-201903
2018-06-211991
2018-06-221905
2018-06-23536

从上面的表格可以看出,步行街的日发帖数应该在2000左右,不知道为什么6.12到6.14这几天为什么比较高,当然不排除我的爬虫程序有问题。

2. 日回帖数
日期数量
2018-06-1249819
2018-06-1337125
2018-06-1430570
2018-06-1525295
2018-06-1618054
2018-06-1719039
2018-06-1819483
2018-06-1920593
2018-06-2018449
2018-06-2118928
2018-06-2216177
2018-06-234858

发帖数差不多是2000,回帖数量是20000,有点意思。还是6.12到6.14比较高

4. 发帖数最高的50名jr

在6.12到6.23之间,发帖数最高的50名jr:

jr账号名发帖数量
天雷刚地火96
雨1直下89
路人王53
太阳骑士索拉尔哟47
方敏寞46
彩虹上面看星星46
哈哈哈侦探社44
yintongju41
成长中的迷茫与彷徨39
木守宫38
勒布朗FMVP詹姆斯38
PH21735
笨笨虫和牛仔34
劍魔獨孤求敗33
小毛驴林书豪33
junwangce33
步行街最帅的男人33
TomDavies31
呼呼zzzzzz31
鲁智深大战潘金莲29
章泽天男友27
姨妈血豆腐汤27
随心所欲不27
Chuck正男26
虎扑中人25
moneya25
SmithKobe25
嗨喽棒棒昂25
早上尿很黄25
卡特麦迪AI科比鲨鱼25
作死就只能用小号25
人云亦云者比无脑可悲25
LCMC071025
佛陀芒果24
文墨冷潇23
破體無形劍氣22
后仰直臂投22
我有点晕奶21
第十九个号21
绿胖腿21
w1395538665421
大王威武21
胡乱唱歌9621
齐B裤小号20
灯泡最牛20
上纸寨20
世界杯MVP梅西20
17532777719
小勒布朗三分绝杀老詹19
安兜兜hd19
4. 回帖数最高的50名jr

在6.12到6.23之间,回帖数最高的50名jr:

jr账号名回帖数量
水水瑞1538
mihm3344405
21DuncanSun376
不愿透露姓名的某JR349
金牛座万大爷346
那你自个儿想去346
浮云310318
外行看门道MAC311
千年以后子孙留名273
Harry郝艺益269
活的真累257
张啊花255
行风666252
左韩超右250
游荡的泉230
ms_king229
轩寻6226
dabing2016223
elgin1234213
逼格east208
流年‰飘雪207
安徽亳州205
晚归来203
Kobe_is_FMVP200
范蕊雅单挑库里199
我的包包不能这么可爱197
rogerfwoo191
哈保卡190
15850000186
红焙浅瓯184
Laughing.哥183
戈多樱木183
真范德彪183
表白标配士力架181
篮球队的小田181
手可摘星辰i181
哈灯的登179
香甜好米饭178
能没昵称吗行不176
红花会陈家洛173
三星NOTE8170
东篱下的你169
hangload164
小树宝的大草包159
沐芋枫157
感性的Augus157
我相信琦迹155
两米二大老黑155
挣钱换X5154
小穴老湿啊153
5. 查看某天回复数最高的50个帖子

有时候没空刷步行街,就可以把当天回帖最多的那些帖子找出来看一看。一般回帖多的帖子都比较有趣,很多时候看回帖比看帖子还有意思。
6.21那天回复数量最高的50个帖子:

标题链接浏览数回复数发帖时间
你对自己的身高满意吗?距离想身高差多少?https://bbs.hupu.com/22653031.html38075515512018-06-21 07:28:00
对你影响最大的一本书是什么?https://bbs.hupu.com/22658135.html39491411932018-06-21 16:20:00
我是上次小区踢飞泰迪的那个,后续来了https://bbs.hupu.com/22657245.html82399911592018-06-21 14:56:00
今天看到几年前居然有人说江南大学是野鸡大学https://bbs.hupu.com/22653084.html3480888972018-06-21 07:42:00
陕北小县城人第一次来大城市省城西安,被震撼到了。。。https://bbs.hupu.com/22652204.html3668928772018-06-21 00:35:00
你穿过最舒服的低帮篮球鞋是哪双?https://bbs.hupu.com/22661382.html3809348752018-06-21 21:53:00
zt 最新消息,江苏高考取消小高考,语数外改用全国卷https://bbs.hupu.com/22652847.html3792598702018-06-21 05:07:00
男生是不是真的更容易从失恋中走出来?https://bbs.hupu.com/22661015.html3572818652018-06-21 21:20:00
上海财经大学还是听父母意见去西安交通大学?https://bbs.hupu.com/22655054.html3355418522018-06-21 11:21:00
终于轮到我了,我是《古惑仔》编剧文隽,大家有什么想问的?https://bbs.hupu.com/22656567.html2658417712018-06-21 13:48:00
广东23岁女子凌晨打车遭侵犯杀害 被藏尸烧烤店冰柜zthttps://bbs.hupu.com/22653415.html7492877672018-06-21 08:41:00
复旦大学生在邓紫棋面前炫耀学历,被撒贝宁无情打脸,什么水平?zthttps://bbs.hupu.com/22657173.html7438627552018-06-21 14:50:00
不看抖音,不看快手,不看小视频,不玩王者,不吃鸡的是什么样的男人?https://bbs.hupu.com/22658047.html2699027462018-06-21 16:12:00
无助,女朋友情愿分手也要做主播https://bbs.hupu.com/22660404.html5645896912018-06-21 20:24:00
28岁还喜欢玩游戏,是不是不成熟的表现?https://bbs.hupu.com/22654920.html4354836632018-06-21 11:08:00
同事动不动就说世界杯踢假球,问问街上看球的jr,是同事太偏激还是世界杯真的这样https://bbs.hupu.com/22653725.html3276336532018-06-21 09:18:00
我前面自习的妹子衣服好像反了…我该怎么提醒她https://bbs.hupu.com/22657871.html10864676332018-06-21 15:54:00
现在女孩子写字普遍比男生写字好看?https://bbs.hupu.com/22653236.html2559736182018-06-21 08:17:00
阿迪boost穿着舒服吗?https://bbs.hupu.com/22653173.html2971505972018-06-21 08:06:00
你们反感别人吃饭bia叽嘴吗https://bbs.hupu.com/22655719.html1895105912018-06-21 12:26:00
你管外祖母叫外婆还是姥姥?https://bbs.hupu.com/22655772.html534605812018-06-21 12:32:00
明天就要人生第一次一个人坐飞机了,为了不尴尬,有哪些要注意的?https://bbs.hupu.com/22653154.html3382575702018-06-21 08:02:00
身边有个小姐姐 快30了职业是空姐,听说还没谈过男朋友 正常吗?https://bbs.hupu.com/22657929.html5948765622018-06-21 16:01:00
西安综合实力和郑州相比落后吗?https://bbs.hupu.com/22655953.html964475612018-06-21 12:47:00
火车对面一个1米8的妹子,现在我们两个面对面坐着,很尴尬https://bbs.hupu.com/22659812.html11004675532018-06-21 19:26:00
说到歌曲刚开始高潮的歌你第一个想到的是哪首?https://bbs.hupu.com/22660877.html1429505422018-06-21 21:07:00
昨晚和老婆的聊天记录,我是修了几辈子的福气?https://bbs.hupu.com/22653013.html7318835302018-06-21 07:21:00
我大河南的高考真恐怖https://bbs.hupu.com/22653468.html1266695272018-06-21 08:50:00
爷爷破过的奇案4:中心校空屋悬尸疑案(多图慎入)https://bbs.hupu.com/22654485.html4468575112018-06-21 10:33:00
张艺兴在国外有多火https://bbs.hupu.com/22657470.html2322045102018-06-21 15:17:00
袁立这波怒怼李冰冰什么水平https://bbs.hupu.com/22654535.html8395035032018-06-21 10:36:00
13岁孩子路上突发心脏病猝死 无人现场急救,律师:好心帮助可能需承担法律责任。https://bbs.hupu.com/22656565.html2412275022018-06-21 13:47:00
女票在大学里有两个认的哥哥是什么意思?https://bbs.hupu.com/22655277.html3264114922018-06-21 11:44:00
Angelababy实力说唱,嗨翻全场!https://bbs.hupu.com/22661522.html5199144702018-06-21 22:09:00
2018年各国人均纯收入排行榜,日本挤出前20,中国香港入围https://bbs.hupu.com/22656702.html2464164642018-06-21 14:01:00
一个小学同学来我姐姐店吃饭,不给免单有错吗?https://bbs.hupu.com/22654663.html4073924632018-06-21 10:47:00
ZT河南一街道规定彩礼不得超2万 索要过多以贩卖人口论处https://bbs.hupu.com/22653673.html3231444552018-06-21 09:14:00
王晶这个微博怎么看https://bbs.hupu.com/22653809.html4935154552018-06-21 09:27:00
作为矿泉水的两大巨头 你们选哇哈哈还是农夫山泉https://bbs.hupu.com/22656890.html1389994542018-06-21 14:22:00
女子当街掌掴母亲引众怒,遭路人一脚踹飞https://bbs.hupu.com/22659622.html4542944452018-06-21 19:03:00
什么水平?面对强拆,住户把城管、物业和社区工作人员说得哑口无言!https://bbs.hupu.com/22660161.html2276684342018-06-21 20:01:00
大四鞋被偷了再次后续…https://bbs.hupu.com/22652718.html2057554242018-06-21 03:29:00
蝴蝶效应在历史长河中真的会有改变历史轨迹的影响吗?https://bbs.hupu.com/22653259.html3181964102018-06-21 08:20:00
这也太猛了吧。。。https://bbs.hupu.com/22655765.html4731274092018-06-21 12:31:00
你信有的女人27岁了还是处女,而且之前没有谈过恋爱吗?https://bbs.hupu.com/22655342.html2085563992018-06-21 11:52:00
被一个很漂亮的女生告白 怎么办https://bbs.hupu.com/22662055.html6308703972018-06-21 22:53:00
有没有恋爱的感觉,台妹都这么可爱的么?https://bbs.hupu.com/22659504.html3533283972018-06-21 18:49:00
堂哥放弃了副处岗位的引进生公务员,大伯觉得很丢人https://bbs.hupu.com/22656826.html1642373942018-06-21 14:16:00
Jrs,年收入十五万,到底属于什么水平https://bbs.hupu.com/22656757.html1078603852018-06-21 14:07:00
“外公外婆”竟成方言,教材被改以后上海人也要跟着叫姥姥了吗?https://bbs.hupu.com/22653651.html699603662018-06-21 09:12:00

目前就列这些维度的数据分析,有兴趣的朋友可以联系我,我有空的话可以给你们提供更详细的数据。

四、源码分享以及后期开发

目前这个爬虫我已经开源到了github上面,欢迎大家star甚至加入一起开发,后面如果有时间可能还要加一些功能爬取更多的内容,甚至开发一个网站实时展示这些数据。下面附上github地址:
https://github.com/kongtrio/hupu_spider

这里要特意说一下,这个爬虫是我业余时间写的,没做过什么仔细的测试,所以不保证上面数据是对的,也不保证程序没有什么问题。总之,纯属娱乐,大家有兴趣可以玩玩

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值