Python获取百度图片

python获取百度图片

我又来更新了,因为上次写到了如何获取到图片的地址链接,我想了一下 那个网站的图片太少了,我们既然想要获得更多的头像,当然是去百度里面的图片找呀,所以这次就是更新的就是如何去获取百度里面的图片。

一、安装环境

这个环境的安装我在上篇文章里面说明了如何去安装,这里我就不在去一步一步的讲啦,可以去看看

二、对目标网站的了解

我们这次是要对百度的里面的图片,进行获取,首先我们打开目标网站,这里我们可以看到有很多头像,照常按下F12或者右键检查
在这里插入图片描述
在检查里面点击左上角的小箭头,移动到图片上面,会发现这里出现了一个地址链接,但是我们在源代码里面却找不到,相关的代码。这是因为百度的这个是通过调用js去调用图片,可以大大减少加载时的缓存,那我们该怎么办呢?点开network在这里插入图片描述
我们点开Network后,选择HXR,然后将滚动栏往下滚动几下,这个时候后面的图片才会出来,我们点击acjson 在这里插入图片描述
这个时候我们点开data发现是不是有大约30个文件,我们点开其中一个,发现里面有一些相关信息和名字,这个时候我们找到thumbURL
在这里插入图片描述
这个链接找到后,我们将这个链接复制到网页去打开,来证实一些是不是我们找对了
在这里插入图片描述
发现我们是不是可以看到这个图片了,那我们就是找对了,百度这个头像它不是全部放在页面,是通过js调用每次是30张,这个时候我们要去找找规律,看他后面的规律是什么样的。
在这里插入图片描述
打开Headers,像下滚动,注意我箭头指的那一个,下面两个是做的一个比较,除了这个加30外其他的,大致没什么改变,当然细心的也发现了下面那个GSM也发生了变化,我当时也以为这个变化会影响数据的获取,找了很多解决办法,也没找到规律,就想着要不我先试试,后来发现没有定义这个他也没报错。
在这里插入图片描述
在这里插入图片描述
现在我们已经基本了解到了结构,那我们现在就去写代码啦。

三、 去伪装请求网址

引入模块

import urllib.request
import requests //请求模块

这里我们给我们需要搜索的名称定义一个变量keyword,这个能理解吗,就是我们在搜索时,输入的是头像,就会从头像全部里面下载,要是定义情侣头像就会从情侣头像里面下载,所以我们给它定义了一个变量,然后我们还需要在pn定义变量,这样给他定义一个循环,后面每次加30,代码就在下面了,有人问这么一长下面的一个代码那里来的,有没有发现上面的那个图和这个很像,没错就是上面的那个图里面的代码。

def getDatas(keyword, pages):
    params = []
    for i in range(30,30*pages+30,30):
        params.append({
            'tn': 'resultjson_com',
            'ipn': 'rj',
            'ct': 201326592,
            'is': '',
            'fp': 'result',
            'queryWord': keyword,
            'cl': 2,
            'lm': -1,
            'ie': 'utf-8',
            'oe': 'utf-8',
            'adpicid': '',
            'st': -1,
            'z': '',
            'ic': 0,
            'word': keyword,
            's': '',
            'se': '',
            'tab': '',
            'width': '',
            'height': '',
            'face': 0,
            'istype': 2,
            'qc': '',
            'nc': 1,
            'fr': '',
            'pn': i,
            'rn': 30,
            'gsm': '1e',
            '1575080574755': ''
        })

像这类的大网站都会有反爬的机制,就需要加请求头来伪装浏览器访问

headers = {
    ‘user-Agent’:'这个里面填写自己的设备信息',
    ‘Referer’:'这个里面填写自己的获取的网站的信息'
}

在这里插入图片描述

四、对需要的图片下载保存

 url = "http://image.baidu.com/search/index?tn=baiduimage&ct=201326592&lm=-1&cl=2&ie=gb18030&word=%CD%B7%CF%F1&fr=ala&oriquery=%E5%A4%B4%E5%83%8F&ala=1&alatpl=portait&pos=0"        urls.append(requests.get(url,params=i,headers=headers,proxies=proxy).json().get("data"))
    return urls
def getImg(datalist, path):
    x = 0
    for list in datalist:
        for i in list:
            if i.get('thumbURL') != None:
                print('%s' % i.get('thumbURL'))
                urllib.request.urlretrieve(i.get('thumbURL'), path + '%d.jpg' % x)
                x += 1
            #else:
               print('图片链接不存在')


if __name__ == '__main__':
    datalist = getDatas('头像', 1) #这个里面头像就是我要搜的名称 数字是我需要获取多少个30  
    getImg(datalist, 'D:/python/qqimage/images/纹身/')
    #这个daralist 里面是我要保存的文件的文件夹,我创建的是一个纹身的文件夹

这样不出意外应该就是可以下载到图片了,我这里是手动创建的文件夹,有可能没有那么高级,大佬忽视,我这个获取到了大概5000千左右图片后就被百度给IP封了,再去请求就会报错,这个我是在开始请求时忘了去用代理IP了,我这两天研究代理IP,一直弄的不是很懂,希望大佬能沟通沟通,交流一下,好啦,今天的就到这啦,有问题或者有不足的希望能指出来,欢迎交流啊!
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值