爬取博客的图片并且将它存储到响应的目录

news2024/11/15 10:53:44

目录

前言

思想

注意

不多说解释了,贴代码吧

config.json

Get_blog_img.py

把之前的写的代码也贴上

Get_blog_id.py

主函数

main.py

运行结果


前言

在上一篇博客中我们介绍了如何爬取博客链接

利用python爬取本站的所有博客链接-CSDN博客文章浏览阅读740次,点赞5次,收藏16次。定义一个json配置文件方便管理现在文件只有用户名称,后续可加配置读取用户名称,并且将其拼接成csdn个人博客链接type=blog"https://blog.csdn.net/mumuemhaha/article/details/136375650在这一篇博客中我们介绍如何爬取博客中文章的图片

github同步更新

GitHub - mumuhaha487/Get_csdnContribute to mumuhaha487/Get_csdn development by creating an account on GitHub.icon-default.png?t=N7T8https://github.com/mumuhaha487/Get_csdn

思想

首先同样利用request库进行爬取源代码然后利用正则表达式来筛选信息

需要注意的是分别把链接

https://img-blog.csdnimg.cn/xxx/xxx.png

和/xxx/xxx.png存储起来

前者用于爬取链接,后者用于区分存储在本地的路径

之前想利用re库来判断“/”符号进而提取文件目录,但是后面发现python有现成的库用来提取路径和文件名

利用

os.path.split

函数即可

注意

多余的不多说明了部分博客游客看不了,注意配置cookie(最好配置自己的cookie)

在config.json中即可

不多说解释了,贴代码吧

config.json

{
  "blog_id": "mumuemhaha",
  "cookie" : "your_cookie",
  "img_path": "img"
}

注意配置cookie,爬取下来的文件保存在img目录中

Get_blog_img.py

import requests
import json
import re
import os
def Get_blog_img(url_1):
    with open("./config.json", 'r') as file_1:
        data_1 = json.load(file_1)

    cookie_1=data_1["cookie"]
    img_1=data_1["img_path"]
    head_1={
        "User-Agent" :"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36",
        "Cookie" : cookie_1
    }
    req_1=requests.get(url=url_1,headers=head_1)
    re_1='src="(https://img-blog.csdnimg.cn.*?.png)"'
    re_2='src="https://img-blog.csdnimg.cn/(.*?.png)"'
    img_ids=re.findall(re_2,req_1.text)
    img_urls=re.findall(re_1,req_1.text)
    for i in range(len(img_ids)):
        dir_name,file_name=os.path.split(img_ids[i])
        if dir_name:
            os.makedirs(f"{img_1}/{dir_name}",exist_ok=True)
        img_response=requests.get(url=img_urls[i],headers=head_1)
        if dir_name:
            with open(f'{img_1}/{dir_name}/{file_name}', 'wb') as f:
                f.write(img_response.content)
        else:
            with open(f'{img_1}/{file_name}', 'wb') as f:
                f.write(img_response.content)

把之前的写的代码也贴上

Get_blog_id.py

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains  # 用于自动化框架执行动作
import time  # 延时操作,方便网站加载完全
import json  # 用于读取配置信息
import re  # 从源代码中提取文章的链接
def Get_blog_id():
    with open("./config.json", 'r') as file_1:
        data_1 = json.load(file_1)

    blog_id = data_1["blog_id"]
    url_1 = f"https://blog.csdn.net/{blog_id}?type=blog"
    driver = webdriver.Chrome()
    driver.get(url_1)
    for i in range(10000):
        time.sleep(0.5)
        actions = ActionChains(driver)
        actions.send_keys(Keys.PAGE_DOWN)  # 可以多次发送 PAGE_DOWN 来实现滚动的距离
        actions.perform()
        if i % 10 == 0:  # 每滑动 10 次进行判断
            prev_page_source = driver.page_source  # 获取前一次滑动后的页面源码
            time.sleep(2)  # 等待页面加载
            current_page_source = driver.page_source  # 获取当前页面源码

            if prev_page_source == current_page_source:
                print("网站滑倒底了,跳出循环...")
                break

    req_1 = driver.page_source
    re_1 = '<a data-v-6fe2b6a7="" href="(.*?)"'
    blog_urls = re.findall(re_1, req_1)
    print(f"文章个数为{len(blog_urls)}(看看是不是全爬下来了)")
    return blog_urls

