日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

爬虫小案例:基于Bing关键词批量下载图片(第二版)

發(fā)布時間:2024/7/5 编程问答 72 豆豆
生活随笔 收集整理的這篇文章主要介紹了 爬虫小案例:基于Bing关键词批量下载图片(第二版) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、需求:

基于Bing網(wǎng)站,輸入關鍵詞,批量下載圖片保存到本地

二、代碼展示:

import requests from lxml import etree import os from multiprocessing.dummy import Pool import json from time import time# 作用:按關鍵字、圖片數(shù)量爬取必應圖片,存放到指定路徑。 # 使用方法:只需運行一條命令 BingImagesSpider('美女壁紙', 200, 'E:\images').run() class BingImagesSpider:thread_amount = 1000 # 線程池數(shù)量,線程池用于多IO請求,減少總的http請求時間per_page_images = 30 # 每頁必應請求的圖片數(shù)count = 0 # 圖片計數(shù)success_count = 0# 忽略圖片標簽的一些字符ignore_chars = ['|', '.', ',', ',', '', '', '/', '@', ':', ':', ';', ';','[', ']', '+']# 允許的圖片類型image_types = ['bmp', 'jpg', 'png', 'tif', 'gif', 'pcx', 'tga', 'exif','fpx', 'svg', 'psd', 'cdr', 'pcd', 'dxf', 'ufo', 'eps', 'ai','raw', 'WMF', 'webp']# 請求頭headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36'}# 必應圖片 urlbing_image_url_pattern = 'https://www.bing.com/images/async?q={}&first={}&count={}&mmasync=1'def __init__(self, keyword, amount, path='./'):# keyword: 需爬取的關鍵字# amount: 需爬取的數(shù)量# path: 圖片存放路徑self.keyword = keywordself.amount = amountself.path = pathself.thread_pool = Pool(self.thread_amount)def __del__(self):self.thread_pool.close()self.thread_pool.join()# 作用:從必應請求圖片def request_homepage(self, url):# url: 必應圖片頁的 urlreturn requests.get(url, headers=self.headers)# 作用:解析必應網(wǎng)頁,得到所有圖片的信息,封裝到列表中返回# 每個圖片的信息以字典對象存儲,字典的鍵包括 image_title, image_type, image_md5, image_urldef parse_homepage_response(self, response):# response: 必應網(wǎng)站的響應# 獲取各圖片信息所在的json格式字符串 mtree = etree.HTML(response.text)m_list = tree.xpath('//*[@class="imgpt"]/a/@m')# 對每個圖片分別處理info_list = []for m in m_list:dic = json.loads(m)# 去除一些文件名中不允許的字符image_title = dic['t']for char in self.ignore_chars:image_title = image_title.replace(char, ' ')image_title = image_title.strip()# 有些圖片的信息中不包含圖片格式,該情況將圖片設置為 jpg 格式image_type = dic['murl'].split('.')[-1]if image_type not in self.image_types:image_type = 'jpg'# 將每個圖片的信息存為字典格式info = dict()info['image_title'] = image_titleinfo['image_type'] = image_typeinfo['image_md5'] = dic['md5']info['image_url'] = dic['murl']print(info)info_list.append(info)return info_list# 請求具體圖片,保存到初始化時指定的路徑def request_and_save_image(self, info):# info: 每個圖片的信息,以字典對象存儲。字典的鍵包括 image_title, image_type, image_md5, image_urlfilename = '{} {}.{}'.format(self.count, info['image_title'],info['image_type'])filepath = os.path.join(self.path, filename)try:# 請求圖片response = requests.get(info['image_url'], headers=self.headers,timeout=1.5)# 保存圖片try:with open(filepath, 'wb') as fp:fp.write(response.content)except:pass# 打印日志self.count += 1self.success_count += 1print('{}: saving {} done.'.format(self.count, filepath))except requests.exceptions.RequestException as e:self.count += 1print('{}: saving {}failed. url: {}'.format(self.count, filepath,info['image_url']))print('\t tip:', e)# 作用:圖片信息的列表去重,去除重復的圖片信息def deduplication(self, info_list):result = []# 用圖片的 md5 做為唯一標識符md5_set = set()for info in info_list:if info['image_md5'] not in md5_set:result.append(info)md5_set.add(info['image_md5'])return result# 作用:運行爬蟲,爬取圖片def run(self):# 創(chuàng)建用于保存圖片的目錄if not os.path.exists(self.path):os.mkdir(self.path)# 根據(jù)關鍵詞和需要的圖片數(shù)量,生成將爬取的必應圖片網(wǎng)頁列表homepage_urls = []for i in range(int(self.amount / self.per_page_images * 1.5) + 1): # 由于有些圖片會重復,故先請求1.5倍圖片,豁免url = self.bing_image_url_pattern.format(self.keyword,i * self.per_page_images,self.per_page_images)homepage_urls.append(url)print('homepage_urls len {}'.format(len(homepage_urls)))# 通過線程池請求所有必應圖片網(wǎng)頁homepage_responses = self.thread_pool.map(self.request_homepage,homepage_urls)# 從必應網(wǎng)頁解析所有圖片的信息,每個圖片包括 image_title, image_type, image_md5, image_url 等信息。info_list = []for response in homepage_responses:result = self.parse_homepage_response(response)info_list += resultprint('info amount before deduplication', len(info_list))# 刪除重復的圖片,避免重復下載info_list = self.deduplication(info_list)print('info amount after deduplication', len(info_list))info_list = info_list[: self.amount]print('info amount after split', len(info_list))# 下載所有圖片,并保存self.thread_pool.map(self.request_and_save_image, info_list)print('all done. {} successfully downloaded, {} failed.'.format(self.success_count, self.count - self.success_count))if __name__ == '__main__':# 關鍵詞:美女壁紙# 需要的圖片數(shù)量:100# 圖片保存路徑:'D:\images'start = time()BingImagesSpider('美女壁紙', 100, 'D:\images').run()print(time() - start)

