从百度图片批量获取自己想要的图片

# -*- coding: utf-8 -*-
# @Author : Felix Wang
# @time   : 2018/6/26 17:35

import re
import requests
import json
import random
from multiprocessing import Pool

# 翻译
def translate(content, tolang=‘zh‘, fromlang=None):
    User_Agent = [
        ‘Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Mobile Safari/537.36‘,
        ‘Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Mobile Safari/537.36‘,
        ‘Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1‘,
        ‘Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1‘,
    ]
    datas = {
        ‘query‘: content,
    }
    # 自动获取语言类型
    if not fromlang:
        fromlang = json.loads(requests.post(‘http://fanyi.baidu.com/langdetect‘, data=datas).text)[‘lan‘]
    # print(fromlang)
    data = {
        ‘from‘: fromlang,
        ‘to‘: tolang,
        ‘query‘: content,

    }
    url = ‘http://fanyi.baidu.com/basetrans‘

    headers = {
        ‘User-Agent‘: random.choice(User_Agent)
    }
    try:
        res = requests.post(url=url, data=data, headers=headers)
        # print(res.text)
        result = json.loads(res.text)
        return result[‘trans‘][0][‘dst‘]
    except Exception as e:
        print(‘翻译出错‘)
        print(e)

    ‘‘‘
    zh    中文
    en    英语
    yue    粤语
    wyw    文言文
    jp    日语
    kor    韩语
    fra    法语
    spa    西班牙语
    th    泰语
    ara    阿拉伯语
    ru    俄语
    pt    葡萄牙语
    de    德语
    it    意大利语
    el    希腊语
    nl    荷兰语
    pl    波兰语
    bul    保加利亚语
    est    爱沙尼亚语
    dan    丹麦语
    fin    芬兰语
    cs    捷克语
    rom    罗马尼亚语
    slo    斯洛文尼亚语
    swe    瑞典语
    hu    匈牙利语
    cht    繁体中文
    vie    越南语
    ‘‘‘

# 创建文件夹
def mkdir(path):
    # 引入模块
    import os
    # 去除首位空格
    path = path.strip()
    # 去除尾部 \ 符号
    path = path.rstrip("\\")
    # 判断路径是否存在
    # 存在     True
    # 不存在   False
    isExists = os.path.exists(path)
    # 判断结果
    if not isExists:
        # 如果不存在则创建目录
        # 创建目录操作函数
        os.makedirs(path)
        print(path + ‘ 创建成功‘)
        return True
    else:
        # 如果目录存在则不创建,并提示目录已存在
        print(path + ‘ 目录已存在‘)
        return False

# 访问百度图片获取信息
def get_data(name, pn):
    keys = {
        ‘tn‘: ‘baiduimage‘,
        ‘word‘: str(name),
        ‘pn‘: str(pn),  # 从0开始30的倍数
        ‘rn‘: ‘30‘,
    }
    baseurl = ‘https://image.baidu.com/search/index‘

    response = requests.get(baseurl, params=keys)
    return response
    # with open(‘a.html‘, ‘wb‘)as f:
    #     f.write(response.content)

# 获取图片地址
def get_img_url(response):
    p = re.compile(‘"thumbURL":"(.*?jpg)"‘, re.S)
    urls = p.findall(str(response.text))
    print(urls)
    return urls

# 下载一张图片
def get_one_img(url, img_path, img_name):
    content = requests.get(url).content
    with open(‘{}/{}.jpg‘.format(img_path, img_name), ‘wb‘) as f:
        print(img_name + ‘下载成功‘)
        f.write(content)

# 获取某路径下某扩展名的详情信息(文件个数和文件名)
def get_file_count(path, type):
    """
    :param path: 文件夹路径
    :param type: 文件扩展名
    :return: 返回一个字典,counts表示文件个数,filenames表示所有文件的文件名
    """
    import os.path
    dir = path
    m = 0
    files = []
    for parentdir, dirname, filenames in os.walk(dir):
        for filename in filenames:
            # print(filename)
            files.append(filename)
            if os.path.splitext(filename)[1] == type:
                m = m + 1
    # print(m)
    return {‘counts‘: m, ‘filenames‘: files}

# 获取所需的图片
def get_needs_imgs(imgs_needs, img_type):
    tran_img_type = str(translate(img_type, ‘en‘)).lower()  # 翻译完之后所有字母小写

    img_path = ‘imgs/‘ + tran_img_type  # 图片存储路径
    mkdir(img_path)  # 创建文件夹

    img_pg = 0  # 30的倍数
    while True:
        files_details = get_file_count(img_path, ‘.jpg‘)  # 查看当前目录下已经有多少图片
        count = files_details[‘counts‘]  # 获取指定路径下有多少文件
        count2 = count
        if count2 >= imgs_needs:
            print(‘指定文件夹下已经有{}张图片了‘.format(str(imgs_needs)))
            break
        res = get_data(img_type, img_pg)
        urls = get_img_url(res)
        for url in urls:
            get_one_img(url, img_path, tran_img_type + str(count2))
            count2 = count2 + 1
            if count2 >= imgs_needs:
                break
        img_pg += 30

# 主要是为了多进程
def main(img_type):
    get_needs_imgs(imgs_needs=imgs_needs, img_type=img_type)

imgs_needs = 20  # 需要多少张图片
img_types = [‘吉他‘, ‘兔子‘]  # 需要什么图片
# get_needs_imgs(imgs_needs, img_type)

if __name__ == ‘__main__‘:
    # 使用多进程
    pool = Pool()
    pool.map(main, img_types)

原文地址:https://www.cnblogs.com/felixwang2/p/9232864.html

时间: 2024-10-10 02:24:18

从百度图片批量获取自己想要的图片的相关文章

自己动手写工具:百度图片批量下载器

开篇:在某些场景下,我们想要对百度图片搜出来的东东进行保存,但是一个一个得下载保存不仅耗时而且费劲,有木有一种方法能够简化我们的工作量呢,让我们在离线模式下也能爽爽地浏览大量的美图呢?于是,我们想到了使用网络抓取去帮我们去下载图片,并且保存到我们设定的文件夹中,现在我们就来看看如何来设计开发一个这样的图片批量下载器. 一.关于网络抓取与爬虫 网络蜘蛛的主要作用是从Internet上不停地下载网络资源.它的基本实现思想就是通过一个或多个入口网址来获取更多的URL,然后通过对这些URL所指向的网络资

【图片】批量获取几百张图片

用途:需要图片时我们经常是去百度里随便找几张,次数多了就有点烦了,这个工具类就是批量获取几百张图片的url和描述. public class PicUrls { public static ArrayList<BasicPicBean> getPicList() { ArrayList<UrlBean> beans = new ArrayList<>(); beans.addAll(Arrays.asList(beans0)); beans.addAll(Arrays.

从百度地图API接口批量获取地点的经纬度

今天我同事要做一个规划,需要获取Excel中的2000多个地址的经纬度.问我有没有办法,正好我这段时间学习 Python,想了一下,觉得可以.于是就写了一个以下的代码.刚开始觉得差不多两个小时可以搞定,结果花费了半天多,汗...主要是在卡从百度地图 API获取的是坐标总是不对.后来网上查资料才明白,原来从百度API获取的是墨卡托坐标,而实际使用的是WGS84坐标. 1 #!/usr/bin/python 2 #coding:utf-8 3 4 import xlrd 5 import xlwt

iOS真机沙盒文件查看 图片批量存储/获取/删除

转载请标注来自:http://blog.csdn.net/u014202635/article/details/46863629 1. 选Devices 2. 3. 选中第二行 4. 保存在桌面 5. 右击选中显示包内容 6. 以上环境为x-code6.3.1 //---------------------------------------------------------------------------------------------------------------------

爬虫-批量获取图片

python版本:3.0 使用库: import urllib.request  #打开网页的库 import os                  #创建文件夹有关 程序作用:批量爬取煎蛋网上图片 视频链接:链接:http://pan.baidu.com/s/1mhLBwWo 密码:1n51 有一点与视频不同:视频中图片链接为http:打头,实际煎蛋网目前没有http:,会导致无法识别网页类型,不能正确下载,在保存是补上http:即可 基础知识: 1.对于某个网站,网址一般是按顺序编码的比如

如何从统计中批量获取BD搜索关键词及对应的入口页面?

前面我们介绍了通过cnzz的访问明细获取到搜索关键词及对应的入口页面,但是从BD搜索进来的关键词无法完整显示,只能呈现一些bd图片搜索的关键词,这是因为百度宣布从去年5月开始逐渐取消了referer关键词显示,保护站点流量关键词数据信息,第三方将不再可以轻易地窃取到流量关键词,令站点数据更加私密化.站长需要获得网站流量关键词时,可以使用百度站长平台提供的搜索关键词工具或者百度统计相关功能进行查询.是不是有点垄断的意味呢?没办法,国内的市场份额摆在那.当然你也可以针对其他搜索引擎做专门的优化.从统

Python3使用百度人脸识别接口识别高颜值妹子图片

一.在百度云平台创建应用 为什么要到百度云平台创建应用,首先来说是为了获取获取access_token时需要的API Key和Secret Key 至于为什么需要API Key和Secret Key才能获取access_token,应该一是为了推广一下百度云二是为了获取一些统计数据.微信苹果要你们搞得,度娘就不能要你们搞得?不要纠结 1.访问百度AI开放 平台:http://ai.baidu.com/ 2."产品服务"----"人脸检测" 3. "立即使用

iOS下载图片之前获取网络图片尺寸的失败尝试

最近一直在找获取网络图片的size的方式,最后得出两个结论: 1 使用分线程下载下来,然后获得图片的size 2 使用网络请求图片的头文件,然后从头文件中找到图片大小的信息 第一种方法需要主线程分线程切换,因为在使用tableView来reloadData的时候,刷表老是出问题,先放着不管 然后我重点是想搞一下第二个方法: 在网上找到了一个博客:http://cxjwin.github.io/2013/11/05/preview_image_size/ 大神写的很不错 主要思路就是先在网上找一个

用EXCEL批量获取网页标题的方法

这段时间准备做淘宝,但不知道卖什么产品,因此想从一些B2B 网站上扒拉一些产品词下来挨个研究,但一个一个的打开网页查看产品太慢太费事,但想到这些产品词都存在于网页标题上,因此想到了用excel来批量获取网页的标题.经过一番查找,在网上找到了两种方法(其实是两组代码). 打开excel找到开发者工具,点击"Visual Basic" 在下图所示位置右键点击添加模块 填入如下代码: Function Title(url As String) As String With CreateObj