iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python图片爬虫
  • 946
分享到

python图片爬虫

python爬虫开发语言 2023-08-31 18:08:59 946人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

#!/usr/bin/env python# -*- coding:utf-8 -*-import argparseimport osimport reimport sysimport urllibi

#!/usr/bin/env python# -*- coding:utf-8 -*-import argparseimport osimport reimport sysimport urllibimport JSONimport Socketimport urllib.requestimport urllib.parseimport urllib.error# 设置超时import timetimeout = 5socket.setdefaulttimeout(timeout)class Crawler:    # 睡眠时长    __time_sleep = 0.1    __amount = 0    __start_amount = 0    __counter = 0    headers = {'User-Agent': 'Mozilla/5.0 (windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0', 'Cookie': ''}    __per_page = 30    # 获取图片url内容等    # t 下载图片时间间隔    def __init__(self, t=0.1):        self.time_sleep = t    # 获取后缀名    @staticmethod    def get_suffix(name):        m = re.search(r'\.[^\.]*$', name)        if m.group(0) and len(m.group(0)) <= 5:            return m.group(0)        else:            return '.jpeg'    @staticmethod    def handle_baidu_cookie(original_cookie, cookies):        """        :param string original_cookie:        :param list cookies:        :return string:        """        if not cookies:            return original_cookie        result = original_cookie        for cookie in cookies:            result += cookie.split(';')[0] + ';'        result.rstrip(';')        return result    # 保存图片    def save_image(self, rsp_data, Word):        if not os.path.exists("./" + word):            os.mkdir("./" + word)        # 判断名字是否重复,获取图片长度        self.__counter = len(os.listdir('./' + word)) + 1        for image_info in rsp_data['data']:            try:                if 'replaceUrl' not in image_info or len(image_info['replaceUrl']) < 1:                    continue                obj_url = image_info['replaceUrl'][0]['ObjUrl']                thumb_url = image_info['thumbURL']                url = 'https://image.baidu.com/search/down?tn=download&ipn=dwnl&word=download&ie=utf8&fr=result&url=%s&thumburl=%s' % (urllib.parse.quote(obj_url), urllib.parse.quote(thumb_url))                time.sleep(self.time_sleep)                suffix = self.get_suffix(obj_url)                # 指定UA和referrer,减少403                opener = urllib.request.build_opener()                opener.addheaders = [                    ('User-agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWEBKit/537.36 (Khtml, like Gecko) Chrome/83.0.4103.116 Safari/537.36'),                ]                urllib.request.install_opener(opener)                # 保存图片                filepath = './%s/%s' % (word, str(self.__counter) + str(suffix))                urllib.request.urlretrieve(url, filepath)                if os.path.getsize(filepath) < 5:                    print("下载到了空文件,跳过!")                    os.unlink(filepath)                    continue            except urllib.error.HttpError as urllib_err:                print(urllib_err)                continue            except Exception as err:                time.sleep(1)                print(err)                print("产生未知错误,放弃保存")                continue            else:                print("+1,已有" + str(self.__counter) + "张")                self.__counter += 1        return    # 开始获取    def get_images(self, word):        search = urllib.parse.quote(word)        # pn int 图片数        pn = self.__start_amount        while pn < self.__amount:            url = 'https://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&ct=201326592&is=&fp=result&queryWord=%s&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=&hd=&latest=©right=&word=%s&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&pn=%s&rn=%d&gsm=1e&1594447993172=' % (search, search, str(pn), self.__per_page)            # 设置header防403            try:                time.sleep(self.time_sleep)                req = urllib.request.Request(url=url, headers=self.headers)                page = urllib.request.urlopen(req)                self.headers['Cookie'] = self.handle_baidu_cookie(self.headers['Cookie'], page.info().get_all('Set-Cookie'))                rsp = page.read()                page.close()            except UnicodeDecodeError as e:                print(e)                print('-----UnicodeDecodeErrorurl:', url)            except urllib.error.URLError as e:                print(e)                print("-----urlErrorurl:", url)            except socket.timeout as e:                print(e)                print("-----socket timout:", url)            else:                # 解析json                rsp_data = json.loads(rsp, strict=False)                if 'data' not in rsp_data:                    print("触发了反爬机制,自动重试!")                else:                    self.save_image(rsp_data, word)                    # 读取下一页                    print("下载下一页")                    pn += self.__per_page        print("下载任务结束")        return    def start(self, word, total_page=1, start_page=1, per_page=30):        """        爬虫入口        :param word: 抓取的关键词        :param total_page: 需要抓取数据页数 总抓取图片数量为 页数 x per_page        :param start_page:起始页码        :param per_page: 每页数量        :return:        """        self.__per_page = per_page        self.__start_amount = (start_page - 1) * self.__per_page        self.__amount = total_page * self.__per_page + self.__start_amount        self.get_images(word)if __name__ == '__main__':    if len(sys.argv) > 1:        parser = argparse.ArgumentParser()        parser.add_argument("-w", "--word", type=str, help="抓取关键词", required=True)        parser.add_argument("-tp", "--total_page", type=int, help="需要抓取的总页数", required=True)        parser.add_argument("-sp", "--start_page", type=int, help="起始页数", required=True)        parser.add_argument("-pp", "--per_page", type=int, help="每页大小", choices=[10, 20, 30, 40, 50, 60, 70, 80, 90, 100], default=30, nargs='?')        parser.add_argument("-d", "--delay", type=float, help="抓取延时(间隔)", default=0.05)        args = parser.parse_args()        crawler = Crawler(args.delay)        crawler.start(args.word, args.total_page, args.start_page, args.per_page)  # 抓取关键词为 “美女”,总数为 1 页(即总共 1*60=60 张),开始页码为 2    else:        # 如果不指定参数,那么程序会按照下面进行执行        crawler = Crawler(0.05)  # 抓取延迟为 0.05        crawler.start('美女', 10, 2, 30)  # 抓取关键词为 “美女”,总数为 1 页,开始页码为 2,每页30张(即总共 2*30=60 张)        # crawler.start('二次元 美女', 10, 1)  # 抓取关键词为 “二次元 美女”        # crawler.start('帅哥', 5)  # 抓取关键词为 “帅哥”

