爬取抖图吧表情包实例(无gui版代码篇)

不知道什么时候会失效

    • 引言
    • 开整
      • Ai解释
      • **注意**
    • 重点: 如何使用
    • 结尾

引言

之前一篇文章说过,
为了增加文章的可读性
我会在文章中添加表情
以期增加文章的趣味
不负众望
我也搞出来了
爬取抖图吧表情包实例(无gui版代码篇)_第1张图片

虽然很简单
但也算是一个小实例,分享出来
现拿现用
我的实例注重实用性
而不是爬取过程
大佬勿喷
爬取抖图吧表情包实例(无gui版代码篇)_第2张图片

开整

# 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
    

Ai解释

爬取抖图吧表情包实例(无gui版代码篇)_第3张图片

这个Python脚本的功能是从doutub.com网站上搜索指定关键词的表情包,并下载前20个表情包到名为“images”的子目录下,子目录名以输入的关键词命名。以下是代码详细解读:

  1. 用户通过input()函数输入要搜索的表情包关键词。
  2. 根据关键词构造搜索URL并发送GET请求,同时设置了User-Agent和referer头信息。
  3. 使用BeautifulSoup解析返回的HTML内容。
  4. 从HTML中找到表情包的数量(假设在标签内),并使用正则表达式提取数字。
  5. 根据获取的表情包数量决定下载的数量,如果大于等于20,则只下载前20个。
  6. 找到所有表情包图片的data-src属性(即图片链接)。
  7. 创建一个与关键词同名的子目录用于存放表情包,若该目录已存在则不创建。
  8. 循环遍历前20个表情包,根据alt属性生成文件名,并拼接完整的文件路径。
  9. 对每个图片链接发送GET请求,检查状态码是否为200(表示成功响应)。
  10. 如果请求成功,将图片数据写入到目标文件路径下的文件中。

注意:实际运行此脚本时,由于网站结构可能会更新,所以可能需要根据当前网页结构调整 BeautifulSoup
的选择器。此外,代码没有处理可能出现的异常情况,例如网络问题、磁盘空间不足等,在实际应用中建议添加相应的错误处理机制。

注意

爬取抖图吧表情包实例(无gui版代码篇)_第4张图片

第2点是关键,网站加了防盗链,所以你的请求头不添加refer就拿不到数据

其他的就很简单了,你们可以自己试着编编看

还有目录是不太一样的,大家自己看看修改一下
我用spyder 运行的目录 和 vscode 运行的目录
产生的文件被放在不同的地方,因为两者的文件机制不同
大家要在上下级多找找,修改路径

重点: 如何使用

程序不难,重点是我想说如何使用
这里是根据关键词爬取
所以 很有可能 你要的关键词根本没有
爬取抖图吧表情包实例(无gui版代码篇)_第5张图片

比如:重点
因为索引是模糊的
但是这个表情包的网站收录的还是不够
所以 我们需要再模糊
直接搜索 “重”
再看相应的表情包是否是自己需要的
因为20个爬取的不多,所以不用担心IP问题
爬取抖图吧表情包实例(无gui版代码篇)_第6张图片

结尾

我有打包了一个exe 但是打包的程序
运行起来有点慢,我就先不发了
后续看看优化!
加gui!
加多线程?
加其他的网站?
你们说呢?
爬取抖图吧表情包实例(无gui版代码篇)_第7张图片

那么

爬取抖图吧表情包实例(无gui版代码篇)_第8张图片

你可能感兴趣的:(Python代码实例,python,爬虫,表情包,爬取)