文章目录

  • 前言
  • 分析
    • 获取文章链接、id
    • 分析markdown文本
  • 代码编写
  • 执行测试
  • 说在后面的话

前言

  • 在IT首屈一指的交流平台上,我们可以看得到csdn在最近的一些进步和变化:如blink文章收益,等等方面。促进和提升文章价值,激发笔者写作分享!这无疑是一件好事。
  • 但csdn依然还有很多不够完善或者需要优化的地方,如推荐算法新出的收益无法一键更改文章阅读类型。这让一些大的博主或者干货很多的博主(成百上千文章)很难有精力一个一个手动修改、维护自己权益。
  • 作为社会新青年、IT从事者。我们清楚公作人员每天为我们服务很忙,不一定照顾到所有群体。笔者本着乐于助人的精神,故自己动手,写个脚本,帮助大家解决心理生理难题!
  • 该方案针对markdown用户。富文本可参考类推。
  • 功能上分为直接全部更改分类更改,分类更改需要多输入一个分类进去的首页url。其他一致!按照提升即可。
  • 如有问题可以联系作者!

分析

  • 需求既然有了,那么技术上怎么实现呢?
  • 我们以前彻底的分析过csdn的登录机制,发现csdn很容易登录的。那么我们就可以用着登录的cookie进行我们想要的操作。

获取文章链接、id

我们要找到自己站点的所有文章的url和id。因为我们可能会根据文章id进行操作。
思路:

  • 从登录的cookie种找到你的id,进入csdn主页。
  • 解析主页的信息获取页数,这里说一下。他的页数是js动态加载进去的,并不是直接渲染,如果非得头铁debug找也没问题。但是页数和总文章数有关系。因为一页最多只能有20篇文章!解析这些,你就能获取所有文章链接id

分析markdown文本

  • 对任意一个文章、检查编辑。查看元素获取下来链接。你会发现链接是有规律的。跟文章id有关。
  • 进入之后,你会发现这个是md好像提不出什么信息。点击提交看看ajax请求把。

  • 这些参数没加密。都是原文。我想这个md文件csdn怎么提取。还能根据h5规则反向提取?csdn没那么强吧。肯定有其他方案。仔细观察发现加载时候有个xhr文件有了所有信息。我们只需要进行修改部分即可。

代码编写

  • 思路清晰,流程大致为

依赖外部包:bs4requests
python代码为(没用多进程,简单用了下多线程,执行完手动结束关闭)

