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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

2021-03-10 Python多线程爬虫快速批量下载图片

發(fā)布時(shí)間:2025/3/21 python 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2021-03-10 Python多线程爬虫快速批量下载图片 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Python多線程爬蟲快速批量下載圖片

1、完成這個(gè)需要導(dǎo)入的模塊

urllib,random,queue(隊(duì)列),threading,time,os,json

第三方模塊的安裝

鍵盤win+R,輸入cmd,來到命令窗口

對(duì)于urllib模塊,安裝代碼pip install urllib3

?

2、怎樣多線程爬取圖片

首先,我們需要來到這個(gè)網(wǎng)址

https://www.quanjing.com/

然后輸入關(guān)鍵字,來到另外一個(gè)界面,如 我輸入 風(fēng)景

查看一下源代碼,可以發(fā)現(xiàn),這些圖片的下載鏈接應(yīng)該不是直接寫在網(wǎng)址內(nèi)的,我們點(diǎn)擊鼠標(biāo)右鍵,點(diǎn)擊檢查,點(diǎn)擊Network,點(diǎn)擊XHR,按F5刷新,可以發(fā)現(xiàn)XHR下面有這些圖片的下載鏈接。

這樣我們就只需要這個(gè)網(wǎng)址就可以得到這一頁所以圖片的下載鏈接了。

https://www.quanjing.com/Handler/SearchUrl.ashx?t=8102&callback=searchresult&q=%E9%A3%8E%E6%99%AF&stype=1&pagesize=100&pagenum=1&imageType=2&imageColor=&brand=&imageSType=&fr=1&sortFlag=1&imageUType=&btype=&authid=&_=1584067448531

通過多個(gè)這樣的網(wǎng)址進(jìn)行分析可以發(fā)現(xiàn),‘t=’后面的參數(shù)應(yīng)該是一個(gè)四位的隨機(jī)數(shù),‘q=’后面的參數(shù)應(yīng)該是自己輸入圖片的類型,也就是 風(fēng)景,只不過這里對(duì)于它進(jìn)行編碼罷了,‘pagnum=’后面的參數(shù)是第幾頁的意思,網(wǎng)址中**‘pagesize=100’**標(biāo)明每頁應(yīng)該一百張圖片,而總的頁碼數(shù)在這上有

?

最后面的那個(gè)參數(shù)值應(yīng)該是一個(gè)時(shí)間戳,通過處理得到的。

這樣我們就可以得到爬取多頁的圖片了。不過,進(jìn)行爬取的時(shí)候,可以發(fā)現(xiàn),就算得到了這個(gè)網(wǎng)址,也得不到這些數(shù)據(jù),這個(gè)時(shí)候,我們可以來到這個(gè)網(wǎng)址的請(qǐng)求頭那里,通過多次實(shí)驗(yàn)可以發(fā)現(xiàn)只需在請(qǐng)求頭中加上:Referer:即可

這里為了讓服務(wù)器認(rèn)為我們是瀏覽器訪問的,我們可以在請(qǐng)求頭上添加:User-Agent

代碼如下:

def get_time(): # 時(shí)間戳處理 str_time = str(time.time()) str_time = str_time[:str_time.find('.')] + str_time[str_time.find('.') + 1:str_time.find('.') + 4] time.sleep(1.25) # 沒得到一個(gè)時(shí)間戳,休眠1.25秒 return str_time ?????? def get_url(): keyword = input('請(qǐng)輸入你想下載的圖片類型:') key_word = parse.urlencode({'q': keyword}) num=int(input('請(qǐng)輸入你想下載的圖片數(shù)量:'))//100 headers = { "Referer": "https://www.quanjing.com/search.aspx?%s" % (key_word), "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400"} url='https://www.quanjing.com/Handler/SearchUrl.ashx?t=%s&callback=searchresult&%s&stype=1&pagesize=100&pagenum=%s&imageType=2&imageColor=&brand=&imageSType=&fr=1&sortFlag=1&imageUType=&btype=&authid=&_=%s' list_url=[] for i in range(1,num+1): str_1 = str(random.random()) random_1 = str_1[str_1.find('.') + 1:str_1.find('.') + 5] time_1=get_time() url_1=url%(random_1,key_word,i,time_1) list_url.append(url_1) return list_url,headers,keyword

?

