图来图去-“红色”图片获取

 
 

使用Python的requests库和正则表达式实现图片下载功能。

通过百度图片搜索,根据用户输入的关键词搜索相关图片,

并提供下载选项。

import requests

import re
import os
Urls_list=[]
keyword=''
def imagesTotal(urls):
print('正在检测图片数量,请稍等.......')
pages=0 #记录翻页
count=0 #有多少关联图片
while pages<100: #总共5页
try:
ssrq=session_Request()
except BaseException:
continue
else:
res= ssrq.get(urls,timeout=7,allow_redirects=False)
pic_url=re.findall('"objURL":"(.*?)",', res.text, re.S)
count += len(pic_url)
if len(pic_url)==0:
break
else:
Urls_list.append(pic_url)
pages+=20
return count

def session_Request():
headers={
'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
'Connection': 'keep-alive',
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0',
'Upgrade-Insecure-Requests': '1'
}
ssrq=requests.session()#构造session保持回话
ssrq.headers=headers
return ssrq
def downset(keyword,count):
print('经过检测%s类图片共有%d张' % (keyword, count))
numPic = int(input('请输入想要下载的图片数量 '))
file = input('请建立一个存储图片的文件夹,输入文件夹名称即可')
istrue = os.path.exists(file)
if istrue == 1:
print('该文件已存在,请重新输入')
file = input('请建立一个存储图片的文件夹,输入文件夹名称即可')
os.mkdir(file)
else:
os.mkdir(file)
print('找到关键词:' + keyword + '的图片,即将开始下载图片...')
startdownload(numPic,file)
def startdownload(num,file):
numPic=num
count=0
for item in Urls_list:
if len(item)==0:
break
else:
for items in item:
# print(items)
if count < numPic:
print('正在下载第' + str(count+1) + '张图片.....')
string = file + r'\\' + keyword + '_' + str(count) + '.jpg'
try:
if items is not None:
piccontent=requests.get(items,timeout=7)
else:
continue
except:
print('错误,当前图片无法下载')
continue
else:
fp = open(string, 'wb')
fp.write(piccontent.content)
fp.close()
count += 1

def run():
keyword=input('请输入需要下载图片的主题')
urls = 'https://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word=' + keyword + '&pn='
count=imagesTotal(urls)
downset(keyword,count)
if __name__ == '__main__':

run()

- `import requests`: 导入requests库,用于发送HTTP请求。

- `import re`: 导入re模块,用于正则表达式匹配。

- `import os`: 导入os模块,用于文件操作。

`Urls_list=[]`: 定义一个空列表`Urls_list`,用于存储图片的URL链接。

`keyword=''`:定义一个空字符串`keyword`,用于存储用户输入的关键词。

`imagesTotal(urls)`: 定义一个函数`imagesTotal`,用于获取图片总数。接受一个参数`urls`,表示图片搜索的URL链接。

1. 使用`print()`函数打印提示信息"正在检测图片数量,请稍等......."。

2. 初始化变量`pages`为0,用于记录翻页的次数。

3. 初始化变量`count`为0,用于记录关联图片的数量。

4. 在循环中,当`pages`小于100时(最多5页)执行以下操作:

   - 构建会话请求对象并赋值给变量`ssrq`,调用`session_Request()`函数。

   - 发送GET请求到指定的URL链接`urls`,设置超时时间为7秒,禁止重定向。

   - 使用正则表达式`re.findall()`从响应的文本内容中提取所有图片URL,并将结果赋值给变量`pic_url`。

   - 将提取到的图片URL列表添加到`Urls_list`中。

   - 将提取到的图片URL数量累加到`count`中。

   - 如果提取到的图片URL数量为0,则跳出循环。

   - 否则,`pages`增加20,用于翻页。

5. 返回关联图片的数量`count`。

`session_Request()`: 定义一个函数`session_Request`,用于构建会话请求对象。无参数。

1. 定义请求头`headers`,包含一些浏览器标识的信息。

2. 创建一个会话请求对象`ssrq`,使用`requests.session()`方法。

3. 设置会话请求对象的请求头`ssrq.headers`为上面定义的请求头。

4. 返回会话请求对象`ssrq`。

`downset(keyword,count)`: 定义一个函数`downset`,用于设置下载参数,包括下载数量和存储文件夹。接受两个参数`keyword`和`count`,分别表示关键词和关联图片的数量。

1. 使用`print()`函数打印提示信息"经过检测%s类图片共有%d张" % (keyword, count)。

2. 使用`int(input())`函数获取用户输入的下载数量,并将其转换为整数赋值给变量`numPic`。

3. 使用`input()`函数获取用户输入的存储图片的文件夹名称,并将其赋值给变量`file`。

4. 使用`os.path.exists()`函数判断文件夹是否已存在,将返回的布尔值赋值给变量`istrue`。

5. 如果`istrue`为1(即文件夹已存在),使用`print()`函数打印提示信息"该文件已存在,请重新输入",然后再次使用`input()`函数获取用户输入的存储图片的文件夹名称,并将其赋值给变量`file`。

6. 否则,使用`os.mkdir()`函数创建一个新的文件夹。

7. 使用`print()`函数打印提示信息"找到关键词:' + keyword + '的图片,即将开始下载图片..."。

8. 调用`startdownload(numPic,file)`函数开始下载图片。

`startdownload(num,file)`: 定义一个函数`startdownload`,用于开始下载图片。接受两个参数`num`和`file`,分别表示下载数量和存储文件夹名称。

1. 将参数`num`赋值给变量`numPic`,用于记录下载的图片数量。

2. 初始化变量`count`为0,用于记录下载的图片数量。

3. 在遍历`Urls_list`中的每个元素(图片URL列表)时执行以下操作:

   - 如果当前元素为空列表,则跳出当前循环。

   - 否则,在遍历当前元素中的每个URL时执行以下操作:

     - 如果`count`小于`numPic`,执行以下操作:

       - 使用`print()`函数打印提示信息"正在下载第' + str(count+1) + '张图片....."。

       - 构建图片保存路径字符串`string`,包括文件夹名称、关键词和图片编号。

       - 使用`requests.get()`方法发送HTTP请求,获取图片的二进制内容,并将其赋值给变量`piccontent`。

       - 创建一个以二进制写入模式打开的文件对象`fp`,使用`open()`函数。

       - 将图片的二进制内容写入到文件中,使用`fp.write()`方法。

       - 关闭文件对象,使用`fp.close()`方法。

       - 将`count`累加1,用于统计下载数量。

4. `run()`: 定义一个函数`run`,用于控制整个程序的执行过程。

(1) 使用`input()`函数获取用户输入的关键词,并将其赋值给变量`keyword`。

(2) 构建图片搜索的URL链接`urls`,包括百度图片搜索的固定部分和用户输入的关键词。

(3) 调用`imagesTotal(urls)`函数获取关联图片的总数,并将返回的结果赋值给变量`count`。

(4)调用`downset(keyword,count)`函数设置下载参数并开始下载。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值