Python3直接爬取图片URL并保存

本文介绍了一个简单的Python3爬虫项目,用于从网络获取图片URL并保存。内容涵盖获取地址策略、使用urllib请求图片、异常处理、重连机制以及使用修饰器优化代码效率。

有时候我们会需要从网络上爬取一些图片,来满足我们形形色色直至不可描述的需求。

一个典型的简单爬虫项目步骤包括两步:获取网页地址和提取保存数据。

这里是一个简单的从图片url收集图片的例子,可以成为一个小小的开始。


目录

获取地址

保存图片

其他

捕获异常

重连机制

修饰器

完整代码

 


获取地址

这些图片的URL可能是连续变化的,如从001递增到099,这种情况可以在程序中将共同的前面部分截取,再在最后递增并字符串化后循环即可。

抑或是它们的URL都保存在某个文件中,这时可以读取到列表中:

def getUrls(path):
    urls = []
    with open(path,'r') as f:
        for line in f:
            urls.append(line.strip('\n'))
    return(urls)

保存图片

在python3中,urllib提供了一系列用于操作URL的功能,其中的request模块可以非常方便地抓取URL内容,也就是发送一个GET请求到指定的页面,然后返回HTTP的响应。具体细节请看注释:

def requestImg(url, name, num_retries=3):
    img_src = url
    # print(img_src)
    header = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) \
        AppleWebKit/537.36 (KHTML, like Gecko) \
            Chrome/35.0.1916.114 Safari/537.36',
        'Cookie': 'AspxAutoDetectCookieSupport=1'
    }
    # Request类可以使用给定的header访问URL
    req = urllib.
使用Python爬取网络图片保存到本地可以通过不同的方法实现,以下为两种常见的实现方式: ### 使用`requests`库 利用`requests`库发送HTTP请求获取网页源码,再通过正则表达式提取图片链接,最后将图片保存到本地。示例代码如下: ```python import requests import re # 第一个爬取网址 url = &#39;http://www.nipic.com/photo/jingguan/ziran/index.html&#39; # 获得网页源码 data = requests.get(url).text # 图片正则表达式 regex = r&#39;data-src="(.*?.jpg)"&#39; # 创建一个pa模板,使其符合匹配的网址 pa = re.compile(regex) # findall 方法找到data中所有的符合pa的对象,添加到列表中返回 ma = re.findall(pa, data) # 将ma中图片网址依次提取出来 i = 0 for image in ma: i += 1 image = requests.get(image).content print(str(i) + &#39;.jpg 正在保存。。。&#39;) with open(&#39;../imgs/&#39; + str(i) + &#39;.jpg&#39;, &#39;wb&#39;) as f: # 注意打开的是jpg文件 f.write(image) print(&#39;保存完毕&#39;) ``` 上述代码通过`requests.get()`方法获取网页源码,使用正则表达式`r&#39;data-src="(.*?.jpg)"&#39;`匹配图片链接,最后使用`open()`函数以二进制写入模式保存图片到本地[^1]。 ### 使用`urlopen`、`BeautifulSoup`和`urlretrieve` 可以使用`urlopen`打开网页,`BeautifulSoup`解析网页内容,`urlretrieve`下载图片。不过原引用未给出完整示例代码,以下为一个简单示例: ```python from urllib.request import urlopen, urlretrieve from bs4 import BeautifulSoup # 爬取的网页URL url = &#39;https://example.com&#39; # 需替换为实际网页URL html = urlopen(url) bs = BeautifulSoup(html, &#39;html.parser&#39;) # 假设图片链接在<img>标签的src属性中 img_tags = bs.find_all(&#39;img&#39;) i = 0 for img in img_tags: img_url = img.get(&#39;src&#39;) if img_url: i += 1 try: print(f&#39;{i}.jpg 正在保存。。。&#39;) urlretrieve(img_url, f&#39;../imgs/{i}.jpg&#39;) print(&#39;保存完毕&#39;) except Exception as e: print(f&#39;保存失败: {e}&#39;) ``` 此代码使用`urlopen`打开网页,`BeautifulSoup`解析HTML内容,通过`find_all()`方法找到所有`<img>`标签,再使用`urlretrieve`下载图片到本地。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值