网站开发学习Python实现-Django项目部署-同步之前写的博客(6.2.2)

目录

  • 1.说明
  • 2.思路
  • 3.代码
  • 关于作者

@

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

时间: 2024-09-30 14:45:12

网站开发学习Python实现-Django项目部署-同步之前写的博客(6.2.2)的相关文章

CentOS 7 下Django项目部署教程(基于uwsgi和Nginx)

本文主要介绍如何在Linux平台上部署Django相关项目,关于Django项目的部署在互联网论坛上有很多的资料,笔者在查阅众多资料并经过实践后发现结果并不如意(或多或少总是遇到一些问题,往往与资料的预期不相符).在浏览了许多资料后笔者整理得出了部署Django项目的一般性方法,部署的方法有很多种,在此笔者选择了较为常用的基于uwsgi和Nginx的部署方案. 一.前提准备 部署前主要是需要做一些与服务器相关的准备工作,本次教程的服务器采用了阿里云的 CentOS 7.3 64位,当然作为资料学

Django 项目部署

Django 项目部署 原文地址:https://www.cnblogs.com/guozepingboke/p/10844060.html

快速学习的我,要怎么写好博客

Dimple的粉丝都知道,我现在在做的几件事情:组建了两个学习小组(Java和Python入门),每周共同翻译一篇英语文档(欧阳和我寻找素材),时不时地分享我学习的心得(后续在视频号里做简短介绍),就这样我开始了新一年的公众号运营. 很多小伙伴都在按部就班地学习着,也坚持学习输出,都在为进一步提升自己而努力.当然在学习的过程中就遇到了一些困惑,比如Vancen就在星球里提问,想知道自己如何更好地对学习成果输出,我觉得大部分同学都有这个困惑,就把星球的文章再加工下,在这里和大家分享. Vancen

python网络爬虫入门(一)——简单的博客爬虫

最近,为了微信公众号的图文,上网疯狂的收集和看了一些有深度的新闻和有趣的引人深思的文字评论,并选择了几篇极品发布出去.但感觉一篇一篇的看实在是麻烦死了.想找一个简单的解决办法,看能不能自动把网上的资料收集起来,然后自己用统一筛选.不巧,最近准备学习下网络爬虫相关知识,于是按照网上的教程自己学着试写了一个小小的爬虫,嘻嘻,是用来爬韩寒博客的. 先把完整的代码贴上来,如果朋友们需要试验下,请先安装python相关环境,然后在复制粘贴保存,再按F5运行. #导入urllib库,python访问网页必须

hexo部署到gitcafe上静态博客

http://zanderzhang.gitcafe.io/2015/09/17/hexo部署到gitcafe上静态博客/ hexo这些事儿,zippera's blog,之类的,这些都说的很清楚了. 不过也还是有几个特别的地方: 想插入图片的时候竟然上不了谷歌.好吧,睡觉,明天继续 在部署deploy的时候,出现 ERROR Deployer not found: git, 加上 npm install hexo-deployer-git --save, 之前type是填github,现在是g

(转)VS2015基础 指定一个或多个项目执行 - 心少朴的博客

慈心积善融学习,技术愿为有情学.善心速造多好事,前人栽树后乘凉.我今于此写经验,愿见文者得启发. 这个解决方案下,有两个项目, 看到黑体的project了吗?它就是指定执行的项目. 这两个项目的代码分别是,空间的名字就是项目的名字. 但是,建立之后 改变了空间的名字不会改变项目的名字,改了项目的名字不会改变空间的名字. using System; using System.Collections.Generic; using System.Linq; using System.Text; usi

利用Metaweblog技术的API接口同步到多个博客网站(详细)

很早就有这个想法:自己有时候会用到多个博客,有些博客在一个网站上写完之后,要同步到其他博客网站,自己只能复制粘贴,感觉特别没意思,复制粘贴的麻木了.一直在想有哪些技术能实现一次写博,多站同步.最近网上搜了下,还真有这方面的资料,那就是用Metaweblog的API接口,这种特别像foxmail一样能把多个邮箱都集中在一起管理来收发邮件,Metaweblog能一次把写的博客同步到多个博客. 直接用Metaweblog来实现同步功能不太方便,幸好有了Windows live writer这个实现了M

推荐18个基于 HTML5 Canvas 开发的图表库 - 梦想天空(山边小溪) - 博客园

推荐18个基于 HTML5 Canvas 开发的图表库 - 梦想天空(山边小溪) - 博客园 推荐18个基于 HTML5 Canvas 开发的图表库

Python 实用爬虫-04-使用 BeautifulSoup 去水印下载 CSDN 博客图片

Python 实用爬虫-04-使用 BeautifulSoup 去水印下载 CSDN 博客图片 其实没太大用,就是方便一些,因为现在各个平台之间的图片都不能共享,比如说在 CSDN 不能用简书的图片,在博客园不能用 CSDN 的图片. 当前想到的方案就是:先把 CSDN 上的图片都下载下来,再手动更新吧. 所以简单写了一个爬虫用来下载 CSDN 平台上的图片,用于在其他平台上更新图片时用 更多内容,请看代码注释 效果演示 Python 源代码 提示: 需要先下载 BeautifulSoup 哦,