花瓣网小姐姐图片爬虫详解
一个人的自愈的能力越强,才越有可能接近幸福。做一个寡言,却心有一片海的人,不伤人害己,于淡泊中,平和自在,马上五一了朋友们有什么五一活动在北京有哪里低消费不累又好玩的地方推荐呢。话不多说今天咱们手把手爬一下花瓣网小姐姐的图片。
- 还是先分析网站结构,网站地址
到首页咱们直接检索小姐姐进入列表页
我这里直接抓包了,但是发现抓到的这个包返回的数据不像是有图片的链接地址或许可能是图片有id通过图片id到详解请,然后再详情也中才有图片的链接地址,到是这样的话一张图片一张图片就需要发送三次请求,比较麻烦不是咱的做事风格,不要慌,先向下翻个页看看翻页翻页的接口里面数据是什么样子的,这里没有翻页的按钮那就是一直向下滑动了,先清楚一下抓单的包
随着滚动鼠标有很多图片的包出现,但是这个不是我们要的,注意看右边的进度条,当他回滚的时候就是翻了一页了
然后我们选择这个,过滤掉这个图片接口
这下就清晰多了,这个wind一看肯定不是我们要的接口,这里没有返回数据也没有请求参数
这个file接口就是要找的数据接口没错了从参数数中也可以看到索引的内容为小姐姐,每页条数据,page为翻到的页数ok,然后我们看看里面数据是什么样子的
通过响应数据看到这里面并没有图片链接之类的数据。不要慌,先点开一张图片看看详情也图片的链接是什么样子的
经过上面的两步发现详情页就是列表也接口中的pin_id,图片链接就是列表页中的file-key经过固定改写得出,这就明了了,我们只需要按照他改写的方法改写链接,就可以从列表也直接下载小姐姐的图片了
- ok,开始写代码,先请求一下列表页接口,拿到所有的key
headers = {
'authority': 'api.huaban.com',
'accept': 'application/json, text/plain, */*',
'accept-language': 'zh-CN,zh;q=0.9',
'cookie': 'user_device_id=ebd69f37566549d1847e1acdb7f11aa5; user_device_id_timestamp=1682158921365; aliyungf_tc=1e972da82ed7e05ded7d5545b46d92c5e731eae440790133e6e1db81285917a0; sid=s%3A0yRhBagvwQxgKoA1D5AlvGae9w26ztS7.VlYZEJiIFuD1ZMDXq07jE0372IhGUrMU25BQSNKEOSY',
'guest-token': 'ebd69f37566549d1847e1acdb7f11aa5',
'origin': 'https://huaban.com',
'referer': 'https://huaban.com/search?q=%E5%B0%8F%E5%A7%90%E5%A7%90',
'sec-ch-ua': '" Not A;Brand";v="99", "Chromium";v="102", "Google Chrome";v="102"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Windows"',
'sec-fetch-dest': 'empty',
'sec-fetch-mode': 'cors',
'sec-fetch-site': 'same-site',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36',
'x-abtest-tags': 'eyJ0cmFmZmljX2FiX2Rpc2NvdmVyIjoic3RyaW5nXzAiLCJleHRyYV9tYXRlcmlhbCI6ImJhc2UiLCJzZWFyY2hfc2NvcmVfdjJfYWIiOiJzdHJpbmdfMSJ9',
'x-guest-token': 'ebd69f37566549d1847e1acdb7f11aa5',
}
params = {
'text': '小姐姐',
'sort': 'all',
'limit': '20',
'page': '3',
'position': 'search_pin',
}
response = requests.get('https://api.huaban.com/search/file', params=params, headers=headers).json()['pins']
for res in response:
file_key = res['file']['key']
print(file_key)
ok,然后再对这个图片id进行改写就变成了这样
最后再瞎下载图片保存到本地,注意这里图片的格式是webp格式需要转为png格式就欧克了
headers = {
'authority': 'gd-hbimg.huaban.com',
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'accept-language': 'zh-CN,zh;q=0.9',
'cache-control': 'max-age=0',
'cookie': 'user_device_id=ebd69f37566549d1847e1acdb7f11aa5; user_device_id_timestamp=1682158921365; sid=s%3A0yRhBagvwQxgKoA1D5AlvGae9w26ztS7.VlYZEJiIFuD1ZMDXq07jE0372IhGUrMU25BQSNKEOSY',
'if-modified-since': 'Wed, 08 Mar 2023 03:50:47 GMT',
'if-none-match': '"69496D8B27248F6159903299DB00E74F"',
'sec-ch-ua': '" Not A;Brand";v="99", "Chromium";v="102", "Google Chrome";v="102"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Windows"',
'sec-fetch-dest': 'document',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'none',
'sec-fetch-user': '?1',
'upgrade-insecure-requests': '1',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36',
}
response = requests.get(tu_url, headers=headers)
with open(f'{file_key}.webp','wb+')as f:
f.write(response.content)
image_wepb = image.open(f'{file_key}.webp')
image_wepb.save(f'{file_key}.png')
欧克
转载自:https://juejin.cn/post/7224793504106397752