之前一篇文章说过,
为了增加文章的可读性
我会在文章中添加表情
以期增加文章的趣味
不负众望
我也搞出来了
虽然很简单
但也算是一个小实例,分享出来
现拿现用
我的实例注重实用性
而不是爬取过程
大佬勿喷
# coding: utf-8
import requests
from bs4 import BeautifulSoup
import re
import os
searchWord = input("请输入你要的表情包关键词:")
url = "https://www.doutub.com/search/"+searchWord
#print(url)
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:120.0) Gecko/20100101 Firefox/120.0",
"referer": "https://m.doutub.com/"}
r = requests.get(url, headers = headers)
#print(r.text)
# 获取表情包个数
soup = BeautifulSoup(r.text,"html.parser")
numberWords = soup.find_all("em")
#print(numberWords[1])
numbers = re.findall(r'\d+', str(numberWords[1]))
print(numbers[-1])
number = int(numbers[-1])
# 拿到第一个页面下,所有的表情包的下载网址
#不能大于20个,大于20个就直接拿20即可
urlExpressions = soup.find_all("img")
#soup.find_all('tag_name', attrs={'attr_name': 'attr_value'})
#print(urlExpressions[20]['data-src'])
# 目标目录(在这个例子中是当前目录下的 "images" 子目录)
target_directory = 'images/'+searchWord
# 检查目标目录是否存在,如果不存在则创建它
if not os.path.exists(target_directory):
os.makedirs(target_directory)
# 固定好获取的图片的数量,不用多
if number>= 20:
number = 20;
for i in range (1,number+1):
#print(urlExpressions[i]['alt']+ urlExpressions[i]['data-src'][-4:])
#print(urlExpressions[i]['data-src'])
# 下载后保存的文件名
# 构建完整的目标文件路径(包括文件名)
filename = urlExpressions[i]['alt']+ urlExpressions[i]['data-src'][-4:]
target_file_path = os.path.join(target_directory, filename)
expressionR = requests.get(urlExpressions[i]['data-src'], headers = headers)
if expressionR.status_code == 200:
with open(target_file_path, "wb") as file:
file.write(expressionR.content)
print("资源已成功下载并保存为:", filename)
else:
print("下载资源时出现错误,状态码:", expressionR.status_code)
break
这个Python脚本的功能是从doutub.com网站上搜索指定关键词的表情包,并下载前20个表情包到名为“images”的子目录下,子目录名以输入的关键词命名。以下是代码详细解读:
- 用户通过
input()
函数输入要搜索的表情包关键词。- 根据关键词构造搜索URL并发送GET请求,同时设置了User-Agent和referer头信息。
- 使用BeautifulSoup解析返回的HTML内容。
- 从HTML中找到表情包的数量(假设在
<em>
标签内),并使用正则表达式提取数字。- 根据获取的表情包数量决定下载的数量,如果大于等于20,则只下载前20个。
- 找到所有表情包图片的
data-src
属性(即图片链接)。- 创建一个与关键词同名的子目录用于存放表情包,若该目录已存在则不创建。
- 循环遍历前20个表情包,根据
alt
属性生成文件名,并拼接完整的文件路径。- 对每个图片链接发送GET请求,检查状态码是否为200(表示成功响应)。
- 如果请求成功,将图片数据写入到目标文件路径下的文件中。
注意:实际运行此脚本时,由于网站结构可能会更新,所以可能需要根据当前网页结构调整 BeautifulSoup
的选择器。此外,代码没有处理可能出现的异常情况,例如网络问题、磁盘空间不足等,在实际应用中建议添加相应的错误处理机制。
第2点是关键,网站加了防盗链,所以你的请求头不添加refer就拿不到数据
其他的就很简单了,你们可以自己试着编编看
还有目录是不太一样的,大家自己看看修改一下
我用spyder 运行的目录 和 vscode 运行的目录
产生的文件被放在不同的地方,因为两者的文件机制不同
大家要在上下级多找找,修改路径
程序不难,重点是我想说如何使用
这里是根据关键词爬取
所以 很有可能 你要的关键词根本没有
比如:重点
因为索引是模糊的
但是这个表情包的网站收录的还是不够
所以 我们需要再模糊
直接搜索 “重”
再看相应的表情包是否是自己需要的
因为20个爬取的不多,所以不用担心IP问题
我有打包了一个exe 但是打包的程序
运行起来有点慢,我就先不发了
后续看看优化!
加gui!
加多线程?
加其他的网站?
你们说呢?
那么