最近突然想给自己的博客备份下,看了两个软件:一个是CSDN博客导出软件,好像现在不能使用了;一个是豆约翰博客备份专家,感觉都太慢,而且不灵活,想单独下一篇文章就比较费时。而且我的毕业论文是基于Python自然语言相关的,所以想结合前面的文章用Python实现简单的功能:
1.通过网络下载本体的博客,包括图片;
2.在通过Python把HTML转换成PDF格式;
3.如果可能,后面可能会写文章对代码采用特定的方式进行处理。
言归正传,直接上代码通过两个方面进行讲解。
一. 设置消息头下载CSDN文章内容
获取一篇文章Python的代码如下,如韩寒的新浪博客:(文章最后的总结有我以前关于Python爬虫博文链接介绍)
import urllib
content = urllib.urlopen("http://blog.sina.com.cn/s/blog_4701280b0102eo83.html").read()
open('blog.html','w+').write(content)
但是很多网站都防止这种获取方式,如CSDN会返回如下html代码:“403 Forbidden错误”:
403 Forbidden403 Forbidden
此时通过设置消息头或模仿登录,可以伪装成浏览器实现下载。代码如下:
#coding:utf-8
import urllib
import urllib2
import cookielib
import string
import time
import re
import sys
#定义类实现模拟登陆下载HTML
class GetInfoByBrowser:
#初始化操作
#常见错误:AttributeError: .. instance has no attribute 'opener' 是双下划线
def __init__(self):
socket.setdefaulttimeout(20)
self.headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 6.3; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0'}
self.cookie_support = urllib2.HTTPCookieProcessor(cookielib.CookieJar())
self.opener = urllib2.build_opener(self.cookie_support,urllib2.HTTPHandler)
#定义函数模拟登陆
def openurl(self,url):
urllib2.install_opener(self.opener)
self.opener.addheaders = [("User-agent",self.headers),("Accept","*/*"),('Referer','http://www.google.com')]
try:
result = self.opener.open(url)
content = result.read()
open('openurl.html','w+').write(content)
print content
print 'Open Succeed!!!'
e