我的编程空间,编程开发者的网络收藏夹
学习永远不晚

利用Python批量保存51CTO博客

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

利用Python批量保存51CTO博客

一、背景

最近在整理博客,近在51CTO官网存在文章,想将之前写的全部保存到本地,发现用markdown写的可以导出,富文本的则不行,就想利用Python批量保存自己的博客到本地。

二、代码

git地址

#!/bin/env python
# -*- coding:utf-8 -*-
# _auth:kaliarch

import requests
import time
from bs4 import BeautifulSoup
from selenium import webdriver

class BlogSave():
    # 定义headers字段
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.89 Safari/537.36"
    }

    def __init__(self,blog_name,page_number,login_user_name,login_passwd):
        self.login_url = 'http://home.51cto.com/index'
        # 博客用户名
        self.blog_name = blog_name
        # 需要保存的博客多少页
        self.page_number = page_number
        # 登陆的用户
        self.login_user_name = login_user_name
        # 登陆的密码
        self.login_passwd = login_passwd
        # 本地的chreomedriver驱动
        self.chromedirve = 'D:\chromedriver.exe'
        # blog 导入url
        self.blog_save_url = 'https://blog.51cto.com/blogger/publish/'

    def get_urldict(self):
        """
        爬去用户文章的url
        :param pagenumber:
        :return: urllist
        """
        content_dict = {}
        scrapy_urllist = ["https://blog.51cto.com/" + str(self.blog_name) + "/p" + str(page) for page in
                          range(1, int(self.page_number) + 1)]
        for scrapy_url in scrapy_urllist:
            response = requests.get(scrapy_url, headers=BlogSave.headers)
            soup = BeautifulSoup(response.content, 'lxml', from_encoding='utf-8')
            title_list = soup.find_all('a', class_='tit')

            for content in title_list:
                # 获取url
                url = content['href']
                title_soup = BeautifulSoup(requests.get(url, headers=BlogSave.headers).content, 'lxml', from_encoding='utf-8')
                title = title_soup.find_all('h1', class_='artical-title')
                # 获取标题
                # print(title[0].get_text())
                content_dict[title[0].get_text()] = url
                print(title[0].get_text(),url)

        return content_dict

    def save_blog(self,url_list):
        """
        通过模拟登陆保存博客文件
        :return:
        """
        browser = webdriver.Chrome(self.chromedirve)
        # 打开url
        browser.get(self.login_url)
        time.sleep(2)
        # 登陆
        browser.find_element_by_id('loginform-username').send_keys(self.login_user_name)
        browser.find_element_by_id('loginform-password').send_keys(self.login_passwd)
        browser.find_element_by_name('login-button').click()
        time.sleep(1)
        for url in url_list:
            browser.get(url)
            time.sleep(1)
            try:
                browser.find_element_by_xpath('//*[@id="blogEditor-box"]/div[1]/a[14]').click()
                time.sleep(2)
            except Exception as e:
                with open('fail.log','a') as f:
                    f.write(url + str(e))

    def run(self):
        # 获取标题和url字典
        content_dict = self.get_urldict()
        # 获取url列表
        id_list = []
        for value in content_dict.values():
            id_list.append(str(value).split('/')[-1])
        result_list = [ self.blog_save_url + str(id) for id in id_list ]
        print("result_list:",result_list)
        self.save_blog(result_list)

if __name__ == '__main__':
    # blogOper = BlogSave('kaliarch',1)
    # dict = blogOper.get_urldict()
    # value_list = [ value for value in dict.values()]
    # print(value_list)
    blogOper = BlogSave(blog_name='kaliarch',page_number=5,login_user_name='xxxxxxxx@qq.com',login_passwd='xxxxxxxxxxxxx')
    blogOper.run()

三、测试

  • 程序是用户指定博客的用户名和需要抓取的页码数字,之后爬去所有与的文章标题和对应的url
    利用Python批量保存51CTO博客
  • 后期通过selenium模拟登录,直接请求https://blog.51cto.com/blogger/publish/文章id可以直接导出markdown写的文件,这个直接导出没办法命名文件很尴尬,但是导出了总归好的,后期可以读文件来给文件命名
    利用Python批量保存51CTO博客
  • 查看导出的markdown文件
    利用Python批量保存51CTO博客

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

利用Python批量保存51CTO博客

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

利用Python批量保存51CTO博客

一、背景最近在整理博客,近在51CTO官网存在文章,想将之前写的全部保存到本地,发现用markdown写的可以导出,富文本的则不行,就想利用Python批量保存自己的博客到本地。二、代码git地址#!/bin/env python# -*-
2023-01-31

Python利用hashlib实现文件MD5码的批量存储

这篇文章主要为大家详细介绍了如何用Python和hashlib实现文件MD5码的批量存储功能,文中的示例代码讲解详细,感兴趣的小伙伴可以学习一下
2023-05-19

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录