1、环境配置
python解释器:python的任意版本
pycharm编译器:pycharm的任意版本
第三方模块:requests以及内置re库
(这个案例只会爬取90张图片没有做页面跳转,主要是练习如何使用正则表达式建议先看我的正则表达式使用大全)
2、整体代码
2.1实现须知
以下是整体代码块,在pycharm中新建一个py文件,在他的根目录创建一个album文件夹储存下载的图片,直接运行就可以批量下载自己想要下载的图片
import requests
import re
key = input('请输入你想下载的图片:')
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'
}
url = 'https://image.baidu.com/search/flip?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=result&fr=&sf=1&fmq=1595376564352_R&pv=&ic=&nc=1&z=&hd=&latest=©right=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&ctd=1595376564354%5E00_1212X622&sid=&word='+key
result = requests.get(url,headers=headers).text
req = re.findall(r'"objURL":"(.*?)"',result)
for i in req:
name = i[-10:]
name = re.sub('/','',name)
end = re.search('(\.jpg|\.png|\.jpeg|\.gif)$',name)
if end == None:
name = name + '.jpg'
# print(name)
with open('album/%s'%name,'wb')as f:
try:
r = requests.get(i).content
except Exception as e:
print(e)
f.write(r)
2.2代码详细讲解
import requests # 获取数据的第三方模块需要自己下载 pip install requests除了问题参考我的python基础有解决问题的办法
import re # 正则表达式的模块导入才能筛选数据 python自带的导入即可使用
key = input('请输入你想下载的图片:')# 运行框弹出的内容
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'
}# 用户代理,将pycharm伪装成浏览器获得数据,使服务器识别不出我们是爬虫(最基本的反爬措施)
url = 'https://image.baidu.com/search/flip?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=result&fr=&sf=1&fmq=1595376564352_R&pv=&ic=&nc=1&z=&hd=&latest=©right=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&ctd=1595376564354%5E00_1212X622&sid=&word='+key
# url = 百度首页想下载的图片地址,可直接复制通过浏览器打开查看一下
result = requests.get(url,headers=headers).text# 请求数据
req = re.findall(r'"objURL":"(.*?)"',result)# 通过正则表达式筛选数据,获得每张图片的url下载地址
for i in req:#遍历每一张图的url下载保存
name = i[-10:]#给图片命名,切片最后10个字符命名
name = re.sub('/','',name)#将名称中有/的替换为‘’空,防止保存时出错
end = re.search('(\.jpg|\.png|\.jpeg|\.gif)$',name)#如果name中没有图片尾缀格式,通过下面循环加上.jpg格式
if end == None:
name = name + '.jpg'
with open('album/%s'%name,'wb')as f:#保存图片
try:# 某些图片无法下载,程序就会终止,为了不终止,跳过问题继续下载而做的异常处理
r = requests.get(i).content#获得图片的下载内容
except Exception as e:
print(e)
f.write(r)# 保存图片
想做页面跳转的出了问题留言找我,帮你解答