表情包(图片)自生产——Python爬虫xpath实现

2023-11-05



严正声明:爬虫应严格遵守国家的相关法律法规,坚决做一只文明爬虫

在这里插入图片描述

前言

还在为表情包不够用而烦恼吗?

还在为表情包单一而苦恼吗?

还在为聊天的枯燥乏味而忧愁吗?

今天就让刚学习爬虫0.01天的小菜鸟为您奉上表情包大餐吧!

首先我们先了解一下爬虫的基本流程(小菜鸟理解):

  • 锁定需求,搜索网址
  • 分析网页,解析方法
  • 仔细思考,数据保存
  • 仔细测试,代码实现
  • (程序优化,效率提高)
  • 代码封装,较优体现

一、知识准备

  1. 基础知识列表
  • 字符串
  • 字典
  • 列表及其遍历
  1. 准备工具

二、功能解析与实现

1.引入库

  • requests 用于对网页发起请求
  • lxml 用于网页的解析利用标签进行定位和获取
  • os 在最后处理图片时使用,拿取后缀

代码如下:

import os
import requests
from lxml import etree

2.请求准备

代码如下

# 搜索到的符合需求的网址
url="爬取的网址"
# 爬虫伪装---在网页Request headers中有我们想要的参数---由于网站简单无需进行更多伪装
headers={
'user-agent':'...' # 此网站只需ua即可爬取
}

为什么要进行伪装呢?
首先我们先要了解一下我们搜索网址并且进入网站时我们会携带什么:
访问者的ip地址、访问者的user-agent、访问者的host…(具体查看可以到访问的网站的Requests Headers中查看)
而爬虫直接访问网站会携带什么呢?爬虫标志
而网站很容易就可以辨别爬虫然后拒绝爬虫的访问——反爬
(网站反爬还有很多的措施技术,这里只是片面的了解一下反爬)
然后回归正题,将上网者携带的信息让爬虫带上不就好了嘛。

3.发起请求

网站请求方式以getpost为主,根据网站的要求选择不同的请求方式。

代码如下

response=requests.get(url,headers=headers)
print(response)
# 如果此处得到的是[response<200>]即请求成功

4.数据解析

代码如下

html=etree.HTML(response.text)
# 数据列表
data_list = html.xpath('//*[@id="app"]/div[1]/div/div[1]//div') # xpath语法
# 列表取值--遍历
for data in data_list[1:]: # 索引从1开始可从网站上观察而得
     img_list = data.xpath('./a/div//img') # 层层解析
     for imag in img_list:
         imag_url = "https:" + imag.xpath('@src')[0] # 拿到图片网址

5.数据保存

代码如下

# 图片名称简单表示
idx=1
# 数据保存---文件名+数据保存方式
with open('./image/第%d张' % idx + os.path.splitext(imag_url)[-1], 'wb') as file:
             resp = requests.get(imag_url, headers=headers).content # 图片二进制码保存
             file.write(resp)
             idx+=1
             print("第%d张保存成功"%idx)
         

6.成果展示

图片在这里哦(这里只是简单展示哦)

在这里插入图片描述
在这里插入图片描述

三、普通代码展示

代码如下(这里只抓取了第一页的数据哦)

import os.path
import requests
from lxml import etree

# 网页准备,伪装
url = '...'
headers = {
    'user-agent': '...'
}
# 发起请求
response = requests.get(url, headers=headers)

# 数据解析
html = etree.HTML(response.text)
data_list = html.xpath('//*[@id="app"]/div[1]/div/div[1]//div')
idx = 0
for data in data_list[1:]:
    img_list = data.xpath('./a/div//img')
    for imag in img_list:
        imag_url = "https:" + imag.xpath('@src')[0]
        # 数据保存
        with open('./image/第%d张' % idx + os.path.splitext(imag_url)[-1], 'wb') as file:
            resp = requests.get(imag_url, headers=headers).content
            file.write(resp)
        idx += 1
        print('第%d张保存成功' % idx)
# 程序结束提醒
print('保存成功')

四、封装代码展示

import os
import requests
from lxml import etree


class Emojis(object):
    def __init__(self):
        self.url = '...'
        self.headers = {
            'user-agent': '...'
        }
        self.idx = 1

    def send_request(self, url):
        resp = requests.get(url, headers=self.headers)
        if resp.status_code == 200:
            return resp.text
        else:
            return None

    def analysis(self, resp):
        html = etree.HTML(resp)
        data_list = html.xpath('//*[@id="app"]/div[1]/div/div[1]//div')
        for data in data_list[1:]:
            img_list = data.xpath('./a/div//img')
            for imag in img_list:
                imag_url = "https:" + imag.xpath('@src')[0]
                self.save(imag_url)

    def save(self, img_url):
        with open('./image/%d' % self.idx + os.path.splitext(img_url)[-1], 'wb') as file:
            resp = requests.get(img_url, headers=self.headers).content
            file.write(resp)
            print("第%d张保存成功!" % self.idx)
            self.idx += 1

    def run(self):
    	n=int(input("请输入想要爬取的页数:"))
        for num in range(1, n):
            resp = self.send_request(self.url.format(num))
            if len(resp) == 0:
                print("你已经被反爬了!")
            else:
                self.analysis(resp)


if __name__ == '__main__':
    spider = Emojis()
    spider.run()

具体网址想要的小伙伴可以私信我哦——网站隐私不便于透露

总结

本文简单实现了使用Python工具,利用xpath解析方法爬取某表情包网站的程序,欢迎热爱爬虫的小伙伴们一起学习交流呀。
第一次写拉么长的博客┭┮﹏┭┮加之语言表达能力有限,希望各位大佬们对我的文章进行友好批判和指导┭┮﹏┭┮。
呜呼呼

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

