网站开发学习Python实现-Django项目部署-同步之前写的博客(6.2.2)
时间:2019-09-16
本文章向大家介绍网站开发学习Python实现-Django项目部署-同步之前写的博客(6.2.2),主要包括网站开发学习Python实现-Django项目部署-同步之前写的博客(6.2.2)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
@
1.说明
之前写的博客都在csdn和博客园中
要将博客同步到自己的博客网站中
因为都是使用markdown格式书写的,所以直接爬取上传就完事
2.思路
分析了下博客园,发现可行。先登录进入自己的博客主页,可以看到有下一页的标志,每一页包含若干个博客详情,博客详情中包含edit页(编辑页面)和正常页面(其他用户访问的),要获取的就是eidt页面的博客名字,博客内容。博客分类在edit页面中不好获取,转而去正常页面获取,发现是一个ajax请求,传入用户id和博客id就可以获取到分类。信息获取到了就保存在本地,按分类保存。保存后就使用post请求发送到自己的博客网站中,或者直接写入数据库
3.代码
从文件读取请求头字典,构造函数传入的是文件名
class getHeaders(object):
def __init__(self,path):
self.dict_ = {}
with open(path, "r",encoding="utf8") as f:
line = f.readline()
while line:
a = line.split(":")
self.clean_(a)
try:
self.dict_[a[0]] = a[1]
except:
pass
line = f.readline()
def clean_(self,list_):
for i in range(len(list_)):
list_[i] = list_[i].strip()
if len(list_) > 2 :#说明有多个:号
try:
#开头为空,说明元字符串开头有:
list_.remove("")
list_[0] = ":"+list_[0]
except:
#说明开头不为空
list_[1] = list_[1]+":"+list_[2]
爬博客园的代码
import requests
from lxml import etree
from GetHeaders import getHeaders
import os
#博客园获取分类,传入ID
catagory_url = "https://www.cnblogs.com/simon-idea/ajax/CategoriesTags.aspx?blogId=xxxxxx&postId=%s"
#每一页中包含的url
link_list = []
#筛选详情页的url
detail_list = []
heads = getHeaders("博客园").dict_
for i in range(1,9):
url = "https://www.cnblogs.com/simon-idea/default.html?page=%s" #7
url = url % str(i)
req = requests.get(url, headers=heads)
html = etree.HTML(req.content)
every_page_links = html.xpath('//*[@id="mainContent"]/div/div/div/a/@href')
link_list.extend(every_page_links)
for i in link_list:
if "Edit" in i :
detail_list.append(i)
# assert 1 ==2
for i in detail_list:
url = i
req = requests.get(url, headers=heads)
a = req.content.decode(req.encoding)
html = etree.HTML(a)
# title //*[@id="Editor_Edit_txbTitle"]/@value
title = html.xpath('//*[@id="Editor_Edit_txbTitle"]/@value')[0]
# body //*[@id="Editor_Edit_EditorBody"]
body = html.xpath('//*[@id="Editor_Edit_EditorBody"]/text()')[0]
req = requests.get(catagory_url % i[-8:], headers=heads)
a = req.content.decode(req.encoding)
html = etree.HTML(a)
catagory = html.xpath('//*[@id="BlogPostCategory"]/a/text()')[0]
dirs = '博客/%s' % catagory
if not os.path.exists(dirs):
os.makedirs(dirs)
with open("博客/%s/%s.md" % (catagory,title),"w",encoding="utf-8") as f:
f.write(body)
上传的代码有很多坑,不完善
因为原博客作者的博客路径定义的有问题
关于作者
个人博客网站
个人GitHub地址
个人公众号:
原文地址:https://www.cnblogs.com/simon-idea/p/11526806.html
- 高效能程序员的七个习惯
- 这样入门asp.net core,如何
- Javascript继承,再谈
- 程序员的暴力美学
- Reactor模式的.net版本简单实现--DEMO
- 能花钱的,就不要花时间
- Lombok介绍、使用方法和总结
- JDK1.7源码分析01-Collection
- Spring boot自定义启动字符画(banner)
- 产品解析:Github Atom
- Docker+Jenkins持续集成环境(5): android构建与apk发布
- Docker+Jenkins持续集成环境(4):使用etcd+confd实现容器服务注册与发现
- 易企秀前端压缩源码分析与还原
- 关于 JS 拖拽功能的冲突问题及解决方法
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法