?

總結

以上是生活随笔為你收集整理的爬虫小案例:基于Bing关键词批量下载图片(第二版)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 六月激情综合 | 伊人影音| 人人澡人人插 | 午夜激情福利视频 | 久久久午夜视频 | 色就是色欧美色图 | 日本五十肥熟交尾 | 亚洲av无码一区二区三区四区 | 国产欧美日韩精品在线 | 乡村性满足hd | 台湾无码一区二区 | 91噜噜噜 | 青青草国产在线视频 | 成年人网站黄色 | 1769国产精品 | 日韩激情小说 | 激情综合啪啪 | 超碰在线亚洲 | 老女人做爰全过程免费的视频 | 精品欧美一区二区精品少妇 | 久久久精品人妻一区二区三区四 | 综合久久一区二区 | 自拍日韩亚洲一区在线 | 免费在线观看中文字幕 | 黄色免费大片 | 黄色生活毛片 | 你懂的网址在线观看 | 中国免费观看的视频 | www.jizzcom| 亚洲日本护士毛茸茸 | 久久精品无码毛片 | 精品无码一区二区三区免费 | 性欧美大战久久久久久久免费观看 | 国产精品国产精品国产专区蜜臀ah | 久草网视频在线观看 | 最新中文在线视频 | 女18毛片 | 日本啪啪啪一区二区 | 日产精品久久久久久久蜜臀 | 亚洲精品久久久久久久久久吃药 | 校园春色自拍偷拍 | 免费无码毛片一区二三区 | 中文在线免费观看 | 波多野结衣中文字幕一区 | 国产精品电影一区二区 | 一级大片视频 | 久久精品99久久久 | 午夜亚洲| 色狠狠av| 国产自产自拍 | av片在线看| 黄色在线网站 | 中文字幕人妻无码系列第三区 | 欧美一级α片 | 九九视频在线播放 | 中文字幕无码精品亚洲35 | 天天毛片 | 天天操人人爽 | 日韩精品一区二区不卡 | 五月天国产精品 | 久久一二 | 超碰2019| aaaa黄色| 九九久视频 | 无遮挡毛片 | 免费看黄色片子 | 精品国产伦一区二区三 | 久久精品4 | av黄色一级片 | 57pao国产成永久免费视频 | 精品久久久免费 | 中国国语农村大片 | 成人免费看毛片 | 综合五月网 | 国产成年人视频网站 | 日韩一区二区免费看 | 日韩欧美99 | 日本一级淫片色费放 | 欧美资源在线观看 | 中文字幕一区二区精品 | 亚洲第6页 | 青青草成人免费在线视频 | 欧美天堂视频 | 国产99久久久国产精品 | 夜色一区 | 强伦人妻一区二区三区视频18 | 一区二区三区黄色片 | 亚洲一区二区在线观看视频 | 深夜激情网 | 91香蕉嫩草 | 亚洲国产一区二区在线 | 长篇高h肉爽文丝袜 | 美女擦边视频 | 国产一区视频观看 | 波多野42部无码喷潮 | 黄色生活毛片 | 黄色在线a| 国产91在线视频观看 | 男人天堂avav |