利用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 = ‘http://blog.51cto.com/blogger/publish/‘

    def get_urldict(self):
        """
        爬去用户文章的url
        :param pagenumber:
        :return: urllist
        """
        content_dict = {}
        scrapy_urllist = ["http://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=‘[email protected]‘,login_passwd=‘xxxxxxxxxxxxx‘)
    blogOper.run()

三、测试

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

原文地址:http://blog.51cto.com/kaliarch/2301359

时间: 2024-10-26 06:31:16

利用Python批量保存51CTO博客的相关文章

【python】获取51cto博客的文章列表

python的正则与网页操作练习二: import re import urllib.request #51cto urlcode=gb18030 class down51web: s_url='' s_blogid='' s_blogpages='' s_html='' s_code='' def __init__(self,url,code): self.s_url=url self.s_code=code def get_html(self): self.s_html=urllib.req

python爬虫抓取51cto博客大牛的文章名和文章url

脚本一: #!/usr/bin/env python #coding:utf-8 from  bs4  import  BeautifulSoup import urllib import re art = {} for page in range(1,5): page = str(page) url = 'http://yujianglei.blog.51cto.com/all/7215578/page/'  + page response = urllib.urlopen(url).read

Python爬虫爬取博客园并保存

Python爬虫爬取博客园并保存        爬取博客园指定用户的文章修饰后全部保存到本地 首先定义爬取的模块文件: crawlers_main.py 执行入口 url_manager.py url管理器 download_manager.py 下载模块 parser_manager.py html解析器(解析html需要利用的内容) output_manager.py 输出html网页全部内容文件(包括css,png,js等) crawlers_main.py 执行入口 1 # coding

Python+webdriver爬取博客园“我的闪存”并保存到本地

前篇 用webdriver+phantomjs实现无浏览器的自动化过程 本篇 想法与实现 我想要将博客园“我的闪存”部分内容爬取备份到本地文件,用到了WebDriver和Phantomjs的无界面浏览器.对于xpath的获取与校验需要用到firefox浏览器,安装firebug和firepath插件.代码如下: # -*- coding: utf-8 -*- import os,time from selenium import webdriver from selenium.webdriver

使用python获取51CTO博客列表按时间倒序排序

之前看到了这道shell面试题:获取51CTO博客列表按时间倒序排序http://oldboy.blog.51cto.com/2561410/1860985 由于学了一段时间的python,试想着能否使用python来解题 思路:通过requests模块获取网页源码,通过split()函数获取总页数,拼接字符串获取所有博客地址的url.同样,通过requests获取所有页面的源码并通过正则匹配,获取关键信息,从而拼接出html页面. #coding:utf-8 import requests i

开源分享:用Python开发的开源博客系统Blog_mini

本博文在51CTO技术博客首发. 开源不易,Python良心之作,真心送给广大朋友,恳请给予支持,不胜感激! 0.Blog_mini送给你们:让每个人都轻松拥有可管理的个人博客 你从未架设过服务器或网站,希望可以接触一下这方面的知识-- 你从未使用过Linux操作系统,希望可以接触一下这方面的知识-- 你是初中生/高中生/大学生,希望能在学业之余锻炼一下自己的IT技能-- 你是Python新手,希望能有一个用Python开发的个人博客-- 你学习Python许久,希望有一个开源的项目可以用来学习

使用python爬取csdn博客访问量

最近学习了python和爬虫,想写一个程序练练手,所以我就想到了大家都比较关心的自己的博客访问量,使用python来获取自己博客的访问量,这也是后边我将要进行的项目的一部分,后边我会对博客的访问量进行分析,以折线图和饼图等可视化的方式展示自己博客被访问的情况,使自己能更加清楚自己的哪些博客更受关注,博客专家请勿喷,因为我不是专家,我听他们说专家本身就有这个功能. 一.网址分析 进入自己的博客页面,网址为:http://blog.csdn.net/xingjiarong 网址还是非常清晰的就是cs

51CTO博客旧版首页截图纪念

2017年7月11日,51CTO博客PC端首页进行改版,这个曾经陪伴了多年的旧版首页已经超期服役,将告别历史舞台,但它也承载了我们很多作者的光荣与梦想.承载了我们很多阅读的时光.特将旧版首页截图保存,以作留念.

利用Travis IC实现Hexo博客自动化部署

1.Hexo博客的利与弊 Hexo中文 我就默认为看到这篇文章的人都比较了解Hexo博客,也都能够成功手动部署吧.所以第一部分推荐两篇文章一笔带过,让我们快速进入本文的重点内容.实在不知道也不要方先看一看下面推荐的这两篇文章. 手把手教你使用Hexo + Github Pages搭建个人独立博客--令狐葱 Hexo + github 打造个人博客--zdy0_2004 还有一个专栏: Hexo / 总共13篇--水寒 感谢以上文章原创作者的分享,推荐纯属自来水.看完这两篇文章后有没有觉得自己手里