资讯专栏INFORMATION COLUMN

用Python保住“设计大哥“的头发,直接甩给他10000张参考图,爬虫采集【稿定设计】平面模板素材

iliyaku / 1145人阅读

摘要:最近稿定设计这个站点挺火,设计组的大哥一直在提,啊,这个好,这个好。目的是给设计组大哥提供素材参考,毕竟做设计的可不能抄袭哦思路枯竭的时候,借鉴一下还凑合。看了一眼设计大哥的头发,我觉得够他用一年了。

最近【稿定设计】这个站点挺火,设计组的大哥一直在提,啊,这个好,这个好。

机智的我,思考了一下,决定给他采集一些公开素材,以后跟设计对线的时候,肯定要卖个人情。

目标站点分析

本次要采集的站点是:https://sucai.gaoding.com/plane/materials,高清图肯定不能采集啦,仅采集 1080 P 的缩略图。

目的是给设计组大哥提供素材参考,毕竟做设计的可不能抄袭哦(思路枯竭的时候,借鉴一下还凑合)。

目标站点的筛选项非常“贴心”的提供“全部”这一选项,省的我们拼凑分类了。


在查阅分页的时候,发现稿定设计网站仅开放了 100 页数据,每页 100 条,也就是咱只能获取到 10000 张图片。

看了一眼设计大哥的头发,我觉得够他用一年了。

页面 URL 跳转链接规则如下:

https://sucai.gaoding.com/plane/materials?p=1https://sucai.gaoding.com/plane/materials?p=100

但是数据的请求链接为下述规则:

https://api-sucai.gaoding.com/api/search-api/sucai/templates/search?q=&sort=&colors=&styles=&filter_id=1617130&page_size=100&page_num=1https://api-sucai.gaoding.com/api/search-api/sucai/templates/search?q=&sort=&colors=&styles=&filter_id=1617130&page_size=100&page_num=2

参数说明

  1. q:搜索的关键字,为空即可;
  2. sort:排序规则,可空;
  3. colorsstyles:颜色和风格, 保持空;
  4. filter_id:过滤 ID,保持全部应该是 1617130
  5. page_size:获取的每页数据量;
  6. page_num:页码,该值最大为 100。

有了上述分析之后,就可以进行编码工作了。

编码时间

在正式编码前,先通过一张图整理逻辑,该案例依旧为生产者与消费者模式爬虫,采用 threading 模块queue 队列模块实现。


理解上图之后,就可以编写下述代码了,重点部分在注释中体现,本次采用类写法,学习的时候需要特别注意一下。

