人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動態(tài)

如何利用python多線程爬取天氣網(wǎng)站圖片并保存

發(fā)布日期:2021-12-13 02:12 | 文章來源:gibhub

1.1 題目

指定一個網(wǎng)站,爬取這個網(wǎng)站中的所有的所有圖片,例如中國氣象網(wǎng)(www.weather.com.cn),分別使用單線程和多線程的方式爬取。(限定爬取圖片數(shù)量為學(xué)號后3位)

輸出信息: 將下載的Url信息在控制臺輸出,并將下載的圖片存儲在images子文件中,并給出截圖。

1.2 思路

1.2.1 發(fā)送請求

構(gòu)造請求頭

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ā)送請求

request = urllib.request.Request(url, headers=headers)
r = urllib.request.urlopen(request)

1.2.2 解析網(wǎng)頁

頁面解析,并且替換回車,方便后續(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

這里的請求其實(shí)也是要用多線程爬取的,所有后續(xù)會補(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:  # 保存到這個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)容請搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!

版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實(shí)時開通

自選配置、實(shí)時開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對1客戶咨詢顧問

在線
客服

在線客服:7*24小時在線

客服
熱線

400-630-3752
7*24小時客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部