来斗图吧 骚年!

之前有介绍过GitHub上的表情包仓库,但感觉数量太少,不能满足经常斗图的需求,于是我决定从无所不有的互联网中挖掘表情包资源。

image

这次的爬取目标是人均年薪百万的某乎,里面有关表情包的问答,几乎每个回答都给出了大量的表情包,来自五湖四海的网友在某乎以表情包会友,那我就来把你们发的全部都收集起来~

image

首先我们先把所有回答展开,查看全部回答。打开开发者工具,找到回答所在页面,将Requests Headers里的内容全部拷贝到咱们自己的Headers中。利用 requests 爬取该页面。

params 中的 offset 根据页面的更改更改其值,每翻一页,offset 就加5 。其他的参数不发生改变。

接着观察网页源代码,我们可以清楚的看到每一张图片的链接就放在 data-actualsrc 之后。

image

而这个链接的获取可以使用正则表达式将其从网页源代码中获取。

pic_urls=re.findall(r'data-actualsrc="(.*?.(gif|jpg|png))',content)

根据这些图片的url链接,我们只要再构造requests请求,便可以把所有图片下载下来。一个很直观的想法就是先访问源网页,用一个列表保存所有的图片url,然后遍历这个列表,逐个访问并下载内容。

这样操作的话消耗的内存比较大,并且下载图片的速度较慢,因此我采取了另外一种策略,一个简单的 Requests + Redis 的分布式爬虫。

image

获取图片URL

按照之前所说的那样,爬取获得URL链接,不同的是,我们将其存储在Redis中把所有 url 添加到同一个集合中。

def get_urls(self,offset,urls):     
        params={
                'include': 'data[*].is_normal,admin_closed_comment,reward_info,is_collapsed,annotation_action,annotation_detail,collapse_reason,is_sticky,collapsed_by,suggest_edit,comment_count,can_comment,content,editable_content,voteup_count,reshipment_settings,comment_permission,created_time,updated_time,review_info,relevant_info,question,excerpt,relationship.is_authorized,is_author,voting,is_thanked,is_nothelp,is_labeled,is_recognized,paid_info,paid_info_content;data[*].mark_infos[*].url;data[*].author.follower_count,badge[*].topics',
                'limit': 5,
                'offset': offset,
                'platform': 'desktop',
                'sort_by': 'default'              
                }
        r=requests.get(self.url,headers=self.headers,params=params)
        data=r.json()['data']
        for i in data:
            content=i['content']
            pic_urls=re.findall(r'data-actualsrc="(.*?.(gif|jpg|png))',content)
            for j in range(len(pic_urls)):
                self.r.sadd("urls",pic_urls[j][0])
image

图片下载

新建一个py文件用于下载图片,因为链接的获取速度比图片下载速度快不少,因此在图片下载这一环中采用了多线程处理 requests 请求。

    def download(self):
        if "urls" in self.r.keys():
            while True:
                try:
                    url=self.r.spop("urls")
                    r=requests.get(url,headers=self.headers)
                    with open(img_path+os.path.sep+'{}{}'.format(self.count,url[-4:]),'wb') as f:
                        f.write(r.content)                    
                    print("已经成功下载{}张表情包!".format(self.count))
                    self.count+=1
                except:
                    if "urls" not in self.r.keys():
                        print("表情包已全部下载完成")
                        break
                    else:
                        print("{}请求发送失败!".format(url))
                        continue
        else:
            self.download(self)

两个程序同时运行,一边获取url存入Redis, 另一边提取url 下载图片。大大加快了下载速度,并且减少了内存的使用。

成果展示

一共爬取了5W+张表情包,包含骚骚的gif动图。哈哈!斗胆问一句:斗图谁与争锋?

image

所有表情包我已经放入某盘,后台回复 表情包 即刻获取~

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

推荐阅读更多精彩内容

  • [TOC] 1.基本概念 爬虫就是获取网页并提取和保存信息的自动化程序 1.HTTP基本原理理 1.URI和URL...
    文化银儿阅读 1,658评论 0 0
  • 前言 你还在,你还在,头悬梁锥刺股。 下,下,下,表情包吗? 你还以为盗个图战胜小学生。 就能成为斗图王吗? 你还...
    猫先生的早茶阅读 511评论 0 0
  • 点击查看原文 Web SDK 开发手册 SDK 概述 网易云信 SDK 为 Web 应用提供一个完善的 IM 系统...
    layjoy阅读 13,730评论 0 15
  • 之前看朋友发的一个活动很有意思,是青岛官方组织的城市定向赛,就是在一定的时间内完成不同点位的任务,听闻大概有一万多...
    如此青梨阅读 138评论 0 0
  • 第一章名词。 这是要点名词,根据其意义分为专有名词和普通名词,名词分为可数名词和不可数名词,名词的所有
    一娃妈妈阅读 169评论 0 0