import  requests
from bs4 import BeautifulSoup
import json
import threading
from queue import Queue
queue= Queue()
header={'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36','referer':'https://passport.csdn.net/login','origin':'https://passport.csdn.net','content-Type':'application/json;charset=UTF-8','x-requested-with':'XMLHttpRequest','accept':'application/json, text/plain, */*','accept-encoding':'gzip, deflate, br','accept-language':'zh-CN,zh;q=0.9','connection': 'keep-alive','Host': 'passport.csdn.net'}
data={"loginType":"1","pwdOrVerifyCode":"",' \'"userIdentification":"","uaToken":"",' \'"webUmidToken":""}
cookies=""
type='public'
## 登录
def login(usename,password):global cookiesglobal dataloginurl = 'https://passport.csdn.net/v1/register/pc/login/doLogin'data['userIdentification']=usenamedata['pwdOrVerifyCode']=passworddata=str(data)print(data)req = requests.post(loginurl, data=data, headers=header)cookies = requests.utils.dict_from_cookiejar(req.cookies)res = req.textprint(req.status_code)print(cookies)url="https://blog.csdn.net/"+str(cookies['UN'])return url
#将url文章添加到queue
def addurl(url):req2 = requests.get(url, cookies=cookies)soup = BeautifulSoup(req2.text, 'lxml')##获取页数pagetotal = soup.select(".text-center")[0].get("title")pagetotal = (int)(((int)(pagetotal) + 19) / 20);print(pagetotal)for index in range(pagetotal):url2 = url+"/article/list/" + str(index + 1)print(url2)req = requests.get(url2, cookies=cookies)soup = BeautifulSoup(req.text, 'lxml')pages = soup.find(id='mainBox').find_all(attrs={'class': 'article-item-box'})for page in pages:try:href = page.find("a").get("href")id = href.split("/")id = id[len(id) - 1]print(href, id)queue.put(id)except Exception as e:print(e)
def addurl_by_type(url):req2 = requests.get(url, cookies=cookies)soup = BeautifulSoup(req2.text, 'lxml')##获取页数pagetotal = soup.select(".text-center")[0].get("title")pagetotal = (int)(((int)(pagetotal) + 19) / 20);print(pagetotal)for index in range(pagetotal):url2 = url + "/" + str(index + 1)+"?"print(url2)req = requests.get(url2, cookies=cookies)soup = BeautifulSoup(req.text, 'lxml')pages = soup.find(id='mainBox').find_all(attrs={'class': 'article-item-box'})for page in pages:try:href = page.find("a").get("href")id = href.split("/")id = id[len(id) - 1]print(href, id)queue.put(id)except Exception as e:print(e)def change(id):global read_needTypeurl3 = "https://mp.csdn.net/mdeditor/" + str(id) + "#"# req = requests.get(url3, cookies=cookies)url = "https://mp.csdn.net/mdeditor/getArticle?id=" + str(id)req = requests.get(url, cookies=cookies)res = req.json()data = res['data']print(res)data['readType'] = read_needType#print(data['readType'])url = "https://mp.csdn.net/mdeditor/saveArticle"req = requests.post(url, cookies=cookies, data=data)res = req.text#print(res)class downspider(threading.Thread):def __init__(self, threadname, que):threading.Thread.__init__(self)self.threadname = threadnameself.que = quedef run(self):print('start thread' + self.threadname)while True:try:print(self.name,end='')id=queue.get()change(id)except Exception as e:print(e)breakif __name__ == '__main__':url=""threads=[]read_needType=['public','read_need_fans','read_need_vip']name=input("name:")password=input("password:")print("type:\n1:全部可看 \n2关注可看 \n3vip会员可看")value=input("请输入数字")value=int(value)-1read_needType=read_needType[value]print("type:\n1:全部更改 \n2更改一个分类")all_or_type=input("输入更改范围(数字)")all_or_type=int(all_or_type)if all_or_type==1:url=login(name,password)addurl(url)else:print("输入分类首页url:")url=input("url:")login(name,password)addurl_by_type(url)print(url)threadList = ['thread-1', 'thread-2', 'thread-3', 'thread-4', 'thread-5']for j in threadList:thread = downspider(j, queue)thread.start()threads.append(thread)for t in threads:t.join()

执行测试

  • 执行:有一键所有和分类栏目,根据提示输入即可!


  • 粉丝可见

  • 还原

说在后面的话

  • 谨慎使用,杜绝修改,该崩了、错了文章可能全部完蛋!

  • 仅仅为了方便一些博主操作,正确使用自己权益。

  • 如果有效请务必留言点赞,给广大朋友一个安慰!

  • 因为时间原因,白天复习,时间有限,如果有需要java多线程版如果人多可以留言明天补上。夜深了,凌晨1.30.该睡了。

  • 谢谢各位阅读看完支持。

  • 如果对后端、爬虫、数据结构算法等感性趣欢迎关注我的个人公众号交流:bigsai

爬虫实现csdn文章一键(批量)更换阅读类型(全部可见、粉丝可见、vip可见)相关推荐

  1. 【新】CSDN文章一键打印、输出PDF(自动阅读全文、全清爽模式)

    版权声明:本文为丨匿名用户丨原创文章,转载请注明出处:[新]CSDN文章一键打印.输出PDF(自动阅读全文.全清爽模式)_丨晋丨-CSDN博客_csdn打印https://blog.csdn.net/ ...

  2. CSDN文章一键打印、输出PDF

    本文转载自立志考博士 感谢 一.使用谷歌浏览器打开你所想要保存的博客页面 二.按F12打开控制台输入以下代码到console(控制台) 代码如下(示例): function doPrint(){var ...

  3. 一键生成CSDN文章的思维导图目录

    简 介: 本文给出了直接将CSDN文章一键生成对应的思维导图目录的程序.将目录增加在博文的最开始,可以更好地显示博文的内部结构,作为原来CSDN网页中目录的补充,丰富博文的表达能力. 关键词: CSD ...

  4. 新CSDN文章转成PDF、打印(去空白)

    新CSDN文章一键打印.输出PDF(自动阅读全文.全清爽模式) 之前的方法出现的问题是打印出的预览图会有右边一大片空白,这个方法实现将空白去掉 一.功能及修改方法 使用方法:按"F12&qu ...

  5. CSDN文章直接打印,或者保存PDF(去掉多余内容)

    注:该方法已更新,请参照新的文章: [新]CSDN文章一键打印.输出PDF(自动阅读全文.全清爽模式) 打印CSDN内容,将以下js复制放入  工具->开发人员工具->console,回车 ...

  6. 真正CSDN博客文章一键转载插件(含源码)

    插件地址:https://greasyfork.org/zh-CN/scripts/381053-csdn%E5%8D%9A%E5%AE%A2%E6%96%87%E7%AB%A0%E8%BD%AC%E ...

  7. copy outerHTML、python爬取csdn文章、一键打包个人csdn文章保存到本地

    文章目录 1copy outerHTML复制网站源码法 1.1复制源码 1.2 遇到的问题 2 python爬取CSDN博客文章(保存为html,txt,md) 2.1 安装依赖 2.2 完整代码 3 ...

  8. python刷阅读_简单的37行python爬虫刷CSDN博客阅读数

    # -*- coding:utf-8 -*- # 利用爬虫刷CSDN博客阅读数 import requests from bs4 import BeautifulSoup # 解析源码 def Get ...

  9. 如何快速删除公众号发布的文章?教你一键批量删除公众号文章【图文教程】

    如何快速删除公众号发布的文章?教你一键批量删除公众号文章[图文教程] https://www.hechangquan.com/how/635.html

最新文章

  1. 在小程序中实现 Mixins 方案
  2. 在ubuntu系统中使用dpkg命令安装后缀名为deb的软件包
  3. 跟着老王学python
  4. Vue2.0环境安装
  5. Ubuntu镜像国内下载地址
  6. Javascript设计模式
  7. PHP字符串函数大全
  8. 计算机没有设置无线临时网络,如何创建临时无线网络
  9. Vue中diff算法的理解
  10. 2021年中国制药机械市场趋势报告、技术动态创新及2027年市场预测
  11. shiro 同时实现url和按钮的拦截_Shiro是如何拦截未登录请求的(一)
  12. Visual Studio 2011 Beta新特性(一):安装VS2011
  13. 项目时间进度计划与项目进度控制
  14. eclipse:设置maven本地仓库
  15. 姓名国别分类代码:PyTorch深度学习实践 - Lecture_13_RNN Classifier
  16. 前端实现动画的方法总结
  17. 有线电视维护服务器,东方有线电视 网络服务器 设置
  18. boost asio异步服务端实现步骤
  19. c语言pipe函数,pipe 函数 (C语言)
  20. ansible(一)自动化运维工具

热门文章

  1. C++ Primer 5th笔记(chap 13 拷贝控制) 对象移动
  2. Linux Kernel中gicv3实现:SPIs中断routing到指定的CPU
  3. [architecture]-AXI/APB/AHB/ACE的介绍
  4. 设置服务器系统的远程登录数量,设置服务器远程登录用户数量
  5. parted如何将磁盘所有空间格式化_CentOS下大于2T的硬盘格式化问题
  6. Ubuntu配置静态ip联网总结
  7. 重游java(猜数和逛街)
  8. python使用tomorrow实现多线程
  9. 15、HTML单行文本框
  10. 8、Java Swing JCheckBox:复选框组件