鱼C论坛

 找回密码
 立即注册
查看: 2095|回复: 4

[原创] 百度爬图

[复制链接]
发表于 2021-1-23 19:50:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
import requests
from 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)

在一个大佬的指导下写了这个爬百度图的程序,有大佬能优化一下,或者指出我的不足就再好不过了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-1-23 20:44:28 | 显示全部楼层
1. 函数名 get_add 不行。
2. 既然后面是用 result.pop() 来依次弹出 url 进行处理,那么完全可以换成迭代器。
3. 没用到 try-except。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-25 20:29:54 | 显示全部楼层
兼容性没那么好吧,只支持 win 然后还必须得是有 E盘 的 win
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-28 21:42:20 | 显示全部楼层
°蓝鲤歌蓝 发表于 2021-1-23 20:44
1. 函数名 get_add 不行。
2. 既然后面是用 result.pop() 来依次弹出 url 进行处理,那么完全可以换成迭代 ...

呃,大佬,还没学到迭代器
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-28 21:43:02 | 显示全部楼层
Daniel_Zhang 发表于 2021-1-25 20:29
兼容性没那么好吧,只支持 win 然后还必须得是有 E盘 的 win

初学者嘛,理解一下,哈哈哈哈哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 11:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表