主函数

main.py

import Get_blog_img
import Get_blog_id
blog_urls=Get_blog_id.Get_blog_id()
for blog_url in blog_urls:
    Get_blog_img.Get_blog_img(blog_url)

运行结果

可以看到,爬取下来了 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1483477.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CSS转换(2D)transform属性及animation动画

1、倾斜效果&#xff0c;旋转效果 <style type"text/css"> .transrorm_bar{ padding:150px; display: flex; align-items: center;} .transrorm_bar div{ width: 120px; height: 120px; background-color: #eee; margin: 10px; display: flex; align-items: c…

爬虫入门到精通_实战篇8(分析Ajax请求并抓取今日头条美食美图)_界面上抓取Ajax方式

1 目标 目标&#xff1a; 抓取今日头条美食美图&#xff0c;如下&#xff1a; 一些网页直接请求得到的HTML代码并没有在网页中看到的内容&#xff0c;因为一些信息是通过Ajax加载&#xff0c;并通过js渲染生成的&#xff0c;这时就需要通过分析网页的请求来获取想要爬取的内容…

关于高德地图及其APP获取地图数据的研究

刚过完春节没几天&#xff0c;有个客户提出要获取高德地图的数据。 我看了下&#xff0c;回复说&#xff1a;这不是很简单嘛&#xff0c;高德有公开的开放平台&#xff0c;有足够的API支持用户获取数据&#xff0c;开发自己基于高德数据库的应用。 客户回复说&#xff1a;他的要…

【前端素材】推荐优质现代医院办公后台管理系统网页XRay平台模板(附源码)

一、需求分析 在线后台管理系统是指供管理员或运营人员使用的Web应用程序&#xff0c;用于管理和监控网站、应用程序或系统的运行和数据。它通常包括一系列工具和功能&#xff0c;用于管理用户、内容、权限、数据等。下面是关于在线后台管理系统的详细分析&#xff1a; 1、功…

【JavaSE】实用类——String、日期等

目录 String类常用方法String类的equals()方法String中equals()源码展示 “”和equals()有什么区别呢&#xff1f; StringBuffer类常用构造方法常用方法代码示例 面试题&#xff1a;String类、StringBuffer类和StringBuilder类的区别&#xff1f;日期类Date类Calendar类代码示例…

边缘计算与任务卸载基础知识

目录 边缘计算简介任务卸载简介参考文献 边缘计算简介 边缘计算是指利用靠近数据生成的网络边缘侧的设备&#xff08;如移动设备、基站、边缘服务器、边缘云等&#xff09;的计算能力和存储能力&#xff0c;使得数据和任务能够就近得到处理和执行。 一个典型的边缘计算系统为…

用GGUF和Llama.cpp量化Llama模型

用GGUF和Llama .cpp量化Llama模型 什么是GGML如何用GGML量化llm使用GGML进行量化NF4 vs. GGML vs. GPTQ结论 由于大型语言模型&#xff08;LLMS&#xff09;的庞大规模&#xff0c;量化已成为有效运行它们的必要技术。通过降低其权重的精度&#xff0c;您可以节省内存并加快推理…

uniapp npx update-browserslist-db@lates 问题解决

在uniapp运行项目时&#xff0c;会有这种报错&#xff0c;其实这是表明browserslistlatest版本低了&#xff0c;在催你升级版本&#xff0c;browserslistlatest是用来支持解析css用的&#xff0c;当然&#xff0c;你也可以直接忽略这个报错提示&#xff0c;也可以正常运行项目。…

【Git教程】(四)版本库 —— 存储系统,存储目录,提交对象及其命名、移动与复制~

Git教程 版本库 1️⃣ 一种简单而高效的存储系统2️⃣ 存储目录&#xff1a;Blob 与 Tree3️⃣ 相同数据只存储一次4️⃣ 压缩相似内容5️⃣ 不同文件的散列值相同6️⃣ 提交对象7️⃣ 提交历史中的对象重用8️⃣ 重命名、移动与复制&#x1f33e; 总结 事实上&#xff0c;我们…

带你玩转java封装和继承(上)

上次带大家学习了java里面比较重要的知识点类和对象&#xff0c;而且我们知道java是一门面向对象的语言&#xff0c;有时一个程序里可能有很多类&#xff0c;那么这么多类他们之间有什么联系吗&#xff1f;今天就带大家学习一下java类之间的关系。 什么是继承&#xff1a; 我们…

