1. 首页
  2. seo推广
  3. >

如何利用python多线程爬取天气网站图片并保存(python爬取天气数据并制图)

1.1 题目

指定一个网站,抓取该网站内的所有图片,如中国天气网(www.weather.com.cn),分别采用单线程和多线程抓取。 (抓取图片数量仅限学号后3位)

如何利用python多线程爬取天气网站图片并保存(python爬取天气数据并制图)

输出信息: 在控制台输出下载的Url信息,将下载的图片存放在images子文件中,并给出截图。

1.2 思路

1.2.1 发送请求

构造请求头

导入请求,重新导入urllibheaders={ '连接': '保持活动','缓存控制': 'max-age=0','升级不安全-请求': '1','用户代理': ' Mozilla/5.0 (Windows NT 10.0; Win64; 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)发送请求

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

1.2.2 解析网页

解析页面并替换回车符,方便后续正则图片匹配。

html=r.read().decode().replace('\n','')

1.2.3 获取结点

使用正则匹配先获取所有a标签,然后爬取a标签下的所有图片

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 这里的请求其实需要更多的线程爬取,后续全部补上!

1.2.4 数据保存 (单线程)

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: # 保存到该图片路径f.write(resp.content)

1.2.4 数据保存 (多线程)

引入多进程模块

import threading# 多线程def download_imgs(imgList,limit): 个线程=[] 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)返回线程写入下载函数

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}') 这是非常随机的

总结

本篇如何使用python多线程爬取天气网站图片并保存的文章到此结束。更多关于python爬取天气网站图片的内容请搜索服务器之家之前的文章或者在下面继续浏览。相关文章希望大家以后多多支持Server Home!

原文链接:https://juejin.cn/post/7025496982407872519