1.向服务器发出请求,服务器做出响应
url = 'https://wallhaven.cc/'
header = {
'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36 Edg/105.0.1343.50'
}
response = requests.get(url = url, headers= header)
2.对服务器响应的内容根据需要做正则表达式匹配提取
response.text//得到的是html文件内容
response.content//可以得到图像
response.text 返回的是一个 unicode 型的文本数据,适用于文本数据的爬取
response.content 返回的是 bytes 型的二进制数据,适用于图片、文件的爬取
res = re.findall(r'<img src="(https://th.*?jpg)"', response.text)
正则表达式
*零次或多次 +一次或多次 ?零次或一次
^()开头 () $ 结尾
[]匹配区间 [^](里面值取非)匹配区间
/s /w /d /S /W /D
正则表达式中有括号:没括号返回的是有多少个正则表达式的内容 一个括号返回的是括号中的正则表达式 多个括号返回的是元组
3.将内容下载到文件夹中
下载一个
for r in res:
rr = requests.get(url='https://th.wallhaven.cc/small/z8/z8dg9y.jpg',headers=header)
request.urlretrieve(rr,"./getSomethinf/one.jpg")
open(f'./getSomethinf/one.jpg','wb').write(rr.content)
多个一起下载
for r in res:
name = re.findall(r'https://th.*/(.*?).jpg',r)[0]
# print(name)
houzhui = os.path.splitext(r)[1]
rr = requests.get(url=r,headers=header)
path = './getSomethinf/'+name+houzhui
with open(path ,mode='wb') as f:
f.write(rr.content)
with创建临时运行环境
作用:with用于创建一个临时的运行环境,运行环境中的代码执行完后自动安全退出环境。
文件操作:使用open进行文件操作使建议使用with创建运行环境,可以不用close()方法关闭文件,无论在文件使用中遇到什么问题都能安全的退出,即使发生错误,退出运行时环境时也能安全退出文件并给出报错信息。
注意点1
虽然之前已经得到url,但在下载时仍然需要再次向服务器发出请求,request.get(url=url,headers=header)
否则报错urllib.error.HTTPError: HTTP Error 403: Forbidden
注意点2
打开文件夹下载文件需要路径,路径中包括下载的文件名
houzhui = os.path.splitext(r)[1]//得到文件后缀
format函数用于格式化,使用插值