前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >聊天没有表情包被嘲讽,程序员直接用python爬取了十万张表情包

聊天没有表情包被嘲讽,程序员直接用python爬取了十万张表情包

作者头像
小王不头秃
发布2024-06-19 16:40:28
1140
发布2024-06-19 16:40:28
举报

前言

事情要从几天前说起,我有一个朋友,他在和他喜欢的小姐姐聊天时,聊天的气氛一直非常尬,这时他就想发点表情包来缓和一下气氛,但一看自己的表情包收藏都是这样的。。。

。。。这发过去,基本就直接和小姐姐说拜拜了,然后他就向我求救问我有没有表情包,表情包我是没有,但网站有呀,来来,爬虫整起。

分析页面

今天爬取的网站是斗图吧,有一说一表情包是真的多,看这惊人的页数

接下来就该看看怎么拿到表情包图片的url了,首先打开谷歌浏览器,然后点F12进入爬虫快乐模式

然后完成下图的操作,先点击1号箭头,然后再选中一个表情包即可,红色框中就是我们要爬取的对象,其中表情包的src就在里面

现在我们就搞清楚了怎么拿到表情包的url了,就开始写代码了

具体实现

解析页面

获取网页内容

这里就是获取爬取网页的信息

代码语言:javascript
复制
def askURL(url):
    head = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.106 Safari/537.36"
    }
    req = urllib.request.Request(url=url, headers=head)
    html = ""
    try:
        response = urllib.request.urlopen(req)
        html = response.read()
    except Exception as result:
        print(result)
    return html
解析网页内容
代码语言:javascript
复制
# 取出图片src的正则式
imglink = re.compile(
    r'<img alt="(.*?)" class="img-responsive lazy image_dta" data-backup=".*?" data-original="(.*?)" referrerpolicy="no-referrer" src=".*?"/>',
    re.S)
def getimgsrcs(url):
    html = askURL(url)
    bs = BeautifulSoup(html, "html.parser")
    names = []
    srcs = []
    # 找到所有的img标签
    for item in bs.find_all('img'):
        item = str(item)
        # 根据上面的正则表达式规则把图片的src以及图片名拿下来
        imgsrc = re.findall(imglink, item)
        # 这里是因为拿取的img标签可能不是我们想要的,所以匹配正则规则之后可能返回空值,因此判断一下
        if (len(imgsrc) != 0):
            imgname = ""
            if imgsrc[0][0] != '':
                imgname = imgsrc[0][0] + '.' + getFileType(imgsrc[0][1])
            else:
                imgname = getFileName(imgsrc[0][1])
            names.append(imgname)
            srcs.append(imgsrc[0][1])
    return names, srcs

到现在为止,已经拿到了所有的图片的链接和名字,那么就可以开始下载了

文件下载

多线程下载

因为文件实在有点多,所以最好采用多线程的方式下载,我这里只是给了一个样例,大家按照这个逻辑写一下就好

代码语言:javascript
复制
 pool = ThreadPoolExecutor(max_workers=50)
         for j in range(len(names)):
            pool.submit(FileDownload.downloadFile, urls[j], filelocation[j])

成果

总共是爬了十万多张表情包,这次咱也是表情包大户了

总结

有缘再写,侵权立删

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-06-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 分析页面
  • 具体实现
    • 解析页面
      • 获取网页内容
      • 解析网页内容
    • 文件下载
      • 多线程下载
  • 成果
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档