首页 > 其他分享 >CSDN批量导出文章为markdown,(给我文章自动转成vip可看。。。直接润)

CSDN批量导出文章为markdown,(给我文章自动转成vip可看。。。直接润)

时间:2024-11-13 17:30:28浏览次数:1  
标签:cookies markdown title url 导出 vip 文章 print page

> 我真服了。。。。太久没登,回来一看自个写的公开文章变vip文章了。。。。。。
>

 

 

好活

 

 


# 准备整个脚本把文章下载导出markdown

找了一下,发现之前的的方法挺多都修复了。。。还加了反爬机制,自带的导出pdf文档,里面的代码无法完全显示

>找了下是最新的方法:[CSDN文章导出md并迁移至博客园](https://blog.csdn.net/qq_35204012/article/details/142504118) 准备迁移过去了
## 尝试1

看了下脚本,说是要把所有文章全部开放,不能有vip文章或者付费,否则会爬取失败。。。。。可是平台已经给我自动设置成了vip文章了。。。不想手动一篇篇重新发布修改了(好像有脚本可以一键改来着,不过改了要全部重新发布)

## 尝试2,使用edge编程

可以看到如果是使用了markdown编辑器编辑的文章,在上面是有一个导出的操作的,可以导出成markdown或者是html文件。
==参考:==
[python模拟操作edge浏览器,完成问题的采集](https://blog.csdn.net/weixin_42771529/article/details/138114136)
[Python爬虫实战——获取指定博主所有专栏链接及博文链接](https://blog.csdn.net/qq_53381910/article/details/130816856)

 

>查看版本信息

 

 


下个对应版本驱动然后丢在python的目录下面,我下的驱动版本后面几位数对不上,应该能用

 


>直接丢脚本,写的比较拉,有时会崩溃。。。能用就行.jpg

>==注意事项:这个只能导出自己写并发布的文章,本质就是模拟点击使用官方编辑器导出markdown文档==


```python
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import WebDriverException
from bs4 import BeautifulSoup
import os
import requests
import time
import pickle
#from DrissionPage import ChromiumOptions

# 初始化Edge浏览器驱动
page = None

# 保存cookies,登录成功后随便输入个字符就行
def SaveCookies():
global page
# 等待一段时间
time.sleep(5)
#input("input something:")

# 在成功登录后,保存 Cookies
cookies = page.get_cookies()
with open("cookies.pkl", "wb") as cookies_file:
pickle.dump(cookies, cookies_file)

def login():
global page
# 尝试加载之前保存的 Cookies
try:
page.get("https://blog.csdn.net") # 替换为你想要打开的URL
with open("cookies.pkl", "rb") as cookies_file:
cookies = pickle.load(cookies_file)
for cookie in cookies:
page.add_cookie(cookie)
page.refresh() # 刷新页面以应用 Cookies
except FileNotFoundError:
print("没有找到 Cookies 文件,请先手动登录并保存 Cookies。")
time.sleep(60) # 一分钟内登录
SaveCookies()


def click_element(driver, locator, wait_time=20):
""" 封装点击元素的函数,支持重试机制 """
for _ in range(3): # 重试 3 次
try:
element = WebDriverWait(driver, wait_time).until(EC.element_to_be_clickable(locator))
element.click()
time.sleep(3) #点击完成后等待3s
return True
except Exception as e:
print(f"尝试点击元素失败: {e}")
#page.refresh() # 有时会卡住,要刷新一下页面
time.sleep(5) # 等待一段时间后重试
return False


#导出为md文档
def ExportMarkDown(title,url):
global page
#page.get(url)
max_retries = 3 # 最多重试次数
for attempt in range(max_retries):
try:
page.get(url)
# 等待编辑按钮可点击并点击 ,测试发现点击太快了,还反应不过来
if not click_element(page, (By.CLASS_NAME, "href-article-edit")):
print("未能找到编辑按钮")
continue
# 找到导出按钮并点击
if not click_element(page, (By.XPATH, "//button[@data-title='导出']")):
print("未能找到导出按钮")
continue
# 导出为markdown文件
if not click_element(page, (By.XPATH, "//div[contains(text(), '导出为 Markdown文件')]")):
print("未能找到导出按钮")
continue
break # 成功则退出循环
except WebDriverException as e:
print(f"尝试 {attempt + 1}/{max_retries} 失败: {e}")
time.sleep(3) # 等待一段时间后重试
else:
print("所有尝试均失败")
with open('failurl.txt',"w+",encoding="utf-8") as f:
f.write("[{}]({})".format(title,url) + "\n")
return

 



# # 导出为html文件
# if not click_element(page, (By.XPATH, "//div[contains(text(), '导出为 HTML文件')]")):
# print("未能找到导出按钮")
# return
# if not click_element(page, (By.XPATH, "//button[contains(text(), '确认')]")):
# print("未能找到导出按钮")
# return

#获取个人空间下的所有文章链接
def GetAllUrl(user):

url = "https://blog.csdn.net/{}".format(user)
# 构造请求头
headers={
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36'
}
# 发送get请求
r=requests.get(url = url,headers=headers,timeout = 5)
# 处理
soup=BeautifulSoup(r.text,'html.parser')

# 获取用户名
div = soup.find("div",class_ = "user-profile-head-name")
username = div.text.split(" ")[0]

# 查找专栏链接
divs = soup.find_all("div",class_ = "aside-common-box-content")
div = divs[1]
lis = div.find_all("li")

titles = []
infos = {}
# 爬取专栏链接及链接名
if os.path.isfile(user+"_categoty_link.txt"):
# 如果文件存在,删除文件
os.remove(user+"_categoty_link.txt")
for li in lis:
# print("####")
url = li.find("a").attrs['href']
title = li.find("span").attrs['title']
titles.append(title) #所有专栏名称
infos[title] = {"url":url}
#print(infos)
with open("{}的博文.md".format(username),"w+",encoding="utf-8") as f:
# 爬取专栏下的博文
templist = []
for title in titles:
# if True:
print(title)

f.write("# {}".format(title.replace(" ","").replace("\n","")) + "\n")
r = requests.get(url=infos[title]["url"], headers=headers, timeout=5)
soup = BeautifulSoup(r.text, 'html.parser')
lis_2 = soup.find("ul", class_="column_article_list").find_all("li")

print("###########{}##########\n".format(title))

for li in lis_2:
#print(li)
title = li.find("div",class_ = "column_article_title").text.strip()
href = li.find("a").attrs['href']
print(title,href)
#有重复链接,去一下重
if href not in templist:
f.write("[{}]({})".format(title,href) + "\n")
ExportMarkDown(title,href)
templist.append(href)
time.sleep(3) #延时3s

 

#这个脚本只能导出自己写的文章,不然是没有编辑按钮的
if __name__ == "__main__":
try:
page = webdriver.Edge()
login()

user = '准备跑路' # 替换成自己的用户名
GetAllUrl(user)
finally:
page.quit()
#ExportMarkDown("https://blog.csdn.net/ookami6497/article/details/132840398")
input()

```

>稍微说明一下,这个要在弹出的浏览器页面扫码登一下,然后会把你的cookie保存到本地,如果脚本崩了就不用再次登录了
```python
# 保存cookies,登录成功后随便输入个字符就行
def login():
global page
# 尝试加载之前保存的 Cookies
try:
page.get("https://blog.csdn.net") # 替换为你想要打开的URL
with open("cookies.pkl", "rb") as cookies_file:
cookies = pickle.load(cookies_file)
for cookie in cookies:
page.add_cookie(cookie)
page.refresh() # 刷新页面以应用 Cookies
except FileNotFoundError:
print("没有找到 Cookies 文件,请先手动登录并保存 Cookies。")
time.sleep(60) # 一分钟内登录
SaveCookies()
```


>然后整个脚本把markdown中的图片链接全部拉一份到本地就ok了

 

标签:cookies,markdown,title,url,导出,vip,文章,print,page
From: https://www.cnblogs.com/ctrl-moyu/p/18544432

相关文章

  • 如何把markdown文件导出为pdf
    1.下载Prince[下载小工具]下载后直接安装即可。2.添加环境变量先找到小工具的可执行文件Prince.exe的路径。.\Prince\engine\bin把Prince.exe的路径的添加到环境变量中,然后重启vscode。3.在vscode中把md文件转换成pdfa.先保证自己有MarkdownPreviewEnhanced......
  • 数据库运维实操优质文章文档分享(含Oracle、MySQL等) | 2024年10月刊
    本文为大家整理了墨天轮数据社区2024年10月发布的优质技术文章/文档,主题涵盖Oracle、MySQL、PostgreSQL等主流数据库系统以及国产数据库的技术实操,从基础的安装配置到复杂的故障排查,再到性能优化的实用技巧及常用脚本等,分享给大家:Oracle优质技术文章概念梳理&安装配置OracleR......
  • aigc学习路线从入门到精通(非常详细),这篇文章看完,让你不再盲目学习
    话说AI的兴起,让很多人无所适从,大家的统一看法就是:“又开始卷了”。这次与其说“卷”,不如说“时代变革”。“卷”是在一个层面上,而这次明显不是。我作为一个10年的设计师和插画师,2022年12月份,自己也明显有了压力,刚开始也很抗拒人工智能,在一些绘画平台和社交平台,我们的原创......
  • markdown下载所有图片并保存
    markdown下载所有图片并保存importrefromdatetimeimportdatetimeimportrequests#读取txt文件内容withopen('d:\Profile\Downloads\Verilog基础语法(7)之generate块.md','r',encoding='utf-8')asf:content=f.read()#使用......
  • markdown学习
    一级标题ctrl+1文章地址:https://blog.csdn.net/qq_41261251/article/details/102817673二级标题+2最多六级斜体用两个*扩起,或者ctrl+i加粗用两个**括起,或者ctrl+b粗斜体用***括起,或者ctrl+b+i哈哈哈分割线三个-或*或+删除线用~~括起,或者alt+shift+5下划线ctrl+u第一......
  • APP实战:某无*单词 实现直接获取VIP
    记一次修改dex文件实现破译某单词软件VIP(某无*单词)这是一个无壳的APP,可以通过MT管理器取查看所有的dex文件,或者通过Jadx去搜索'会员'很简单的判断VIP的语句,所以我们也只需要去看看代码的实现就可以了intpro=user.getPro();进入getPro()看到的是smali代码.methodpubl......
  • 基于ssm+vue.js的高校二手交易平台附带文章源码部署视频讲解等
    文章目录前言详细视频演示具体实现截图核心技术介绍后端框架SSM前端框架Vue持久层框架MyBaits为什么选择我代码参考数据库参考测试用例参考源码获取前言......
  • 基于ssm+vue.js体育竞赛成绩管理系统的附带文章源码部署视频讲解等
    文章目录前言详细视频演示具体实现截图核心技术介绍后端框架SSM前端框架Vue持久层框架MyBaits为什么选择我代码参考数据库参考测试用例参考源码获取前言......
  • 基于ssm+vue.js酒店管理系统的附带文章源码部署视频讲解等
    文章目录前言详细视频演示具体实现截图核心技术介绍后端框架SSM前端框架Vue持久层框架MyBaits为什么选择我代码参考数据库参考测试用例参考源码获取前言......
  • 基于springboot+vue.js+uniapp小程序的企业资产管理系统附带文章源码部署视频讲解等
    文章目录前言详细视频演示具体实现截图核心技术介绍后端框架SpringBoot前端框架Vue持久层框架MyBaits为什么选择我代码参考数据库参考测试用例参考源码获取前言......