Python爬取表情包
2021/9/24 22:12:43
本文主要是介绍Python爬取表情包,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
前面做了个爬表情包的文章,群聊斗神 - Python爬取斗图表情包 - 斗图之神的战斗神。今天又爬取了一些表情包,但是这次的处理方式有些许的不同,就是在查找到网页中所有的img标签后,处理图片url和图片名字的时候有些许不同。前面是通过处理字符串的方式来处理,效率上会慢一些,今天用bs4处理标签的方式来处理。代码如下:
""" 爬点表情包,目标网址https://fxxx.com/ """ import os import requests from bs4 import BeautifulSoup # 首先定义请求网页 def get_html(url): # 设置headers headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36' } # 请求网页 request = requests.get(url, headers=headers) # 解码 request.raise_for_status() request.encoding = request.apparent_encoding request.encoding = 'utf-8' # 获取内容 content = request.text # 返回内容 return content # 获取单页的image_list def get_image_lists(html_content): # 解析网页 soup = BeautifulSoup(html_content, 'lxml') # 找到我们需要的信息 image_lists = soup.findAll(name='img', attrs={"class":"ui image lazy" }) # 找到网页中所有的图片 return image_lists # 获取图片的地址 def get_image_urls(image_lists): # 开始循环遍历 image_urls = [] for i in image_lists: image_url = i['data-original'] # 获取img标签下属性为data-original的内容 image_urls.append(image_url) return image_urls # 获取图片名字 def get_image_names(image_lists): # 开始循环 image_names = [] for i in image_lists: image_name = i['title'] # 获取img标签下属性为title的内容 image_names.append(image_name) # 因为图片名称中可能出现windows不支持的字符如? /等,我们全部替换掉 str_image_names = [str(image_name).replace('?','').replace('/','') for image_name in image_names] #表达式获取一个新的名字列表 # 上面我们处理了特殊字符,接下来处理长度,可能会存在长度超出限制的情况 new_image_names = [str(image_name)[0:20] for image_name in str_image_names] # 如果文件名超出20,我们就截取前20个字符作为标题 # 当然可能还有其他情况需要处理 return new_image_names # 开始处理 if __name__ == "__main__": # 读取20页 for page in range(1, 5): url = f'https://xxx.com/biaoqing/lists/page/{page}.html' html_content = get_html(url) # 获取网页内容 image_lists = get_image_lists(html_content) # 解析网页获取图片信息列表 image_urls = get_image_urls(image_lists) # 获取网址列表 image_names = get_image_names(image_lists) # 获取标题列表 all_data = zip(image_urls, image_names) # 将其封装好处理 # print(list(all_data)) filePath = './images' # 当前路径下的一个文件夹 for image_url, image_name in all_data: if os.path.exists(filePath): rimage = requests.get(image_url) rimage.raise_for_status() with open(os.path.join(filePath, image_name + str(image_url).split('.')[-1]), 'wb') as fileObject: fileObject.write(rimage.content) fileObject.close() print("正在保存:" + image_name) else: os.mkdir(filePath) rimage = requests.get(image_url) rimage.raise_for_status() with open(os.path.join(filePath, image_name + str(image_url).split('.')[-1]), 'wb') as fileObject: fileObject.write(rimage.content) fileObject.close() print("正在保存:" + image_name)
其实不同的地方不多,总结一下思路:
1,请求网页返回内容;
2,对内容进行解析;
3,找到所有的img标签,形成列表;
4,通过列表提取图片的url和图片的名字
a,将列表的转换成字符串进行提取;
b,用标签属性值的方式进行提取;
5,处理一下图片名字可能给保存带来的麻烦;
6,逐一保存。
这篇关于Python爬取表情包的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-14获取参数学习:Python编程入门教程
- 2024-11-14Python编程基础入门
- 2024-11-14Python编程入门指南
- 2024-11-13Python基础教程
- 2024-11-12Python编程基础指南
- 2024-11-12Python基础编程教程
- 2024-11-08Python编程基础与实践示例
- 2024-11-07Python编程基础指南
- 2024-11-06Python编程基础入门指南
- 2024-11-06怎么使用python 计算两个GPS的距离功能-icode9专业技术文章分享