记疫情在家爬表情包 - 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}秒!')
我这里每保存一张都有休眠,耗时比较长,花了我三分钟。