利用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)}(看看是不是全爬下来了)")
相关推荐
BK贝壳5 小时前
亿级用户签到位图选型复盘:用 bool-hybrid-array 扛冷启动打卡,也把它和 Roaring/Redis 的边界测清楚了
数据结构·python·性能优化·numpy
2601_966949657 小时前
如何根据研究的起止时间截取分钟级行情?Python 实战与 QuantDash 数据处理指南
开发语言·python·pandas·量化交易·1024程序员节·股票数据·quantdash
晨曦中的暮雨9 小时前
限流算法——固定窗口、滑动窗口、漏桶、令牌桶
java·开发语言·算法
喵了几个咪9 小时前
GoWind CMS 拆解:在 Go 里给 TipTap 搭一套 Yjs 协同后端
开发语言·后端·golang
程序员清风10 小时前
数据处理脚本工程化:日志、配置、命令行与测试
服务器·开发语言·数据库
在世修行11 小时前
智学文枢:页面切换与跨页数据预填
python·桌面应用·signal·1024程序员节·pyside·跨页跳转·状态预填
2601_9628857211 小时前
如何用 Python 把 K 线重采样成任意周期?
开发语言·python
打工仔折腾 AI11 小时前
在 Ubuntu ARM64 部署 Q1 V3.0 MuJoCo 模型:加载、单步推理与执行器响应解析
linux·运维·人工智能·python·深度学习·ubuntu·性能优化
Wang's Blog12 小时前
Java 项目实战: 交友项目 - 圈子功能实现:总结
java·开发语言·交友
信誓旦旦的程序猿12 小时前
【Python量化实战宝典 #21】北向资金跟随手册:聪明钱择时信号(Python 可跑)
python·1024程序员节·股票数据api·股票数据api接口·股票api数据接口·股票量化数据api·股票量化数据接口