python下载图片代码_基于Python下载网络图片方法汇总代码实例

本文详细介绍了如何使用Python下载网络图片,包括通过图片URL直接下载、使用正则表达式和BeautifulSoup解析HTML获取图片链接。提供了两种具体实现方法,适用于不同类型的网页图片抓取。
摘要由CSDN通过智能技术生成

本文介绍下载python下载网络图片的方法,包括通过图片url直接下载、通过re/beautifulSoup解析html下载以及对动态网页的处理等。

通过pic_url单个/批量下载

已知图片url,例如http://xyz.com/series-*(1,2..N).jpg,共N张图片,其链接形式较为固定,这样经简单循环,直接通过`f.write(requests.get(url).content)'即可以二进制形式将图片写入。

import os

import requests

def download(file_path, picture_url):

headers = {

"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 QIHU 360SE",

}

r = requests.get(picture_url, headers=headers)

with open(file_path, 'wb') as f:

f.write(r.content)

def main():

os.makedirs('./pic/', exist_ok=True) # 输出目录

prefix_url = 'http://xyz.com/series-' # 同一类目下的图片url前缀

n = 6 # 该类目下的图片总数

tmp = prefix_url.split('/')[-1]

for i in range(1, n + 1):

file_path = './pic/' + tmp + str(i) + '.jpg'

picture_url = prefix_url + str(i) + '.jpg'

download(file_path, picture_url)

if __name__ == '__main__':

main()

正则re解析html获取pic_url后下载

在实际操作中,图片url按序排列情况较少,多数情况下用户仅知道网页url,需要对当前网页htnl内容进行解析,获取源码中包含的图片url,常用方法有正则表达式匹配或BeautifulSoup等库解析的方法。

正则re解析的思路是:首先通过 requests.get(url).text 获得当前页面html源码;然后通过正则表达式匹配图片url,如 re.compile(r'[a-zA-z]+://[^s]*.jpg') 正则式一般会得到.jpg结尾的url,但其他网站图片url可能会以.png或.webp等结尾,甚至需要其他的正则匹配,为此,读者需要对正则表达式有所了解,强烈推荐 正则表达式30分钟入门教程 ;将前一步得到的图片url加入列表,进行下载。

import os

import re

import requests

def get_html(url):

headers = {

"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36 ",

}

html = requests.get(url, headers=headers).text

return html

def parse_html(html_text):

picre = re.compile(r'[a-zA-z]+://[^s]*.jpg') # 本正则式得到.jpg结尾的url

pic_list = re.findall(picre, html_text)

return pic_list

def download(file_path, pic_url):

headers = {

"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36 ",

}

r = requests.get(pic_url, headers=headers)

with open(file_path, 'wb') as f:

f.write(r.content)

def main():

# 使用时修改url即可

url = 'http://xyz.com/series'

html_text = get_html(url)

pic_list = parse_html(html_text)

os.makedirs('./pic/', exist_ok=True) # 输出目录

for pic_url in pic_list:

file_name = pic_url.split('/')[-1]

file_path = './pic/' + file_name

download(file_path, pic_url)

if __name__ == '__main__':

main()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值