Pyhton多線程采集圖片方式
更新時間:2023年12月01日 09:08:05 作者:三省同學(xué)
這篇文章主要介紹了Pyhton多線程采集圖片方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
前言
需要大量圖片做數(shù)據(jù)采集是,這個時候就需要用到python獲取圖片,本篇以python多線程獲取圖片為例。
一、查看頁面元素
查看頁面源代碼。

二、請求url查看
通過F12查看請求url。

tn: resultjson_com logid: 12339447258259285711 ipn: rj ct: 201326592 is: fp: result fr: word: 動漫圖片 queryWord: 動漫圖片 cl: 2 lm: -1 ie: utf-8 oe: utf-8 adpicid: st: -1 z: ic: hd: latest: copyright: s: se: tab: width: height: face: 0 istype: 2 qc: nc: 1 expermode: nojc: isAsync: pn: 60 rn: 30 gsm: 3c 1669373933133:
代碼實現(xiàn)
# -*- coding: utf-8 -*-
import os
import re
import time
from multiprocessing import Pool
import requests
from multiprocessing.dummy import Pool as ThreadPool # 線程池
def get_image(keyword, page_num, save_dir):
# 瀏覽器偽裝
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'}
# 請求url
url = 'https://image.baidu.com/search/acjson?'
n = 0;
pn = 1 # pn是從第幾張圖片開始
page_num = page_num + 1;
for m in range(1, page_num):
# 請求參數(shù)
param = {'tn': 'resultjson_com',
'ipn': 'rj',
'ct': 201326592,
'is': '',
'fp': 'result',
'queryWord': keyword,
'cl': 2,
'lm': -1,
'ie': 'utf-8',
'oe': 'utf-8',
'adpicid': '',
'st': -1,
'z': '',
'ic': '',
'hd': 1,
'latest': '',
'copyright': '',
'word': keyword,
's': '',
'se': '',
'tab': '',
'width': '',
'height': '',
'face': 0,
'istype': 2,
'qc': '',
'nc': '1',
'fr': '',
'expermode': '',
'force': '',
'cg': '',
'pn': pn,
'rn': '30',
'gsm': '1e',
'1669373933133': ' '
}
request = requests.get(url=url, headers=header, params=param)
if request.status_code == 200:
print('success.')
request.encoding = 'utf-8'
html = request.text
image_url_list = re.findall('"thumbURL":"(.*?)",', html, re.S)
if not os.path.exists(save_dir):
os.makedirs(save_dir)
for image_url in image_url_list:
image_data = requests.get(url=image_url, headers=header).content
# with open(os.path.join(save_dir, "{}_{:06d}.jpg".format("1", n)), 'wb') as fp:
# fp.write(image_data)
pool.apply_async(download, args=(n, image_data, save_dir), error_callback=func.err_call_back)
n = n + 1
pn += 29
class Func(object):
def __init__(self):
# 利用匿名函數(shù)模擬一個不可序列化象
# 更常見的錯誤寫法是,在這里初始化一個數(shù)據(jù)庫的長鏈接
self.num = lambda: None
def work(self, num=None):
self.num = num
return self.num
@staticmethod
def call_back(res):
print('Hello,World! {res}')
@staticmethod
def err_call_back(err):
print('出錯啦:[{}]'.format(err))
def download(n, image_data, save_dir):
# time.sleep(1)
fp = open(os.path.join(save_dir, "{}_{:06d}.jpg".format("1", n)), 'wb')
fp.write(image_data)
fp.close()
if __name__ == '__main__':
func = Func()
keyword = '動漫圖片'
save_dir = keyword
page_num = int(input("頁數(shù):"))
# 線程池中線程數(shù)
pool = Pool(10)
# pool = ThreadPool(5)
# i = 0;
# while i < page_num:
get_image(keyword, page_num, save_dir)
# i = i + 1
print('完成')
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
50行Python代碼獲取高考志愿信息的實現(xiàn)方法
這篇文章主要介紹了50行Python代碼獲取高考志愿信息的實現(xiàn)方法,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-07-07
python3實現(xiàn)Dijkstra算法最短路徑的實現(xiàn)
這篇文章主要介紹了python3實現(xiàn)Dijkstra算法最短路徑的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05
成功解決ValueError:?Supported?target?types?are:('binary
本文給大家分享成功解決ValueError:?Supported?target?types?are:('binary',?'multiclass').?Got?'continuous'?instead.的錯誤問題,需要的朋友可以參考下2023-03-03
python實現(xiàn)中文轉(zhuǎn)換url編碼的方法
這篇文章主要介紹了python實現(xiàn)中文轉(zhuǎn)換url編碼的方法,結(jié)合實例形式分析了Python針對中文的gbk與utf-8編碼轉(zhuǎn)換的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下2016-06-06
selenium攜帶cookies模擬登陸CSDN的實現(xiàn)
這篇文章主要介紹了selenium攜帶cookies模擬登陸CSDN的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
python保存字典數(shù)據(jù)到csv文件的完整代碼
在實際數(shù)據(jù)分析過程中,我們分析用Python來處理數(shù)據(jù)(海量的數(shù)據(jù)),我們都是把這個數(shù)據(jù)轉(zhuǎn)換為Python的對象的,比如最為常見的字典,下面這篇文章主要給大家介紹了關(guān)于python保存字典數(shù)據(jù)到csv的相關(guān)資料,需要的朋友可以參考下2022-06-06

