百度爬图
import requestsfrom urllib.parse import urlencode
import re
import os
import time
#计划将图片都保存在E盘叫“百度图片”的文件夹下
filelist = os.listdir(path='E:\\')
if ('百度图片') not in filelist:
os.mkdir("E:\\百度图片")
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18363'
}
name = input("请输入您需要爬取的图片信息:")
filelist = os.listdir(path='E:\\百度图片')
#检查在百度图片文件夹下是否存在以搜索内容为名的文件夹
#若存在,则说明以前曾爬取过相关内容,不再新建以此搜索内容命名的文件夹
#若不存在,则说明以前未曾搜索过相关内容,新建文件夹以保存此次爬取的图片
if (name) not in filelist:
os.mkdir("E:\\百度图片/%s"%name)
before_path = "E:/百度图片/" + name +'/'
times = time.gmtime()
t=str(time.mktime(times))
#通过输入的需要搜索的内容拼接出百度的相关内容的搜索链接
def get_url(name):
bef_url = 'https://image.baidu.com/search/index?'
data = {
'tn': 'resultjson_com',
'logid': '7364932782014356645',
'ipn': 'rj',
'ct': '201326592',
'is': '',
'fp': 'result',
'queryWord': '二次元图片',
'cl': '2',
'lm': '-1',
'ie': 'utf-8',
'oe': 'utf-8',
'adpicid': '',
'st': '',
'z': '',
'ic': '',
'hd': '',
'latest': '',
'copyright': '',
'word': '二次元图片',
's': '',
'se': '',
'tab': '',
'width': '',
'height': '',
'face': '',
'istype': '',
'qc': '',
'nc': '',
'fr': '',
'expermode': '',
'force': '',
'pn': '30',
'rn': '30',
'gsm': '1e',
'1611387183889': ''
}
data['word'] = name
data['word'] = name
url = bef_url + urlencode(data)
return url
url = get_url(name)
#将链接传递给get_add函数,该函数将会取得前三十张图片的连接
def get_add(url):
response = requests.get(url=url,headers=headers)
if response.status_code == requests.codes.ok:
html = response.text
regular = re.compile('"middleURL":"(.*?)"')
result = regular.findall(html)
else :
result = False
return result
result = get_add(url)
if result == False:
print("搜索出错!!!\n请重试")
elif not result:
print("您搜索的内容不存在!!!")
os.rmdir("E:\\百度图片/%s"%name)
else:
#下载图片并保存
while(result):
url = result.pop()
response = requests.get(url=url,headers=headers)
html = response.content
name = url.split('/')[-1]
path = before_path + t + name
with open(path,'wb') as f:
f.write(html)
在一个大佬的指导下写了这个爬百度图的程序,有大佬能优化一下,或者指出我的不足就再好不过了 1. 函数名 get_add 不行。
2. 既然后面是用 result.pop() 来依次弹出 url 进行处理,那么完全可以换成迭代器。
3. 没用到 try-except。 兼容性没那么好吧,只支持 win 然后还必须得是有 E盘 的 win{:10_245:} °蓝鲤歌蓝 发表于 2021-1-23 20:44
1. 函数名 get_add 不行。
2. 既然后面是用 result.pop() 来依次弹出 url 进行处理,那么完全可以换成迭代 ...
呃,大佬,还没学到迭代器 Daniel_Zhang 发表于 2021-1-25 20:29
兼容性没那么好吧,只支持 win 然后还必须得是有 E盘 的 win
初学者嘛,理解一下,哈哈哈哈哈
页:
[1]