表情包(图片)自生产——Python爬虫xpath实现 的相关文章

随机推荐

  • JAVA根据模板生成PDF文件并导出

    JAVA根据模板生成并导出PDF 实现功能 根据模板生成PDF文件 模板文件参数可配 可手动修改 一 PDF导出效果 先看一下导出的demo文件 具体样式可手动修改 下图为demo pdf ftl导出PDF文件 下图为list pdf ft
  • 图像分割之Unet解析及实现代码

    Unet解析及实现代码 论文连接 https arxiv org pdf 1505 04597 pdf 源码连接 https github com FENGShuanglang unet 图像分割 Unet网络结构详解 Unet网络结构 o
  • c++ auto关键字使用

    C 11 auto可以在声明变量的时候根据变量初始值的类型自动为此变量选择匹配的类型 类似的关键字还有decltype 举个例子 int a 10 auto au a a 自动类型推断 au a为int类型 cout lt lt typei
  • 在 NLP 中训练 Unigram 标记器

    介绍 单个标记称为 unigram Unigram 标记器是一种只需要一个单词来推断单词的词性标记器类型 它有一个单词的上下文 NLTK库为我们提供了UnigramTagger 并从NgramTagger继承而来 在本文中 让我们了解 Un
  • UDP实现点对点聊天(多线程)-C语言

    UDP实现点对点聊天 多线程 服务器端 操作步骤 1 编译 gcc UDPM c lws2 32 lmycon lwinmm o UDPM exe 2 运行 UDPM include
  • umi框架编写简单的验证码登录

    首先我们需要先创建一个layouts的文件夹 用来存储跳转动画的文件 layouts的文件夹和pages同级 然后在pages中创建一个login文件夹用来存储登录文件 然后再里面创建login和index文件开始编写代码 接下来就是废话不
  • 开开心心带你学习MySQL数据库之第六篇下

    插入查询结果 把查询和新增联合起来 把查询结果作为新增的数据 例子 把student1表的查询结果作为新增数据插入到student2表中 create table student1 id int name varchar 20 create
  • 英伟达闲着没事,做了一个超级逼真的人脸生成AI系统!

    Nvidia 英伟达的人脸面部表情方法真的是GAN 风格 一种新的生成性对抗网络方法让技术观察者摸不着头脑 图像如何虚假而又看起来如此真实 研究人员在一段视频中说 我们想出了一种新的发生器 可以自动学习分离图像的不同方面而无需任何人为监督
  • 3阶Hermitian正定矩阵Cholesky分解通用表达式

    pdf文件 算法原理 将一个 n n n阶Hermitian正定矩阵 A A A分解为一个下三角矩阵 L L
  • java拦截通过url访问页面,必须通过登录页面访问目标页面

    在web xml中配置过滤
  • ROS AGV 笔记

    Ubuntu18 04 install of ROS Melodic 1 Installation 1 1 Configure your Ubuntu repositories 1 2 Setup your sources list sud
  • STM32_USART

    1 时钟使能 RCC APB2PeriphClockCmd RCC APB2Periph USART1 RCC APB2Periph GPIOA ENABLE USART1 GPIOA 2 引脚配置 GPIO InitTypeDef GPI
  • 二叉树的层序遍历(广度优先遍历)

    二叉树的层序遍历 Name 二叉树的层序遍历 Copyright Author lkm Date 01 04 22 21 47 include
  • Web开发权威指南笔记(三)

    书 Web开发权威指南 美 Chris Aquino Todd Gandee著 为3rd实战项目Chattrbox练习以及代码整理 全为个人借鉴本书产出 若需要转载请联系通知我 请尊重原创 谢谢 整理了大概8天了 内容比较多 很多重点都整理
  • Eigen: C++开源矩阵计算工具——Eigen的简单用法

    Eigen非常方便矩阵操作 当然它的功能不止如此 由于本人只用到了它的矩阵相关操作 所以这里只给出了它的一些矩阵相关的简单用法 以方便快速入门 矩阵操作在算法研究过程中 非常重要 例如在图像处理中二维高斯拟合求取光斑中心时使用Eigen提供
  • Android优秀开源项目汇总

    UI相关 图片 Android Universal Image Loader com nostra13 universalimageloader 异步加载 缓存 显示图片 ImageLoader com novoda imageloader
  • multipartFile.getOriginalFilename();不能获取原文件名称,也就是含有路径名

    一直在debug 发现只能获取文件名 进去看源代码 翻译过来就是 返回客户端文件系统中的原始文件名 p 这可能包含路径信息 取决于所使用的浏览器 但它通常不会与opera浏览器有关 只是可能包含路径名 所以我试了360浏览器 谷歌 火狐都只
  • 进程和线程的区别和联系

    一 简介 进程 进程是操作系统资源分配的基本单位 进程是指正在运行的程序实例 每个进程都有自己的内存空间 代码 数据和资源 操作系统通过管理进程来控制计算机的资源分配 每个进程都有一个唯一的标识符 称为进程 ID 以便操作系统可以识别和管理
  • Adapter 适配器基础讲解

    Adapter 适配器基础讲解 1 MVC模式的简单理解 在开始学习 Adapter 之前我们要来了解下这个 MVC 模式概念 举个例子 大型的商业程序通常由多人一同开 发完成 比如有人负责操作接口的规划与设计 有人负责程序代码的编写如果要
  • 表情包(图片)自生产——Python爬虫xpath实现

    文章目录 严正声明 爬虫应严格遵守国家的相关法律法规 坚决做一只文明爬虫 前言 一 知识准备 二 功能解析与实现 1 引入库 2 请求准备 3 发起请求 4 数据解析 5 数据保存 6 成果展示 三 普通代码展示 四 封装代码展示 总结 严