python 爬取百度图片

python 爬取百度图片

运行环境:python3.7
编译器:pycharm
注意事项:
这个是参考网上一位老哥写的,我只进行了简单的注解和修改。但网址我找不到了,要是有谁能找到,跟我说一声。
代码如下:

import requests
import os
import urllib
class Spider_baidu_image():
    def __init__(self):
        self.url = 'http://image.baidu.com/search/acjson?'#要爬取的对象所在json网址的前半段地址
        self.headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.\
            3497.81 Safari/537.36'}#伪装浏览器
        self.headers_image = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.\
            3497.81 Safari/537.36','Referer':'http://image.baidu.com/search/index?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=result&fr=&sf=1&fmq=1557124645631_R&pv=&ic=&nc=1&z=&hd=1&latest=0&copyright=0&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&sid=&word=%E8%83%A1%E6%AD%8C'}
        #等爬取图片需要用的 在函数get_image_url里面需要用
        self.keyword ="篮球"#要爬取的对象
        self.paginator = 1#要爬取的页数
        # self.paginator = 50
        # print(type(self.keyword),self.paginator)
        # exit()
    def get_param(self):#找到存储要爬取对象的json网址,这个函数只能整理出要爬取对象的后半段网址
        """
        获取url请求的参数,存入列表并返回
        :return:
        """
        keyword = urllib.parse.quote(self.keyword)#将要爬取的对象转换为浏览器可以识别的语言
        params = []
        for i in range(1,self.paginator+1):#要爬取对象所在json网址的后半段
            params.append('tn=resultjson_com&ipn=rj&ct=201326592&is=&fp=result&queryWord={}&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=&hd=1&latest=0&copyright=0&word={}&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&cg=star&pn={}&rn=30&gsm=78&1557125391211='.format(keyword,keyword,30*i))
        return params

    def get_urls(self,params):#得到要爬起对象所在json的全部网址
        """
        由url参数返回各个url拼接后的响应,存入列表并返回
        :return:
        """
        urls = []
        for i in params:
            urls.append(self.url+i)
        return urls
    def get_image_url(self,urls):#这个函数负责在json网址中找到要爬取的图片地址
        image_url = []
        for url in urls:
            json_data = requests.get(url,headers = self.headers).json()#得到json网址中的内容
            json_data = json_data.get('data')#对其中内容做出第一步筛选得到其中的data数据(data里面包含图片网址)
            for i in json_data:
                if i:
                    image_url.append(i.get('thumbURL'))#提取data中的图片网址
        return image_url
    def get_image(self,image_url):
        """
        根据图片url,在本地目录下新建一个以搜索关键字命名的文件夹,然后将每一个图片存入。
        :param image_url:
        :return:
        """
        cwd = os.getcwd()#查询当前项目文件所在地址
        file_name = os.path.join(cwd,self.keyword)#建立一个以对象名为名的文件夹
        if not os.path.exists(self.keyword):#进行一次检查。如果未检出目标文件夹,立即创建,防止上一步出错
            os.mkdir(file_name)
        for index,url in enumerate(image_url,start=1):#这种for循环你们自己上网查,挺简单的
            with open( file_name+'\\{}.jpg'.format(index),'wb') as f:#打开文件夹以‘wb’(自己查wb)的方式进行操作改文件
                f.write(requests.get(url,headers = self.headers_image).content)
            if index != 0 and index % 30 == 0:
                print('{}第{}页下载完成'.format(self.keyword,index/30))
    def __call__(self, *args, **kwargs):#当使用spider函数时,自动调用这个函数
        params = self.get_param()
        urls = self.get_urls(params)
        image_url = self.get_image_url(urls)
        self.get_image(image_url)

if __name__ == '__main__':
    spider = Spider_baidu_image()
    spider()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值