当前位置: 首页 > news >正文

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

目录

前言

思想

注意

不多说解释了,贴代码吧

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("网站滑倒底了,跳出循环...")breakreq_1 = driver.page_sourcere_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)

运行结果

可以看到,爬取下来了 

相关文章:

  • C#高级:DataGridView的详解
  • 练习2-线性回归迭代(李沐函数简要解析)
  • 命令行启动mongodb服务器的问题及解决方案 -- Unrecognized option: storage.journal
  • springboot 实现本地文件存储
  • SD NAND:为车载显示器注入智能与安全的心脏
  • selenium测试工具用来模拟用户浏览器的操作
  • MySQL常见面试题总结
  • Node.js基础---Express中间件
  • 利用 lxml 库的XPath()方法在网页中快速查找元素
  • kvm虚拟机修改网络模式
  • MySQL进阶之(三)InnoDB数据存储结构之数据页结构
  • SpringBoot源码解读与原理分析(三十八)SpringBoot整合WebFlux(一)WebFlux的自动装配
  • 利用FFMPEG 将RTSP流的音频G711 转码为AAC 并 推流到RTMP
  • Git源码管理
  • docker 基础(二)
  • 分享一款快速APP功能测试工具
  • 【EOS】Cleos基础
  • Android 控件背景颜色处理
  • CEF与代理
  • Computed property XXX was assigned to but it has no setter
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • gcc介绍及安装
  • HTTP请求重发
  • Idea+maven+scala构建包并在spark on yarn 运行
  • Javascripit类型转换比较那点事儿,双等号(==)
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • Selenium实战教程系列(二)---元素定位
  • Sequelize 中文文档 v4 - Getting started - 入门
  • 包装类对象
  • 聊聊flink的TableFactory
  • 前端自动化解决方案
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 我这样减少了26.5M Java内存!
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • ![CDATA[ ]] 是什么东东
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (五)关系数据库标准语言SQL
  • (转) 深度模型优化性能 调参
  • .net 设置默认首页
  • .NET设计模式(11):组合模式(Composite Pattern)
  • @ComponentScan比较
  • [Android View] 可绘制形状 (Shape Xml)
  • [Ariticle] 厚黑之道 一 小狐狸听故事
  • [bzoj1324]Exca王者之剑_最小割
  • [BZOJ4566][HAOI2016]找相同字符(SAM)
  • [ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-controller-manager失败
  • [HCIE] IPSec-VPN (手工模式)
  • [js] 正则表达式
  • [Linux]进程创建➕进程终止
  • [na]wac无线控制器集中转发部署的几种情况
  • [python]python os模块 常用命令
  • [Rust学习:二]变量和传参