Python爬虫-爬取B站番剧封面

本文是本人最近学习Python爬虫所做的小练习。如有侵权,请联系删除

页面获取url

代码

python 复制代码
import requests
import os
import re

# 创建文件夹
path = os.getcwd() + '/images'
if not os.path.exists(path):
    os.mkdir(path)

# 当前页数
page = 1
# 总页数
total_page = 2

# 自动翻页,获取全部数据
def get_data():
    global page, total_page
    while page <= total_page:
        # 地址
        url = f"https://api.bilibili.com/pgc/season/index/result?st=1&order=3&season_version=-1&spoken_language_type=-1&area=-1&is_finish=-1&copyright=-1&season_status=-1&season_month=-1&year=-1&style_id=-1&sort=0&page={page}&season_type=1&pagesize=20&type=1"
        # 请求头
        headers = {
            'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 SLBrowser/9.0.3.1311 SLBChan/105',
        }
        # 发送请求
        response = requests.get(url, headers=headers)
        # json数据格式
        items = response.json()
        # 循环遍历
        for data in items['data']['list']:
            # 标题
            title = data.get('title')
            # 封面
            cover = data.get('cover')
            # 下载图片到images文件夹中,文件名:title
            if title != '' and cover != '':
                download_image(title, cover)

        total = items.get('data')['total']
        size = items.get('data')['size']
        total_page = get_page_count(total, size)
        page += 1

# 下载图片
def download_image(title, cover):
    # 请求头
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 SLBrowser/9.0.3.1311 SLBChan/105',
    }
    res = requests.get(cover, headers=headers)

    # 判断标题是否含有\/:*?"<>|,文件命名不能含有这些,如果有,则用下划线_取代
    new_title = validateTitle(title)
    with open(path + '/' + new_title + '.jpg', mode='wb') as f:
        # 图片内容写入文件
        f.write(res.content)
        print(f"正在下载图片,图片名:{title}.jpg")

# 去除文件中的非法字符(正则表达式)
def validateTitle(title):
    pattern = r"[\\\/\:\*\?\"\<\>\|]"
    new_title = re.sub(pattern, '_', title)
    return new_title

# 求页数
def get_page_count(total, page):
    page_count = total // page
    if total % page != 0:
        page_count += 1
    return page_count

if __name__ == '__main__':
    get_data()

效果

相关推荐
KevinRay_13 分钟前
Python超能力:高级技巧让你的代码飞起来
网络·人工智能·python·lambda表达式·列表推导式·python高级技巧
Captain823Jack44 分钟前
nlp新词发现——浅析 TF·IDF
人工智能·python·深度学习·神经网络·算法·自然语言处理
资源补给站1 小时前
大恒相机开发(2)—Python软触发调用采集图像
开发语言·python·数码相机
Captain823Jack1 小时前
w04_nlp大模型训练·中文分词
人工智能·python·深度学习·神经网络·算法·自然语言处理·中文分词
PieroPc2 小时前
Python 自动化 打开网站 填表登陆 例子
运维·python·自动化
VinciYan2 小时前
基于Jenkins+Docker的自动化部署实践——整合Git与Python脚本实现远程部署
python·ubuntu·docker·自动化·jenkins·.net·运维开发
测试老哥3 小时前
外包干了两年,技术退步明显。。。。
自动化测试·软件测试·python·功能测试·测试工具·面试·职场和发展
終不似少年遊*3 小时前
美国加州房价数据分析01
人工智能·python·机器学习·数据挖掘·数据分析·回归算法
如若1233 小时前
对文件内的文件名生成目录,方便查阅
java·前端·python
西猫雷婶4 小时前
python学opencv|读取图像(二十一)使用cv2.circle()绘制圆形进阶
开发语言·python·opencv