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

目录

前因

首先的尝试

解决办法

导入包

定义一个json配置文件

打开浏览器执行操作

注意

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

执行结果


前因

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

刚好本人略懂一些python,所以自己先写了一个脚本用来爬取各个博客的链接,如果不想听我多bb的直接去我的github看源码

GitHub - mumuhaha487/Get_csdnContribute to mumuhaha487/Get_csdn development by creating an account on GitHub.https://github.com/mumuhaha487/Get_csdn

首先的尝试

首先的尝试就是利用简单好用的request包进行爬取。

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

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

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

解决办法

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

导入包

各个包都有解释用途

python 复制代码
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配置文件方便管理

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

bash 复制代码
{
  "blog_id": "mumuemhaha"
}

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

python 复制代码
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"

打开浏览器执行操作

注意

这里由于不知道要下滑多少次,所以可以设定一个很大的数字然后每滑动十次判断源代码是否更新,然后源代码没有变化则跳出循环即可(

python 复制代码
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

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

python 复制代码
req_1=driver.page_source
re_1='<a data-v-6fe2b6a7="" href="(.*?)"'
blog_urls=re.findall(re_1,req_1)

执行结果

我加了一个打印链接个数的代码来判断是否全部爬取下来了

python 复制代码
print(f"文章个数为{len(blog_urls)}(看看是不是全爬下来了)")

全部代码为

python 复制代码
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("网站滑倒底了,跳出循环...")
            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)}(看看是不是全爬下来了)")
相关推荐
weixin_307779132 小时前
C++代码实现MATLAB中的dlarray函数功能
开发语言·c++·算法·matlab
一水鉴天5 小时前
映射、哈希表与哈斯图:计算机科学的三种基线 20261003(元宝)
开发语言·人工智能
Frank_refuel5 小时前
C++11之一场名为“搬家”的 C++ 之旅
开发语言·c++
海绵宝宝转agent5 小时前
learn-claude-code第1-5章开源学习笔记分享
人工智能·笔记·python·学习
小奇不哭5 小时前
ROS2 单节点,RGB-D 深度相机局部路径提取 + B 样条平滑路径 + YOLOv8 障碍物检测 + 深度测距,用于移动机器人视觉局部循迹。
python·yolov8·ros2·cv2·路径探索循迹
小小龙学IT5 小时前
Python scikit-learn 机器学习库深度解析
python·机器学习·scikit-learn
Wang's Blog6 小时前
Java 项目实战: 外卖平台优化-Nginx配置文件结构与块层级
java·开发语言·nginx
2601_962071576 小时前
类变量和全局变量的查找路径有什么区别?
开发语言·python
卷无止境7 小时前
独立开发者的"富矿地带":哪些垂直领域值得你押注一辈子?
后端·python
\光辉岁月/7 小时前
5.java-数组
java·开发语言