前言: 每次发表情包的时候总是会愁自己表情包太少了,用来用去就那些,很头疼,现在写一个爬虫爬取表情包,以后再也不用愁没表情包了!
爬取的网站网址为:表情包网址
先来看看网站长啥样
看到这么多表情包就很开心,一个一个保存太麻烦了,爬就完事了!
源代码:
# _*_ 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)
只要运行以上代码,便会爬取海量表情包,这些表情包会保存在代码所在文件夹里的一个子文件夹中。有了这些表情包,就可以尽情去斗图了^ _ ^。