利用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)}(看看是不是全爬下来了)")
相关推荐
爱吃苹果的梨叔2 小时前
训练集群网络中断怎么办?智算机房的 Console 串口排障方案
网络·python·智能路由器·php
李妍.5 小时前
02Numpy基础(上)
开发语言·python
TheBestRucy5 小时前
Python 九阳神功之贰:面向对象(下)
开发语言·python
2601_965958465 小时前
口腔黏膜脱皮超2周未愈建议及时就医
人工智能·python
AI_小站6 小时前
刚面完百度的 Agent 开发岗,我才发现:世界就是个巨大的草台班子
java·开发语言·人工智能·spring·百度·langchain
微小冷6 小时前
在不同空间中展示数据(欧式、球面、庞加莱圆盘)
python·双曲空间·微分几何·geomstats·庞加莱圆盘·球面
felixking6 小时前
C++20 协程
开发语言·c++·协程
weixin_431600447 小时前
Agent Workflow 学习向:Code 节点,比模板更强的变量加工
后端·python·学习·ai·
讲温控就好了7 小时前
从医疗影像到能源存储——芯片冷却温控技术的跨行业赋能
人工智能·python·能源
DeepVisionary7 小时前
从 Qwen3.8-27B 把原生多模态、原生 FP8、桌面级 Agent 三件事一次集齐,看开源大模型的“工业化拐点“
python·自动化