使用python批量下载网络文件(python3+request)
问题描述:
给出系列URL地址(eg:“https://arxiv.org/pdf/1803.04831.pdf”,……)下载URL地址中的pdf文件。本例为下载AI相关论文。
问题解决:
1.引入依赖库
import requests
2.读取URL,并整理为list格式
urllist = ["https://arxiv.org/pdf/1408.5882.pdf",
"https://arxiv.org/pdf/1612.03144.pdf",
"https://arxiv.org/pdf/1703.06870.pdf"]`
3.加入头部,防止被封(如下载量超大情况下,还需要IP代理,但一般几十篇没啥问题)
headers = {'User-Agent': 'Mozilla/5.0'}
4.循环读取url,并以数据流形式分段存储,防止在文件过大情况下内存超压。在此1MB即存储1次。
for n,url in enumerate(urllist):
r = requests.get(url,headers=headers)
time.sleep(1)
with open("python-%d.pdf"%n, "wb") as pdf:
for chunk in r.iter_content(chunk_size=1024):
if chunk:
pdf.write(chunk)
print("已完成%d个文件下载"%n)
总结:
采用该方法可解决批量下载网络文件的目的,如在爬虫等工作中还需要定位文件地址所在URL,推荐采用“xpath+正则表达式”解决。欢迎交流。