使用方法:

百度图片爬虫,基于python3

需要安装python版本 >= 3.6

使用方法

$ Python crawling.py -husage: crawling.py [-h] -w WORD -tp TOTAL_PAGE -sp START_PAGE                   [-pp [{10,20,30,40,50,60,70,80,90,100}]] [-d DELAY]optional arguments:  -h, --help            show this help message and exit  -w WORD, --word WORD  抓取关键词  -tp TOTAL_PAGE, --total_page TOTAL_PAGE                        需要抓取的总页数  -sp START_PAGE, --start_page START_PAGE                        起始页数  -pp [{10,20,30,40,50,60,70,80,90,100}], --per_page [{10,20,30,40,50,60,70,80,90,100}]                        每页大小  -d DELAY, --delay DELAY                        抓取延时(间隔)

开始爬取图片

python crawling.py --word "丁真" --total_page 10 --start_page 1 --per_page 30

另外也可以在crawling.py最后一行修改编辑查找关键字
图片默认保存在项目路径
运行爬虫:

python crawling.py

来源地址:https://blog.csdn.net/m0_48096446/article/details/132194611

--结束END--

本文标题: python图片爬虫

本文链接: https://www.lsjlt.com/news/386643.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python图片爬虫
    #!/usr/bin/env python# -*- coding:utf-8 -*-import argparseimport osimport reimport sysimport urllibi...
    99+
    2023-08-31
    python 爬虫 开发语言
  • Python图片爬虫工具
    不废话了,直接上代码: import reimport osimport requestsimport tqdmheader={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)...
    99+
    2023-08-31
    python 爬虫 开发语言
  • python爬虫如何爬取图片
    这篇文章主要介绍了python爬虫如何爬取图片,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。python可以做什么Python是一种编程语言,内置了许多有效的工具,Pytho...
    99+
    2023-06-14
  • Python爬虫爬取网站图片
    此次python3主要用requests,解析图片网址主要用beautiful soup,可以基本完成爬取图片功能, 爬虫这个当然大多数人入门都是爬美女图片,我当然也不落俗套,首先也...
    99+
    2024-04-02
  • python实现简单爬虫--爬图片
    首先有两个功能需求:第一:获取到要爬的页面html内容;第二:使用正则表达式进行匹配并进行保存到本地。#!/usr/bin/env python #encoding:utf-8 import urllib import re def get...
    99+
    2023-01-31
    爬虫 简单 图片
  • 使用Python爬虫爬取妹子图图片
            最近在学习Python的爬虫部分。看到有网友在分享使用爬虫爬取各种网站的图片的代码,也想自己写个玩玩。今天花时间分析了一下妹子图网站的结构和HTML代码,使用urllib2和BeautifulSoup写出了一个自动下载妹子图...
    99+
    2023-01-31
    爬虫 妹子 图图
  • python shell 爬虫 妹子图片
    最近开始学Python,人们学一门语言潜移默化的第一个命令往往那个就是 hello world!这里也差不多,用python写了个小爬虫,爬妹子图的"照片".感觉效率好慢,应该是代码的问题,在此献丑了!!!需要安装两个好用的库,分别是 re...
    99+
    2023-01-31
    爬虫 妹子 图片
  • python爬虫怎么获取图片
    这篇文章主要讲解了“python爬虫怎么获取图片”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python爬虫怎么获取图片”吧!首先导入库给文件加入头信息,伪装成模拟浏览器访问实现翻页翻页多...
    99+
    2023-06-02
  • Python爬虫 自动爬取图片并保存
    一、准备工作   用python来实现对图片网站的爬取并保存,以情绪图片为例,搜索可得到下图所示 f12打开源码 在此处可以看到这次我们要爬取的图片的基本信息是在img - scr中 二、代码实现 这次的爬取主要用了如下的第三方库...
    99+
    2023-10-09
    爬虫 python 数据挖掘
  • python爬虫爬网站的视频和图片
    环境:centos6.5 python2.6.6   http://www.budejie.com/( 纯属测试,并无恶意 )网站分析:我们点视频按钮 可以看到url是:http://www.budejie.com/video/接着我们点开...
    99+
    2023-01-31
    爬虫 图片 网站
  • python爬虫实战项目之爬取pixiv图片
    自从接触python以后就想着爬pixiv,之前因为梯子有点问题就一直搁置,最近换了个梯子就迫不及待试了下。 爬虫无非request获取html页面然后用正则表达式或者beautif...
    99+
    2024-04-02
  • python爬虫怎么批量爬取百度图片
    这篇文章将为大家详细讲解有关python爬虫怎么批量爬取百度图片,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Python主要用来做什么Python主要应用于:1、Web开发;2、数据科学研究;3、网络爬...
    99+
    2023-06-14
  • 如何使用Python爬虫爬取网站图片
    这篇文章主要介绍了如何使用Python爬虫爬取网站图片,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。此次python3主要用requests,解析图片网址主要用beautif...
    99+
    2023-06-22
  • Python爬虫之教你利用Scrapy爬取图片
    目录Scrapy下载图片项目介绍使用Scrapy下载图片项目创建项目预览创建爬虫文件项目组件介绍Scrapy爬虫流程介绍页面结构分析最终目录树项目运行爬取结果后记Scrapy下载图片...
    99+
    2024-04-02
  • Python爬虫:如何快速掌握Python爬虫核心技术,批量爬取网络图片
    对于爬虫,很多伙伴首选的可能就是Python了吧,我们在学习Python爬虫的时候得有侧重点,这篇文章教大家如何快速掌握Python爬虫的核心!有不清楚的地方,可以留言!1. 概述本文主要实现一个简单的爬虫,目的是从一个百度贴吧页面下载图片...
    99+
    2023-06-02
  • 爬虫实例(二)—— 爬取高清4K图片
    大家好,我是 Enovo飞鱼,今天继续分享一个爬虫案例,爬取高清4K图片,加油💪。     目录 前言 增加异常处理 增加代码灵活性 基本环境配置 爬取目标网站 分析网站页面 具体代码实现 图片下载示例 感谢支持...
    99+
    2023-09-08
    爬虫 python 开发语言
  • python-爬虫-xpath方法-批量爬取王者皮肤图片
    import requestsfrom lxml import etree 获取NBA成员信息 # 发送的地址url = 'https://nba.hupu.com/stats/players'# U...
    99+
    2023-09-13
    python 爬虫 jupyter
  • 怎么使用Java爬虫批量爬取图片
    本篇内容主要讲解“怎么使用Java爬虫批量爬取图片”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用Java爬虫批量爬取图片”吧!爬取思路对于这种图片的获取,其实本质上就是就是文件的下载(H...
    99+
    2023-07-06
  • 如何使用Java爬虫批量爬取图片
    目录Java爬取图片爬取思路具体步骤具体代码实体类 Picture 和 工具类 HeaderUtil下载类最重要的类:解析页面类 PictureSpider启动类 BootStrap...
    99+
    2023-05-15
    Java爬虫 Java爬虫批量 批量爬取图片
  • python爬虫爬取股票的k线图
    目录前言数据来源分析数据抓取总结前言 之前已经讲述了一些关于;python;获取基金的一些信息,最近又有了一些新发现,和大家分享一下,这个是非常重要的内容,非常重要的内容。这个数据也...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作