爬取海量表情包,让你表情包仓库持续更新,成为群里的图王(附代码)

烈酒焚心 提交于 2020-04-28 20:12:04

 

前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

看到小伙伴一张又一张不知道从何而来的表情包是不是有点羡慕?

今天小编就带大家,使用python爬取网站表情包,打造一个自己的表情包图库,让大家斗图从此永无败绩

知识点:

requests 的简单使用

css选择器的简单使用

os模块操作文件夹

文件保存

开发环境:

1.python环境:annaconda5.2.0(python3.6.5)

2.编辑器:pycharm

 分析:

F12检查来获取图片在源代码的位置

 

 

每一次请求的url参数,几乎都一样,只有一个参数是不同的,那就是pn,它指的是当前页面中已经展示的图片数目。

我们所需要的信息都已经找到,那么开始编写代码吧

代码如下:

import requests
import parsel  #pip install parsel
import os
import concurrent.futures

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
}


def get_image_url(url):
    #url = 'https://www.fabiaoqing.com/bqb/lists/type/hot/page/1.html'
    # 发送网络请求获取网业数据
    response = requests.get(url, headers=headers)
    html = response.text
    # 对数据进行筛选
    sel = parsel.Selector(html)
    image_links = sel.css('a.bqba::attr(href)').getall()
    return image_links


def get_image_info(url):
    # url = 'https://www.fabiaoqing.com/bqb/detail/id/53912.html'
    response = requests.get(url, headers=headers)
    html = response.text
    sel = parsel.Selector(html)
    image_url_list = sel.css('img.bqbppdetail.lazy::attr(data-original)').getall()
    folder_name = sel.css('h1.ui.header::text').re('\w+')[0]
    print('正在下载\t{}\t表情包系列'.format(folder_name))
    return folder_name, image_url_list


def save(folder_name, image_url_list):
    for url in image_url_list:
        folder_path = '表情包/{}'.format(folder_name)
        if not os.path.exists(folder_path):
            os.mkdir(folder_path)
        image_name = url.split('/')[-1]
        file_path = folder_path + '/' + image_name
        with open(file_path, mode='wb') as f:
            f.write(requests.get(url, headers=headers).content)


def download_image(page_num):
    url_links = get_image_url('https://www.fabiaoqing.com/bqb/lists/type/hot/page/{}.html'.format(page_num))
    for url_link in url_links:
        url_link = 'https://www.fabiaoqing.com' + url_link
        folder_name, image_url_list = get_image_info(url_link)
        save(folder_name, image_url_list)


if __name__ == '__main__':
    thread_pool = concurrent.futures.ThreadPoolExecutor(max_workers=100)
    for i in range(1, 1041):
        thread_pool.submit(download_image, i)
    thread_pool.shutdown()

 

最终效果图:

 

今天也是闲的无聊,看到好多沙雕图,就想爬下来,心情一好就爬了100页哈哈~面对五千多张表情包我也是很快乐的~

PS:如果你处于想学Python或者正在学习Python,Python的教程不少了吧,但是是最新的吗?说不定你学了可能是两年前人家就学过的内容,在这小编分享一波2020最新的Python教程。获取方式,私信小编 “ 资料 ”,即可免费获取哦!

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!