Python爬虫 | 批量爬取某图网站高质量小姐姐付费照片


大家好,今天我们一起来看看那么多高质量的漂亮小姐姐吧。

简直了

自从上次爬取了虎牙1000多位小姐姐照片《》之后,有粉丝反馈说 虎牙这些小姐姐照片都太俗气了,建议去爬爬 图虫网美女标签(https://tuchong.com/tags/%E7%BE%8E%E5%A5%B3)上的高质量小姐姐照片。

我打开网页找到某个封面图点进去查看组图,直接点击下载按钮提示“该照片有版权限制不可下载”,所以咱们还是别去下载了吧。

有版权不可下载

鉴于以上情况,这里咱们重点强调声明:本文仅限于做技术交流学习,请勿用作任何非法商用!

图虫创意是北京字节跳动科技有限公司所创立的正版照片及视频素材平台 ,致力于为用户提供正版素材内容及数字资产管理解决方案。

0.先看一波美照吧

很正经的图

接下来,我们按照上次在《》介绍的爬虫流程来展开介绍这次爬虫实战哈。

1.网页分析

打开目标网页(https://tuchong.com/tags/%E7%BE%8E%E5%A5%B3),发现下拉会加载更多但是网页地址栏的url没有变化。因此,我们断定这是一个动态网页,于是有了以下步骤:

  1. 需要按“F12”进入到浏览器的开发者模式;
  2. 点击“Network”—>XHR或JS或者你全部查找看;
  3. 进行翻页(可能是点击下一页或者下滑加载更多或者直接F5刷新页面);
  4. 观察第2步中name模块的内容变化,寻找。

很好,我们找到了照片组图信息所在,如下图所示,在请求的结果中的postList里是单页全部照片组信息列表,列表的每个元素中的imges里是该组照片信息列表。通过这些字段大致能理解照片img_id归属于某个作者user_idauthor_id

记住这组照片信息:

# 照片id
img_id = 360962642
# 照片归属作者id
author_id = 5489136

组图照片信息

我们点开Headers模块,可以看到真实请求地址基础URL和请求参数如下:

# 基础URL
url='https://tuchong.com/rest/tags/%E7%BE%8E%E5%A5%B3/posts'
# 请求参数
parames ={
    'page': 1, # 随着翻页而递增变化
    'count': 20,
    'order': 'weekly',
    'before_timestamp': ''
    }

真实URL地址及参数

到这里没完,单纯知道了请求这些组图信息列表的地址,但是每个组图里照片的地址暂时还无法得知。于是我们点开某个组图进行进一步查看,在组图的详情页里,F12->Elements 查看照片元素信息,发现结果如下:

组图详情页

在网页HTML源代码里,我们找到了照片的地址为https://photo.tuchong.com/5489136/f/360962642.jpg

结合之前我们记住的照片信息如下,我们便可以拼接出目标照片的地址了。

# 照片id
img_id = 360962642
# 照片归属作者id
author_id = 5489136

# 照片地址
img_url = f'https://photo.tuchong.com/{author_id}/f/{img_id}.jpg'

在浏览器输入这个照片地址,我们发现果然就是我们需要的:

目标照片

2.请求数据

这一步就比较简单了,直接引入requests库,然后get请求即可。

import requests
# 基础URL地址
url = 'https://tuchong.com/rest/tags/%E7%BE%8E%E5%A5%B3/posts'
# 请求参数
parames ={
    'page': 1,
    'count': 20,
    'order': 'weekly',
    'before_timestamp': ''
    }

r = requests.get(url, params=parames)
# 前面网页分析结果是请求结果为json格式数据
j = r.json()

3.解析数据

我们查看请求结果中的json数据结构,可以很快找到目标照片的url地址参数:

json数据结构

我们以获取单个照片url地址为例展示:

# 获取postList列表
postList = j['postList']
# 选取某一个为例
post = postList[3]
# 作者id
author_id = post['author_id']
# 组图列表
images = post['images']
# 以第一张图为例
image = images[0]
# 照片id
img_id = image['img_id']
# 照片地址
img_url = f'https://photo.tuchong.com/{author_id}/f/{img_id}.jpg'
# 请求照片数据(图片内容存储在请求结果的content中二进制格式)
r_img = requests.get(img_url)
img = r_img.content

4.存储数据

由于本篇抓取的是照片这类二进制文件,因此存储方式可以选择创建一个文件,然后写入请求的二进制文件内容即可。

# 以作者id和图片id组合而成图片名称
name = f'{author_id}-{img_id}.jpg'
with open(name,'wb') as f:
    f.write(img)

5.完整代码

毕竟图虫网提供高质量的图片,而且都是版权所有的,咱们也就只是用于学习演示不要太过分,爬取10页数据。

代码比较简单不够优雅,没有做模块化处理,大家可以自行优化哈~

import requests
import time

url = 'https://tuchong.com/rest/tags/%E7%BE%8E%E5%A5%B3/posts'

# 翻页
num = 10
total = 0
for page in range(1,num+1):
    time.sleep(5)    
    parames ={
        'page': page,
        'count': 20,
        'order': 'weekly',
        'before_timestamp': ''
        }
    
    r = requests.get(url, params=parames)
    j = r.json()
    # 组图列表
    postList = j['postList']
    # 遍历组图
    for post in postList:
        # 作者id
        author_id = post['author_id']        
        # 组图照片列表
        images = post['images']
        # 遍历组图照片列表图片并下载
        for image in images:
            total = total+1
            img_id = image['img_id']
            img_url = f'https://photo.tuchong.com/{author_id}/f/{img_id}.jpg'     
            r_img = requests.get(img_url)
            img = r_img.content
            name = f'{author_id}-{img_id}.jpg'
            # 写入本地
            with open(name,'wb') as f:
                f.write(img)

            print(f'{page}页 共 {total}张 照片已经下载')

批量下载
在这里插入图片描述

  • 7
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,下面是一个简单的 Python 爬虫教程,可以批量爬取指定网站图片: 首先,我们需要安装 requests 和 BeautifulSoup 这两个库。可以通过以下命令进行安装: ``` pip install requests pip install beautifulsoup4 ``` 接下来,我们需要编写代码。以下是一个示例代码,可以爬取指定网站图片并保存到本地: ```python import requests from bs4 import BeautifulSoup import os # 爬取图片网站 url = "https://www.example.com/" # 请求头,模拟浏览器访问 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"} # 发送请求,获取网页内容 response = requests.get(url, headers=headers) soup = BeautifulSoup(response.text, "html.parser") # 创建保存图片的文件夹 if not os.path.exists("images"): os.makedirs("images") # 遍历所有的图片标签,获取图片链接并保存到本地 for img in soup.find_all("img"): img_url = img.get("src") if img_url.startswith("http"): response = requests.get(img_url) with open("images/" + os.path.basename(img_url), "wb") as file: file.write(response.content) print("已保存图片:", img_url) ``` 在上述代码中,我们首先定义了要爬取网站的 URL。然后,我们使用 requests 库发送一个 GET 请求,获取网页的 HTML 内容。接着,我们使用 BeautifulSoup 库对 HTML 进行解析,获取所有的图片标签。最后,我们使用 requests 库再次发送 GET 请求,获取图片的二进制数据,并保存到本地的 images 文件夹中。 注意,这里我们使用了一个 if 判断来过滤掉非 HTTP 开头的图片链接,以避免出现下载错误的情况。 为了更好的用户体验,代码中还加入了一些注释,方便大家理解。 希望这个简单的 Python 爬虫教程能对你有所帮助!
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值