利用python爬取本站的所有博客链接

目录

前因

首先的尝试

解决办法

导入包

定义一个json配置文件

打开浏览器执行操作

注意

提取源代码并且进行筛选链接

执行结果


前因

由于自己要把csdn的博客同步到hugo中,把博客转为md格式已经搞好了,但是由于csdn的图片具有防盗链,所以打算把所有的图片爬取下来,然后保存在本地

刚好本人略懂一些python,所以自己先写了一个脚本用来爬取各个博客的链接,如果不想听我多bb的直接去我的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包进行爬取。

但是由于csdn的博客是不显示全部,滑动底部时更新一部分

request包可能做不了这么复杂的工作QAQ

好像https://blog.csdn.net/你的名字/article/list/链接可以用request包进行爬取

解决办法

那么恰好我有学过一点点的selenium包,所以搞了一个自动化的形式通过模拟鼠标滑动到文章的底部来获取到所有的文章链接

导入包

各个包都有解释用途

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   #从源代码中提取文章的链接

定义一个json配置文件

定义一个json配置文件方便管理

现在文件只有用户名称,后续可加配置

{"blog_id": "mumuemhaha"
}

读取用户名称,并且将其拼接成csdn个人博客链接

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)}(看看是不是全爬下来了)")

 全部代码为

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   #从源代码中提取文章的链接
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_source
re_1='<a data-v-6fe2b6a7="" href="(.*?)"'
blog_urls=re.findall(re_1,req_1)
print(f"文章个数为{len(blog_urls)}(看看是不是全爬下来了)")

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

通过一篇文章让你了解数据结构和算法的重要性

通过一篇文章让你了解数据结构和算法的重要性 前言一、 什么是数据结构&#xff1f;二、什么是算法&#xff1f;三、数据结构和算法的重要性在校园招聘的笔试中&#xff1a;在校园招聘的面试中&#xff1a;在未来的工作中&#xff1a; 四、如何学好数据结构和算法4.1 死磕代码&…

swift 长按桌面图标弹出快捷选项

文章目录 一、3D Touch二、主屏交互1. 静态添加2. 动态添加三、监听主屏交互按钮的点击事件四、预览和跳转1. 注册3D touch2. 实现协议3. 在目标控制器复写previewActionItems4. 使用UIContextMenuConfiguration一、3D Touch 3D Touch通过屏幕下方的压力感应器来感知不同的压力…

【学习记录】Resnet

Resnet的残差块 BasicBlock模块&#xff1a; Resnet的作用 解决梯度消失。网络越深&#xff0c;会导致梯度消失。Resnet可以解决梯度消失的问题。 Resnet的原理 参考视频&#xff1a;https://www.bilibili.com/video/BV1cM4y117ob/?spm_id_from333.337.search-card.all.cl…

虚拟机部署Sentry步骤,国内地址

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分…

vue3中实现elementPlus表格选中行的上移下移

先看效果&#xff1a; 实现步骤&#xff1a; 1、给el-table添加current-change事件、高亮属性及ref属性 2、给上移下移按钮添加事件 // 定义当前选中的行参数 const currentRow ref<any>(null); // 定义表格的ref const singleTableRef ref(); // 行选中事件 const ha…

AI智能分析网关V4智慧环保/智慧垃圾站视频智能分析与监控方案

一、背景介绍 随着城市化进程的加速&#xff0c;垃圾处理问题日益受到人们的关注&#xff0c;传统的垃圾站管理方式已经无法满足现代社会的需求。针对当前垃圾站的监管需求&#xff0c;TSINGSEE青犀可基于旗下视频智能检测AI智能分析网关V4与安防监控视频综合管理系统EasyCVR平…

Python+neo4j构建豆瓣电影知识图谱

文章目录 数据来源数据整理导入节点和关系导入使用Subgraph批量导入节点和关系 多标签实体和实体去重 数据来源 http://www.openkg.cn/dataset/douban-movie-kg 该网址拥有丰富的中文知识图谱数据集&#xff0c;OpenKG(Open Knowledge Graph)&#xff0c;可供研究人员使用研究…

服务器权限:Error: EACCES: permission denied, open‘/Cardiac/uniquC.csv

背景&#xff1a; 我想在服务器上传一个文件uniquC.csv&#xff0c;但是服务器说我没有权限 解决方案&#xff1a; 1. 查看目前是否存在对文件夹的权限 ls -ld /Cardiac/ # your fold path 此时&#xff0c;我发现 这也意味着root也没有赋予写的权限。 2. 拿到root权限 …