import requestsfrom queue import Queueimport randomimport threadingimport timedef get_headers():    user_agent_list = [        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1"        "Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11",        "其它UA,自行查找即可"    ]    UserAgent = random.choice(user_agent_list)    headers = {"User-Agent": UserAgent,"referer": "https://sucai.gaoding.com/"}    return headers# 生产者线程class Producer(threading.Thread):    def __init__(self, t_name, queue):        threading.Thread.__init__(self, name=t_name)        self.data = queue 	# 测试爬取 3 页,实际采集的时候,可以放大到100页    def run(self):        # 测试数据,爬取3页        for i in range(1,3):            print("线程名: %s,序号:%d, 正在向队列写入数据 " % (self.getName(), i))            # 拼接URL地址            url = "https://api-sucai.gaoding.com/api/search-api/sucai/templates/search?q=&sort=&colors=&styles=&filter_id=1617130&page_size=100&page_num={}".format(i)            res = requests.get(url=url,headers=get_headers(),timeout=5)            # 这里可以增加 try catch 验证,防止报错            if res:                data = res.json()                # JSON 提取数据                for item in data:                    title = item["title"]                    img_url = item["preview"]["url"]                    self.data.put((title,img_url))        print("%s: %s 写入完成!" % (time.ctime(), self.getName()))# 消费者线程class Consumer(threading.Thread):    def __init__(self, t_name, queue):        threading.Thread.__init__(self, name=t_name)        self.data = queue    def run(self):        while True:        	# 从队列获取数据            val = self.data.get()            if val is not None:                print("线程名:%s,正在读取数据:%s" % (self.getName(), val))                title,url = val                # 请求图片                res = requests.get(url=url,headers=get_headers(),timeout=5)                if res:                	# 保存图片                    with open(f"./imgs/{title}.png","wb") as f:                        f.write(res.content)                        print(f"{val}","写入完毕")# 主函数def main():    queue = Queue()    producer = Producer("生产者", queue)    consumer = Consumer("消费者", queue)    producer.start()    consumer.start()    producer.join()    consumer.join()    print("所有线程执行完毕")if __name__ == "__main__":    main()

生产者线程用于产生图片地址,存放到队列 queue 中,消费者线程通过一个“死循环”不断从队列中,获取图片地址,然后进行下载。

代码运行效果如下图所示:

收藏时间

代码仓库地址:https://codechina.csdn.net/hihell/python120,去给个关注或者 Star 吧。

你需要的 10000 张设计参考图下载地址

  1. 第一部分参考图下载地址,接近 1G
  2. 第二部分参考图下载地址,接近 1G
  3. 第三部分参考图下载地址,接近 1G
  4. 第四部分参考图下载地址,接近 1G

数据没有采集完毕,想要的可以在评论区留言交流

今天是持续写作的第 211 / 365 天。
可以关注我,点赞我、评论我、收藏我啦。

更多精彩

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/119316.html

相关文章

  • 关于Python爬虫种类、法律、轮子一二三

    摘要:一般用进程池维护,的设为数量。多线程爬虫多线程版本可以在单进程下进行异步采集,但线程间的切换开销也会随着线程数的增大而增大。异步协程爬虫引入了异步协程语法。 Welcome to the D-age 对于网络上的公开数据,理论上只要由服务端发送到前端都可以由爬虫获取到。但是Data-age时代的到来,数据是新的黄金,毫不夸张的说,数据是未来的一切。基于统计学数学模型的各种人工智能的出现...

    lscho 评论0 收藏0
  • SegmentFault 技术周刊 Vol.30 - 学习 Python 来做一些神奇好玩事情吧

    摘要:学习笔记七数学形态学关注的是图像中的形状,它提供了一些方法用于检测形状和改变形状。学习笔记十一尺度不变特征变换,简称是图像局部特征提取的现代方法基于区域图像块的分析。本文的目的是简明扼要地说明的编码机制,并给出一些建议。 showImg(https://segmentfault.com/img/bVRJbz?w=900&h=385); 前言 开始之前,我们先来看这样一个提问: pyth...

    lifesimple 评论0 收藏0
  • 纽约蹭饭手册:怎样利Python和自动化脚本在纽约省钱又省心?

    摘要:会解释怎样使用逻辑回归,随机森林,和自动化脚本,但都不会深入。这使我在纽约地区积累了超过名粉丝,并且仍在快速增长。我收集了个帐户,这些帐户发布了许多关于纽约的优质图片。以下面这两篇帖子为例这两个帖子来自同一个纽约的帐户。 showImg(https://segmentfault.com/img/remote/1460000019393373); 在家做饭不下馆子可以减少开支已经是公开的...

    Xufc 评论0 收藏0
  • Python爬取了五千美女壁纸,每天一忘记初恋!

    摘要:爱美之心人皆有之,正所谓窈窕淑女君子好逑,美好敲代码的一天从好看的桌面壁纸开始,好看的桌面壁纸从美女壁纸开始。 大家好,我是辣条,这是我爬虫系列的第26篇。 爱美之心人皆有之,正所谓窈窕淑女君子好逑,美好敲代码的一天从好看的桌面壁纸开始,好看的桌面壁纸从美女壁纸开始。今天给大家带来福利啦,爬...

    huaixiaoz 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<