多线程带你采集表情包数据,带你体验超速快乐~

前言 😋

大家早好、午好、晚好吖~

开发环境以及模块使用

  • Python 3.6

  • Pycharm

  • requests

  • parsel

  • re

在这里插入图片描述

单线程代码

import requests # 第三方模块 是需要我们安装 pip instlal requests  read time out
import parsel # 第三方模块 pip install parsel
import re
import time
def change_title(title):
    mode = re.compile(r'[\\\/\:\*\?\"\<\>\|]')
    new_title = re.sub(mode, "_", title)
    return new_title

time_1 = time.time()
# 请求网址
for page in range(1, 11):
    url = f'https://www.fabiaoqing.com/biaoqing/lists/page/{page}.html'
    # 请求头
    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'
    }
    # 返回网页源代码
    response = requests.get(url=url, headers=headers)
    # print(response.text)
    # 解析数据   re css xpath
    selector = parsel.Selector(response.text) # 把respons.text 转换成 selector 对象
    # 第一次提取 提取所有的div标签内容
    divs = selector.css('#container div.tagbqppdiv') # css 根据标签提取内容
    for div in divs:
        # 通过标签内容提取他的图片url地址
        img_url = div.css('img::attr(data-original)').get()
        # 提取标题
        title = div.css('img::attr(title)').get()
        # 获取图片的后缀名
        name = img_url.split('.')[-1]
        # 保存数据
        # 因为文件命名不明还有 特殊字符 所以我们需要通过正则表达式 替换掉特殊字符
        new_title = change_title(title)
        # 对表情包图片发送请求 获取它二进制数据
        img_content = requests.get(url=img_url, headers=headers).content
        # 保存数据
        try:
            with open('img\\' + new_title + '.' + name, mode='wb') as f:
                # 写入图片二进制数据
                f.write(img_content)
                print('正在保存:', title)
        except:
            pass

time_2 = time.time()

use_time = int(time_2) - int(time_1)
print(f'总共耗时:{use_time}秒')

源码、解答、教程加Q裙:261823976 点击蓝字加入【python学习裙】

请添加图片描述

多线程代码

import requests # 第三方模块 是需要我们安装 pip instlal requests  read time out
import parsel # 第三方模块 pip install parsel
import re
import time
import concurrent.futures # 线程池



def change_title(title):
    """替换标题中的特殊字符"""
    mode = re.compile(r'[\\\/\:\*\?\"\<\>\|]')
    new_title = re.sub(mode, "_", title)
    return new_title


def get_response(html_url):
    """对网站发送请求"""
    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'
    }
    repsonse = requests.get(url=html_url, headers=headers)
    return repsonse


def save(title, img_url, name):
    """保存数据"""
    img_content = get_response(img_url).content
    try:
        with open('img\\' + title + '.' + name, mode='wb') as f:
            # 写入图片二进制数据
            f.write(img_content)
            print('正在保存:', title)
    except:
        pass


def main(html_url):
    """主函数"""
    html_data = get_response(html_url).text
    selector = parsel.Selector(html_data) # 把respons.text 转换成 selector 对象
    # 第一次提取 提取所有的div标签内容
    divs = selector.css('#container div.tagbqppdiv') # css 根据标签提取内容
    for div in divs:
        # 通过标签内容提取他的图片url地址
        img_url = div.css('img::attr(data-original)').get()
        # 提取标题
        title = div.css('img::attr(title)').get()
        # 获取图片的后缀名
        name = img_url.split('.')[-1]
        # 保存数据
        # 因为文件命名不明还有 特殊字符 所以我们需要通过正则表达式 替换掉特殊字符
        new_title = change_title(title)
        save(new_title, img_url, name)


if __name__ == '__main__':
    time_1 = time.time()
    exe = concurrent.futures.ThreadPoolExecutor(max_workers=10)
    for page in range(1, 201):
        url = f'https://www.fabiaoqing.com/biaoqing/lists/page/{page}.html'
        exe.submit(main, url)
    exe.shutdown()
    time_2 = time.time()
    use_time = int(time_2) - int(time_1)
    print(f'总共耗时:{use_time}秒')

尾语 💝

好了,我的这篇文章写到这里就结束啦!

有更多建议或问题可以评论区或私信我哦!一起加油努力叭(ง •_•)ง

喜欢就关注一下博主,或点赞收藏评论一下我的文章叭!!!

请添加图片描述
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值