C语言可以干些什么?C语言主要涉及哪些IT领域?

C语言可以干些什么&#xff1f;C语言主要涉及哪些IT领域&#xff1f; 在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「C语言的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家…

肿瘤相关巨噬细胞TAM综述及研究学习②

​​​​​​​肿瘤浸润性巨噬细胞的复杂作用&#xff08;综述浏览&#xff09;-CSDN博客 TAM 支持癌细胞的生长和转移&#xff0c;并对 TME 的适应性免疫细胞产生免疫抑制作用。&#xff08;上一篇学习文献&#xff09; 目录 综述① TAM在肿瘤中的作用 M1与 M2 TAM作用 …

IIS发布PHP网站字体404解决办法

最近在使用 IIS 发布 PHP 网站时&#xff0c;我遇到了一个前端问题&#xff0c;即字体库文件 404 错误。这个问题的根本原因是 IIS 未能正确识别字体文件类型&#xff0c;导致浏览器在加载页面时无法正确获取所需字体资源&#xff0c;进而触发了404错误。这样的问题会导致网站页…

力扣138.随机链表的复制

给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &#xff0c;该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成&#xff0c;其中每个新节点的值都设为其对应的原节点的值。新节点的 n…

【笔记】:更方便的将一个List中的数据传入另一个List中,避免多重循环

这里是 simpleInfoList 集合&#xff0c;记为集合A&#xff08;传值对象&#xff09; List<CourseSimpleInfoDTO> simpleInfoList courseClient.getSimpleInfoList(courseIds);if(simpleInfoListnull){throw new BizIllegalException("当前课程不存在!");}这…

【嵌入式——QT】日期与定时器

日期 QTime&#xff1a;时间数据类型&#xff0c;仅表示时间&#xff0c;如 16:16:16&#xff1b;QDate&#xff1a;日期数据类型&#xff0c;仅表示日期&#xff0c;如2024-1-22&#xff1b;QDateTime&#xff1a;日期时间数据类型&#xff0c;表示日期和时间&#xff0c;如2…

shell自定义日志输出函数log

Background 在编写比较复杂的脚本时&#xff0c;需要输出相关日志信息&#xff0c;方便知悉脚本的执行情况以及问题的排查。 源码 log.sh # 自定义日志函数 function log(){if [[ $1 "i" || $1 "info" ]]; thenecho -ne "\033[1;34mINFO: \033[0m&…

H3C防火墙安全授权导入

一、防火墙授权概述 前面我们已经了解了一些防火墙的基本概念&#xff0c;有讲过防火墙除了一些基本功能&#xff0c;还有一些高级安全防护&#xff0c;但是这些功能需要另外独立授权&#xff0c;不影响基本使用。这里以H3C防火墙为例进行大概了解下。 正常情况下&#xff0c;防…

react路由基础

1.目录 A. 能够说出React路由的作用 B. 能够掌握react-router-dom的基本使用 C. 能够使用编程式导航跳转路由 D. 能够知道React路由的匹配模式 2.目录 A. React路由介绍 B. 路由的基本使用 C. 路由的执行过程 D. 编程式导航 E. 默认路由 F. 匹配模式 3.react路由介绍 现代…

在实训云平台上配置云主机

文章目录 零、学习目标一、实训云升级二、实训云登录&#xff08;一&#xff09;登录实训云&#xff08;二&#xff09;切换界面语言&#xff08;三&#xff09;规划云主机实例 三、创建网络三、创建路由器2024-2-29更新到此四、添加接口五、创建端口六、添加安全组规则七、创建…

[设计模式Java实现附plantuml源码~行为型]算法的封装与切换——策略模式

前言&#xff1a; 为什么之前写过Golang 版的设计模式&#xff0c;还在重新写Java 版&#xff1f; 答&#xff1a;因为对于我而言&#xff0c;当然也希望对正在学习的大伙有帮助。Java作为一门纯面向对象的语言&#xff0c;更适合用于学习设计模式。 为什么类图要附上uml 因为很…

中国社会科学院大学与美国杜兰大学金融管理硕士项目——跨越国际的智慧碰撞

在当今经济高度全球化的时代背景下&#xff0c;跨国合作和交流变得日益重要。为了满足全球化时代对金融行业高素质人才的需求&#xff0c;中国社会科学院与美杜兰大学联合推出了金融管理硕士项目&#xff0c;旨为学生们提供一个跨越国际的智慧碰撞的学习机会。 今年是你工作的第…