如何利用python多线程爬取天气网站图片并保存

 更新时间:2021年11月09日 14:26:28   作者:小生凡一  
最近做个天 气方面的APP需要用到一些天气数据,所以下面这篇文章主要给大家介绍了关于如何利用python多线程爬取天气网站图片并保存的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

1.1 题目

指定一个网站,爬取这个网站中的所有的所有图片,例如中国气象网(www.weather.com.cn),分别使用单线程和多线程的方式爬取。(限定爬取图片数量为学号后3位)

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

1.2 思路

1.2.1 发送请求

构造请求头

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)

发送请求

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:  # 保存到这个image路径下
        f.write(resp.content)

1.2.4 数据保存 (多线程)

引入多进程模块

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

编写下载函数

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爬取天气网站图片内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python接口自动化浅析数据驱动原理

    Python接口自动化浅析数据驱动原理

    这篇文章主要介绍了Python接口自动化浅析数据驱动原理,文中会详细描述怎样使用openpyxl模块操作excel及结合ddt来实现数据驱动,有需要的朋友可以参考下
    2021-08-08
  • 在Django的模型中添加自定义方法的示例

    在Django的模型中添加自定义方法的示例

    这篇文章主要介绍了在Django的模型中添加自定义方法的示例,Django是Python丰富多彩的web开发框架中最具人气的一个,需要的朋友可以参考下
    2015-07-07
  • TensorFlow卷积神经网络MNIST数据集实现示例

    TensorFlow卷积神经网络MNIST数据集实现示例

    这篇文章主要介绍了TensorFlow卷积神经网络MNIST数据集的实现示例的过程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2021-11-11
  • 在Django中使用ElasticSearch

    在Django中使用ElasticSearch

    这篇文章主要介绍了在Django中使用ElasticSearch,Elasticsearch是基于Lucene库的搜索引擎。它提供了具有HTTP Web界面和无模式JSON文档的分布式,多租户功能的全文本搜索引擎,下面详细内容,需要的朋友可以参考一下
    2022-01-01
  • python实现扫描局域网指定网段ip的方法

    python实现扫描局域网指定网段ip的方法

    这篇文章主要介绍了python实现扫描局域网指定网段ip的方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-04-04
  • Python识别快递条形码及Tesseract-OCR使用详解

    Python识别快递条形码及Tesseract-OCR使用详解

    这篇文章主要介绍了Python识别快递条形码及Tesseract-OCR使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • python Django实现增删改查实战代码

    python Django实现增删改查实战代码

    这篇文章主要介绍了python Django增删改查快速体验,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-02-02
  • Python3enumrate和range对比及示例详解

    Python3enumrate和range对比及示例详解

    这篇文章主要介绍了Python3enumrate和range对比及示例详解,在Python中,enumrate和range都常用于for循环中,enumrate函数用于同时循环列表和元素,而range()函数可以生成数值范围变化的列表,而能够用于for循环即都是可迭代的,需要的朋友可以参考下
    2019-07-07
  • 解决python 文本过滤和清理问题

    解决python 文本过滤和清理问题

    文本过滤和清理所涵盖的范围非常广泛,涉及文本解析和数据处理方面的问题。这篇文章主要介绍了解决python 文本过滤和清理问题,需要的朋友可以参考下
    2019-08-08
  • Python 使用pip在windows命令行中安装HDF reader包的操作方法

    Python 使用pip在windows命令行中安装HDF reader包的操作方法

    HDF reader包是一个常用来将.mat类型数据导入到python在这里插入代码片中使用的包,非常好用,今天介绍一下,如何在命令行中安装这个包,需要的朋友可以参考下
    2022-12-12

最新评论