记疫情在家爬表情包 - Python

 

青春有几年,疫情占三年。最近疫情它又又又又又双叒叕在某些地区有苗头了。为了配合当地疫情防控指挥部门,不给国家和社会添乱,只能在家撸撸代码,爬点表情用于群聊斗图。代码来了:

 1 """
 2     疫情,它又来了,我们只能在家爬表情包
 3 """
 4 
 5 import requests
 6 import parsel
 7 import os
 8 import re
 9 import time
10 import concurrent.futures
11 
12 # 首先是更改windows下标题的一个函数
13 def change_title(title):
14     pattern = re.compile(r'[\\\/\:\*\?\"\<\>\|]')
15     new_title = re.sub(pattern, '_', title) # 批量替换title里的特殊字符
16     return new_title
17 
18 # 爬虫部分
19 def get_response(page_url):
20     # 获取网页的回文
21     headers = {
22         'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36',
23     }
24     response = requests.get(url=page_url, headers=headers)
25     response.raise_for_status()
26     response.encoding = response.apparent_encoding
27     response.encoding = 'utf-8'
28     return response
29 
30 # 保存部分
31 def save_img(title, img_url, format_name):
32     filePath = 'img'
33     img_content = get_response(img_url).content # 利用上面的函数获取图片的二进制数据
34     if not os.path.exists(filePath):
35         os.mkdir(filePath)
36         print('文件夹创建成功!')
37     try:
38         with open('img\\' + title + '.' + format_name, mode='wb') as f:
39             f.write(img_content) # 写入数据
40             time.sleep(1) # 休眠一秒
41             print('正在保存----------------->', title)
42     except:
43         print('有异常,请检查!')
44 
45 # 主函数
46 def main(page_url):
47     html_data = get_response(page_url).text
48     selector = parsel.Selector(html_data) # 选择器
49     items = selector.xpath('//div[@class="ui segment imghover"]/div')
50     for item in items:
51         img_url = item.css('img::attr(data-original)').get() # 获取图片原始地址
52         title = item.css('img::attr(alt)').get() # 获取图片标题
53         format_name = img_url.split('.')[-1] # 取到图片格式
54         new_title = change_title(title) # 改变标题
55         save_img(title=new_title, img_url=img_url, format_name=format_name) # 保存
56 
57 # 运行主程序
58 if __name__ == '__main__':
59     startTime = time.time() # 程序开始运行时间
60     app = concurrent.futures.ThreadPoolExecutor(max_workers=10)
61     for page in range(1, 101):
62         url = f'https://fabiaoqing.com/biaoqing/lists/page/{page}.html'
63         app.submit(main, url)
64     app.shutdown()
65     endTime = time.time()
66     allTime = int(endTime) - int(startTime)
67     print(f'程序总共耗时:{allTime}秒!')

我这里每保存一张都有休眠,耗时比较长,花了我三分钟。

 

 

posted @ 2022-03-14 16:44  、一叶孤城  阅读(188)  评论(0编辑  收藏  举报