如何利用python多線程爬取天氣網(wǎng)站圖片并保存
1.1 題目
指定一個(gè)網(wǎng)站,爬取這個(gè)網(wǎng)站中的所有的所有圖片,例如中國(guó)氣象網(wǎng)(www.weather.com.cn),分別使用單線程和多線程的方式爬取。(限定爬取圖片數(shù)量為學(xué)號(hào)后3位)
輸出信息: 將下載的Url信息在控制臺(tái)輸出,并將下載的圖片存儲(chǔ)在images子文件中,并給出截圖。
1.2 思路
1.2.1 發(fā)送請(qǐng)求
構(gòu)造請(qǐng)求頭
import requests,re import urllib headers = { 'Connection': 'keep-alive', 'Cache-Control': 'max-age=0', 'Upgrade-Insecure-Requests': '1', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9', 'Accept-Language': 'zh-CN,zh;q=0.9', } url = "http://www.weather.com.cn/" request = urllib.request.Request(url, headers=headers)
發(fā)送請(qǐng)求
request = urllib.request.Request(url, headers=headers) r = urllib.request.urlopen(request)
1.2.2 解析網(wǎng)頁(yè)
頁(yè)面解析,并且替換回車,方便后續(xù)進(jìn)行正則匹配圖片。
html = r.read().decode().replace('\n','')
1.2.3 獲取結(jié)點(diǎn)
使用正則匹配,先獲取所有的a標(biāo)簽,然后爬取a標(biāo)簽下面的所有圖片
urlList = re.findall('<a href="(.*?)" ',html,re.S)
獲取所有的圖片
allImageList = [] for k in urlList: try: request = urllib.request.Request(k, headers=headers) r = urllib.request.urlopen(request) html = r.read().decode().replace('\n','') imgList = re.findall(r'<img.*?src="(.*?)"', html, re.S) allImageList+=imgList except Exception as e: pass
這里的請(qǐng)求其實(shí)也是要用多線程爬取的,所有后續(xù)會(huì)補(bǔ)上!
1.2.4 數(shù)據(jù)保存 (單線程)
for i, img in enumerate(allImageList[:102]): print(f"正在保存第{i + 1}張圖片 路徑:{img}") resp = requests.get(img) with open(f'./image/{img.split("/")[-1]}', 'wb') as f: # 保存到這個(gè)image路徑下 f.write(resp.content)
1.2.4 數(shù)據(jù)保存 (多線程)
引入多進(jìn)程模塊
import threading # 多線程 def download_imgs(imgList,limit): threads = [] T = [ threading.Thread(target = download, args=(url,i)) for i, url in enumerate(imgList[:limit + 1]) ] for t in T: t.start() threads.append(t) return threads
編寫下載函數(shù)
def download(img_url,name): resp = requests.get(img_url) try: resp = requests.get(img_url) with open(f'./images/{name}.jpg', 'wb') as f: f.write(resp.content) except Exception as e: print(f"下載失敗: {name} {img_url} -> {e}") else: print(f"下載完成: {name} {img_url}")
就很隨機(jī)
總結(jié)
到此這篇關(guān)于如何利用python多線程爬取天氣網(wǎng)站圖片并保存的文章就介紹到這了,更多相關(guān)python爬取天氣網(wǎng)站圖片內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python接口自動(dòng)化淺析數(shù)據(jù)驅(qū)動(dòng)原理
這篇文章主要介紹了Python接口自動(dòng)化淺析數(shù)據(jù)驅(qū)動(dòng)原理,文中會(huì)詳細(xì)描述怎樣使用openpyxl模塊操作excel及結(jié)合ddt來實(shí)現(xiàn)數(shù)據(jù)驅(qū)動(dòng),有需要的朋友可以參考下2021-08-08TensorFlow卷積神經(jīng)網(wǎng)絡(luò)MNIST數(shù)據(jù)集實(shí)現(xiàn)示例
這篇文章主要介紹了TensorFlow卷積神經(jīng)網(wǎng)絡(luò)MNIST數(shù)據(jù)集的實(shí)現(xiàn)示例的過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2021-11-11python實(shí)現(xiàn)掃描局域網(wǎng)指定網(wǎng)段ip的方法
這篇文章主要介紹了python實(shí)現(xiàn)掃描局域網(wǎng)指定網(wǎng)段ip的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-04-04Python識(shí)別快遞條形碼及Tesseract-OCR使用詳解
這篇文章主要介紹了Python識(shí)別快遞條形碼及Tesseract-OCR使用詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07python?Django實(shí)現(xiàn)增刪改查實(shí)戰(zhàn)代碼
這篇文章主要介紹了python?Django增刪改查快速體驗(yàn),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-02-02Python3enumrate和range對(duì)比及示例詳解
這篇文章主要介紹了Python3enumrate和range對(duì)比及示例詳解,在Python中,enumrate和range都常用于for循環(huán)中,enumrate函數(shù)用于同時(shí)循環(huán)列表和元素,而range()函數(shù)可以生成數(shù)值范圍變化的列表,而能夠用于for循環(huán)即都是可迭代的,需要的朋友可以參考下2019-07-07Python?使用pip在windows命令行中安裝HDF?reader包的操作方法
HDF reader包是一個(gè)常用來將.mat類型數(shù)據(jù)導(dǎo)入到python在這里插入代碼片中使用的包,非常好用,今天介紹一下,如何在命令行中安裝這個(gè)包,需要的朋友可以參考下2022-12-12