通過這樣我們就可以得到圖片的下載鏈接了,后面只需多線程下載即可。不過,在多線程下載過程,發(fā)現(xiàn)下載的圖片的數(shù)量遠(yuǎn)遠(yuǎn)低于自己輸入的圖片數(shù)量,其實(shí)這是因?yàn)閳D片同名的原因,我們可以在圖片名稱前面添加一個(gè)隨機(jī)隨機(jī)數(shù)即可;

運(yùn)行:

也許輸入完成之后,會(huì)達(dá)不到自己輸入的圖片數(shù)量程序就自動(dòng)結(jié)束了,建議多試幾次。

完成之后,我們可以查看一下當(dāng)前文件夾下面會(huì)多了一個(gè)文件夾,所下載的圖片就在里面

為了知道我們下載的圖片的數(shù)量,我們可以這樣:

???????

import oslist_1=os.listdir('E:\Pycharm_1\爬蟲\中國')for i in range(len(list_1)): print(i+1,list_1[i])

?

運(yùn)行結(jié)果:

這樣就發(fā)現(xiàn)這里有400張圖片。

3、完整代碼如下

import urllib.parse as parse

from urllib import requestimport randomfrom queue import Queueimport threadingimport timeimport jsonimport osdef get_time(): # 時(shí)間戳處理 str_time = str(time.time()) str_time = str_time[:str_time.find('.')] + str_time[str_time.find('.') + 1:str_time.find('.') + 4] time.sleep(1.25) # 沒得到一個(gè)時(shí)間戳,休眠1.25秒 return str_time def get_url(): keyword = input('請(qǐng)輸入你想下載的圖片類型:') key_word = parse.urlencode({'q': keyword}) num=int(input('請(qǐng)輸入你想下載的圖片數(shù)量:'))//100 headers = { "Referer": "https://www.quanjing.com/search.aspx?%s" % (key_word), "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400"} url='https://www.quanjing.com/Handler/SearchUrl.ashx?t=%s&callback=searchresult&%s&stype=1&pagesize=100&pagenum=%s&imageType=2&imageColor=&brand=&imageSType=&fr=1&sortFlag=1&imageUType=&btype=&authid=&_=%s' list_url=[] for i in range(1,num+1): str_1 = str(random.random()) random_1 = str_1[str_1.find('.') + 1:str_1.find('.') + 5] time_1=get_time() url_1=url%(random_1,key_word,i,time_1) list_url.append(url_1) return list_url,headers,keywordtuple_1=get_url()list_url,headers,keyword=tuple_1[0],tuple_1[1],tuple_1[2]queue_url = Queue(len(list_url)*100+5)queue_img = Queue(len(list_url)*100+5) try: # 防止因?yàn)闆]有該圖片類型而報(bào)錯(cuò) num=1 for i in range(len(list_url)): request_1=request.Request(url=list_url[i],headers=headers) content=request.urlopen(request_1) str_1 = content.read().decode('utf-8') # 得到的數(shù)據(jù)字符串類型 str_1 = str_1[str_1.find('(') + 1:str_1.rfind(')')] dict_1 = json.loads(str_1) images_list = dict_1['imglist'] for j in range(len(images_list)): print('【{}】-{}'.format(num, images_list[j]['caption'])) queue_url.put(images_list[j]['imgurl']) queue_img.put(images_list[j]['caption']) num+=1 def Downlad(queue_url: Queue, queue_img: Queue): path_1 = './' + keyword try: os.mkdir(path_1) except: pass finally: while True: if queue_url.empty(): break image_name = queue_img.get() request.urlretrieve(url=queue_url.get(), filename=path_1 + '/【{}】-{}.png'.format(random.random()*1000,image_name)) # 下載圖片 # 為了防止出現(xiàn)圖片名相同的情況,對(duì)于圖片命名添加一個(gè)隨機(jī)數(shù) print('線程{}正在下載【{}】'.format(threading.current_thread().getName(), image_name)) time.sleep(0.25) # 每下載一張圖片,休眠0.25秒 threading_list = [] print('開始下載!') time.sleep(5) for i in range(len(list_url)*5): # 根據(jù)用戶的輸入創(chuàng)建相應(yīng)多的線程 threading_1 = threading.Thread(target=Downlad, args=(queue_url, queue_img,)) threading_1.start() threading_list.append(threading_1) for i in threading_list: i.join() print('------------------------下載完畢!當(dāng)前線程為', threading.current_thread().getName())except Exception as e:????print(e,'沒有搜到該圖片或者今日訪問次數(shù)過多!')

?

總結(jié)

以上是生活随笔為你收集整理的2021-03-10 Python多线程爬虫快速批量下载图片的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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