Python实战——表情包爬虫,让你拥有数之不尽的表情包(^_^)

前言: 每次发表情包的时候总是会愁自己表情包太少了,用来用去就那些,很头疼,现在写一个爬虫爬取表情包,以后再也不用愁没表情包了!

爬取的网站网址为:表情包网址

先来看看网站长啥样

看到这么多表情包就很开心,一个一个保存太麻烦了,爬就完事了!

源代码:

#  _*_ coding: utf-8 _*_

'''
Author:Chen Wei

date: 23:12

Repetition is  the key to success!
'''

import time
import os
import concurrent.futures

import requests
import parsel


"""图片保存文件夹"""
dirname = 'images'
if not os.path.exists(dirname):
    os.makedirs(dirname)    # 文件不存在就新生成一个文件夹(使用的相对路径)
    os.chdir(dirname)     # 更换当前的文件夹到新创建的那个去
else:                        # 如果已经存在
    os.chdir(dirname)

def get_img_urls(url):
    """下载图片"""
    response = requests.get(url)
    html = response.text   # 网页源代码
    '''解析网页中的内容'''
    sel = parsel.Selector(html)
    divs = sel.css('.tagbqppdiv')    # 获取相应的css文件
    for div in divs:
        link = div.css('img.ui::attr(data-original)').extract_first()
        name = div.css('a::attr(title)').extract_first()
        yield link, name

def download_img(link:str,name:str):
    '''下载并保存图片'''
    try:
        suffix = link.split('.')[-1]
        response = requests.get(link)
        with open(name + '.' + suffix, mode='wb') as f:
            f.write(response.content)
    except OSError:
        print('文件名非法')

def main():
    url = 'https://fabiaoqing.com/biaoqing/lists/page/2.html'
    links = get_img_urls(url)
    for link in links:
        download_img(*link)


if __name__ == '__main__':
    executor1 = concurrent.futures.ThreadPoolExecutor(max_workers=10)    # 实例化一个由10个线程的多线程对象
    url = 'https://fabiaoqing.com/biaoqing/lists/page/{page}.html'
    links = get_img_urls(url)
    start_time = time.time()
    for link in links:
        executor1.submit(download_img,*link)     # 多线程调用
    executor1.shutdown()     # 发出让执行者释放所有资源的信号
    print(time.time() - start_time)

只要运行以上代码,便会爬取海量表情包,这些表情包会保存在代码所在文件夹里的一个子文件夹中。有了这些表情包,就可以尽情去斗图了^ _ ^。

你可能感兴趣的:(python随笔)