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

本文是一篇针对初学者的Python爬虫教程,详细介绍了如何使用requests和lxml库来爬取网页上的表情包图片。首先强调爬虫需遵守法律法规,然后逐步讲解了请求准备、发起请求、数据解析、数据保存的过程,包括如何处理反爬机制和图片保存的细节。最后提供了一个简单的爬虫类封装示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



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

在这里插入图片描述

前言

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

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

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

今天就让刚学习爬虫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解析方法爬取某表情包网站的程序,欢迎热爱爬虫的小伙伴们一起学习交流呀。
第一次写拉么长的博客┭┮﹏┭┮加之语言表达能力有限,希望各位大佬们对我的文章进行友好批判和指导┭┮﹏┭┮。
呜呼呼

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值