本文介绍下载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等结尾,甚至需要其他的正则匹配,为此,读者需要对正则表达式有所了解,