【爬虫】Yhen手把手教你爬取表情包,让你成为斗图界最靓的仔!

以下内容为本人原创,欢迎大家观看学习,禁止用于商业用途,转载请说明出处,谢谢合作!

  大噶好!我是python练习时长一个月的Yhen,今天要向大家分享的是爬取表情包,让你成为斗图界最靓的仔!,特别感谢六星教育python学院,我就是在这里学的,老师讲的挺好挺仔细的,以下内容都是基于我在课堂上学到的,大家有兴趣可以到腾讯课堂报名听课,都是免费的。

最后会把源码给到大家

今天我们的目标是把这个网站中的表情包给爬取下来
url:http://www.bbsnet.com/katong
在这里插入图片描述
我们首先来分析一下
打开我们的网页检查工具,点击左上角的按钮,然后定位到其中的一张表情包

在这里插入图片描述
可以看到,下方给我们反馈的数据中
我们的表情包是在 类选择器(class)为zoom的a标签的下级标签img标签里面的src属性里面(可能有点绕,不过看着下图多读几次应该就能理解啦)
图片的格式是gif,就是动图
在这里插入图片描述
那我们有思路了
首先对这个网址发送请求,获取到它里面的数据
然后解析数据,并通过标签类选择器属性提取到我们的图片地址
最后把图片保存到本地即可

那么开始写代码吧

老规矩,先导包。今天我们还是会用到pyquery这个包,因为这个真的简单又好用啊哈哈哈

import requests
#从pyquery中导入PyQuery ,取别名pq
from pyquery import PyQuery as pq

然后是要获取网页的数据

网址是这个:http://www.bbsnet.com/katong
但是我们的目标是成为斗图界的大佬,只有这么一页的表情包怎么能满足我们呢?所以我们今天的目标是爬取多页表情包

首先我们来看看第二页的url和第一页的有什么不同
在这里插入图片描述
可以看到,第二页比第一页多了个后缀/page/2
那么我们是不是可以通过改变这个数据来改变页数呢?

我把2改成3

在这里插入图片描述

很好,成功得到了我们第3页的数据了

那么我们就可以通过改变这个值来自行决定我们想要的页数啦
先看看我是怎么做的

# 自行输入想要的表情包页数,转换为整数格式,并赋值给a
a = int(input("请输入你想要的页数"))
# 由取头不取尾的原则。该循环会生成数值1~a,即我们想要获取的页数
for page in range(1,a+1):
    # 首页的url
    # 用.format把我们要的页码数值代入到网址中
    url ='http://www.bbsnet.com/biaoqingbao/page/{}'.format(page)
    # 请求头
    headers={'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.9 Safari/537.36'}
    # 对首页发送请求
    res = requests.get(url,headers=headers).text
    print(res)

通过上面这种代码,我们就可以想下载多少页就下载多少页啦

我们来打印下结果(这里以2页为例)
在这里插入图片描述
成功得到了我们两页的源码

接下来就是从这些源码中提取我们表情包的地址
再来回顾下
在这里插入图片描述
我们的表情包地址是在 类选择器(class)为zoom的a标签的下级标签img标签里面的src属性里面

下面我们就用pyquery把他们取出来

# 通过类选择器zoom定位数据,然后取他的下级标签img
    img =doc(".zoom img")
    print(img)

先通过类选择器zoom定位数据,然后取他的下级标签img
我们看看结果
在这里插入图片描述
得到了很多很多的数据,可以看到我们的图片地址也在这了
但是现在看起来是不是很乱?而且很多我们不要的
没关系,现在我们就让他排好队,并提取出图片地址

# 通过类选择器zoom定位数据,然后取他的下级标签img .item()把数据返回为查询集
    img =doc(".zoom img").items()
    # print(img)
    # 遍历数据
    for x in img:
        # 通过属性“src”提取出图片的地址
        print(x.attr("src"))

我们来看看结果
在这里插入图片描述
成功得到了我们两页的表情包地址啦
我们点开一个网址看看在这里插入图片描述
莫得毛病吧

然后我们对这些表情包发送请求,并保存到本地,就大功告成啦

# 设置count的初始值为1
    count=1
    # 遍历数据
    for x in img:
        # 通过属性“src”提取出图片的地址
        img_url =x.attr("src")
        # 对图片地址发送请求
        res =requests.get(img_url,headers=headers)
        # 在同路径下保存为gif文件,以“ab”的方式写入 a是追加 b是进制转换
        f =open("./"+"{}.gif".format(count),"ab")
        # 将获取到的数据写入 content是进制转换
        f.write(res.content)
        # 关闭文件写入
        f.close()
        # 等价于count = 前一个count+1
        count+=1

我们来看看结果

在这里插入图片描述
成功获取了我们两页的数据
大家可以自行输入你想要的页数哦
完成啦
撒花完结

最后附上源码

import requests
from pyquery import PyQuery as pq

# 自行输入想要的表情包页数,转换为整数格式,并赋值给a
a = int(input("请输入你想要的页数"))

# 由取头不取尾的原则。该循环会生成数值1~a,即我们想要获取的页数
for page in range(1,a+1):
    # 首页的url
    # 用.format把我们要的页码数值代入到网址中
    url ='http://www.bbsnet.com/biaoqingbao/page/{}'.format(page)
    
    # 请求头
    headers={'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.9 Safari/537.36'}
    
    # 对首页发送请求
    res = requests.get(url,headers=headers).text
   
    # 数据初始化
    doc =pq(res)
    
    # 通过类选择器zoom定位数据,然后取他的下级标签img .item()把数据返回为查询集
    img =doc(".zoom img").items()
    # print(img)
    
    # 设置count的初始值为1
    count=1
   
    # 遍历数据
    for x in img:
        # 通过属性“src”提取出图片的地址
        img_url =x.attr("src")
        # 对图片地址发送请求
        res =requests.get(img_url,headers=headers)
       
        # 在同路径下保存为gif文件,以“ab”的方式写入 a是追加 b是进制转换
        f =open("./"+"{}.gif".format(count),"ab")
        # 将获取到的数据写入 content是进制转换
        f.write(res.content)
        # 关闭文件写入
        f.close()
        
        # 等价于count = 前一个count+1
        count+=1

Yhen说

因为今天的内容比较简单,所以篇幅较前几篇就会显得比较短啦
不过我相信大家都看懂了吧。有什么不懂的欢迎评论区留言哦

如果大家觉得我写的还可以的话,可以给个小赞鼓励下小弟嘛!顺手点个关注就更好啦哈哈哈
今天很勤快,两更了哈哈哈
很开心能在这里和大家分享我的经验!
我是Yhen,我们下期见!

  【往期精彩文章回顾】
  【爬虫】Yhen手把手带你用python爬小说网站,全网打尽,想看就看!
(这可能会是你看过最详细的教程)
url:https://blog.csdn.net/Yhen1/article/details/105345343

  【爬虫】Yhen手把手带你用python爬取知乎大佬热门文章
url:https://blog.csdn.net/Yhen1/article/details/105412841

  【爬虫】Yhen手把手带你爬取去哪儿网热门旅游信息(并打包成旅游信息查询小工具)
url:https://blog.csdn.net/Yhen1/article/details/105460969

  也可直接进入我的博客主页进行查看哦

发布了7 篇原创文章 · 获赞 15 · 访问量 768

猜你喜欢

转载自blog.csdn.net/Yhen1/article/details/105475370
今日推荐