摄像机LookDirection参数对模型缩放灵敏度的影响

继续整上回的wpf 3d obj模型程序&#xff1b; 它用HelixToolKit加载了以后&#xff0c;默认可以用鼠标操作模型&#xff0c;中键缩放模型&#xff1b; 有的时候中键稍微滚动几下模型就不见了&#xff1b; 用不同的模型试了一下&#xff1b;中键缩放的灵敏度&#xff0c;就是…

FreeRTOS学习笔记-基于STM32(1)基础知识

一、裸机与RTOS 我们使用的32板子是裸机&#xff0c;又称前后台系统。裸机有如下缺点&#xff1a; 1、实时性差。只能一步一步执行任务&#xff0c;比如在一个while循环中&#xff0c;要想执行上一个任务&#xff0c;就必须把下面的任务执行完&#xff0c;循环一遍后才能执行…

BUGKU bp

打开环境&#xff0c;他提示了弱密码top1000&#xff0c;随便输入密码123抓包爆破 发现长度都一样&#xff0c;看一下响应发现一段js代码&#xff0c;若r值为{code: bugku10000}&#xff0c;则会返回错误&#xff0c;通过这一句“window.location.href success.php?coder.cod…

StarRocks——Stream Load 事务接口实现原理

目录 前言 一、StarRocks 数据导入 二、StarRocks 事务写入原理 三、InLong 实时写入StarRocks原理 3.1 InLong概述 3.2 基本原理 3.3 详细流程 3.3.1 任务写入数据 3.3.2 任务保存检查点 3.3.3 任务如何确认保存点成功 3.3.4 任务如何初始化 3.4 Exactly Once 保证…

【MATLAB】 ICEEMDAN信号分解+FFT傅里叶频谱变换组合算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~ 展示出图效果 1 ICEEMDAN信号分解算法 ICEEMDAN 分解又叫改进的自适应噪声完备集合经验模态分解&#xff0c;英文全称为 Improved Complete Ensemble Empirical Mode Decomposition with Adaptive Noise。 ICEEMDAN (I…

【书生·浦语大模型实战营】第 2 节 -课后作业

第二节 -轻松玩转书生浦语大模型趣味 Demo-课后作业 0.课程体验0.1 鸡兔同笼0.2 逻辑推理0.3 AI会毁灭人类吗&#xff1f; 1.课后作业1.1 基础作业1.1.1 作业11.1.2 作业2 0.课程体验 课程链接&#xff1a;https://github.com/internLM/tutorial 首先&#xff0c;这个课程是免费…

《Spring Security 简易速速上手小册》第7章 REST API 与微服务安全(2024 最新版)

文章目录 7.1 保护 REST API7.1.1 基础知识详解7.1.2 重点案例&#xff1a;使用 JWT 进行身份验证和授权案例 Demo 7.1.3 拓展案例 1&#xff1a;API 密钥认证案例 Demo测试API密钥认证 7.1.4 拓展案例 2&#xff1a;使用 OAuth2 保护 API案例 Demo测试 OAuth2 保护的 API 7.2 …

vue 之 Quill编辑器封装

安装 npm install vue-quill-editor --save <template><div><el-upload:action"uploadUrl":before-upload"handleBeforeUpload":on-success"handleUploadSuccess":on-error"handleUploadError"name"file":sh…

家政行业的数字转型:开发智能化家政预约APP的挑战与机遇

为了适应这一变化&#xff0c;许多家政企业开始积极探索数字化转型&#xff0c;其中包括开发智能化预约APP。本文将探讨开发智能化预约APP所面临的挑战与机遇。 ​一、挑战&#xff1a; 1.用户体验设计&#xff1a; -开发智能化预约APP需要注重用户体验设计&#xff0c;包括…

Pytest插件pytest-selenium-让自动化测试更简洁

在现代Web应用的开发中&#xff0c;自动化测试成为确保网站质量的重要手段之一。而Pytest插件 pytest-selenium 则为开发者提供了简单而强大的工具&#xff0c;以便于使用Python进行Web应用的自动化测试。本文将深入介绍 pytest-selenium 插件的基本用法和实际案例&#xff0c;…