首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【爬虫】花瓣图片爬虫,Python图片采集下载源码

【爬虫】花瓣图片爬虫,Python图片采集下载源码

作者头像
二爷
发布2020-07-22 14:33:01
1.1K0
发布2020-07-22 14:33:01
举报
文章被收录于专栏:二爷记二爷记

花瓣是一个图片集合网站,也是设计师必备网站,不少设计师没有了花瓣的话,基本没有干活技能,哈哈,设计天下一大抄,其实花瓣的版权存在很大争议,不断被和谐,整改,就能够看出来,现在还有不少采集资源(图片)没有被公开。

正常爬取搜索入口内容是看不到json数据,需要通过浏览器抓包获取协议头,来伪造访问才能拿到json数据,不过关于协议头的字段需要多次测试才能正确获取到json数据。

这里我是直接使用了抓包的完整的协议头字段。

浏览器抓包入口,真实访问地址

访问入口参数,page页面参数修改就是这里

抓包协议头,完整的字段

关于花瓣图片的真实地址

比如:

https://hbimg.huabanimg.com/870827b6665a6e709023799bfea5df2c61a4cd74c509-6dM2ML_fw658/format/webp

真实的地址是去掉_fw658/format/webp,多余的字段,不少网站图片都有这样的设置

真实的图片地址:

https://hbimg.huabanimg.com/870827b6665a6e709023799bfea5df2c61a4cd74c509-6dM2ML

采集效果:

附源码:

#https://huaban.com/search/?q=纹理&category=industrial_design
#by 微信:huguo00289
# -*- coding: UTF-8 -*-
import requests,json,time
from fake_useragent import UserAgent


def ua():
    ua=UserAgent()
    headers={"User-Agent":ua.random,}
    return headers

def get_pins():
    img_urls=[]
    headers={
        'Accept': 'application/json',
        'Accept-Encoding': 'gzip, deflate, br',
        'Accept-Language': 'zh-CN,zh;q=0.9',
        'Connection': 'keep-alive',
        'Cookie': cookies,
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36',
        'X-Request': 'JSON',
        'X-Requested-With': 'XMLHttpRequest',
    }
    #cookies自行填写修改
    for i in range(1,25):
        url=f"https://huaban.com/search/?q=%E7%BA%B9%E7%90%86&category=industrial_design&k9v6qdc9&page={i}&per_page=20&wfl=1"
        response = requests.get(url,headers=headers,timeout=6).content.decode('utf-8')
        time.sleep(2)
        response_dict=json.loads(response)
        print(response_dict)
        pins=response_dict['pins']
        print(len(pins))
        for pin in pins:
            key=pin['file']['key']
            key =f'https://hbimg.huabanimg.com/{key}'
            img_urls.append(key)

    print(len(img_urls))
    return img_urls


def tp(img_urls):
    i=1
    for img_url in img_urls:
        r = requests.get(img_url,headers=ua(),timeout=6)
        time.sleep(1)
        with open(f'{i}.jpg','wb')as f:
            f.write(r.content)
        print("下载图片成功")
        i=i+1


if __name__ == '__main__':
    img_urls=get_pins()
    tp(img_urls)
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python与SEO学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档