标签:python 模拟登录 下载静态页面 pip 转pdf
最近突然想给自己的博客备份下,看了两个软件:一个是CSDN博客导出软件,好像现在不能使用了;一个是豆约翰博客备份专家,感觉都太慢,而且不灵活,想单独下一篇文章就比较费时。而且我的毕业论文是基于Python自然语言相关的,所以想结合前面的文章用Python实现简单的功能: 获取一篇文章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错误”:
<html> <head><title>403 Forbidden</title></head> <body bgcolor="white"> <center><h1>403 Forbidden</h1></center> <hr><center>nginx</center> </body> </html>此时通过设置消息头或模仿登录,可以伪装成浏览器实现下载。代码如下:
#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!!!' except Exception,e: print "Exception: ",e else: return result #定义Get请求 添加请求消息头,伪装成浏览器 def geturl(self,get_url): result = "" try: req = urllib2.Request(url = get_url, headers = self.headers) result = urllib2.urlopen(req).read() open('geturl.html','w+').write(result) type = sys.getfilesystemencoding() print result.decode("UTF-8").encode(type) #防止中文乱码 print 'Get Succeed!!!' except Exception,e: print "Exception: ",e else: return result #调用该类获取HTML print unicode('调用模拟登陆函数openurl:','utf-8') print unicode('第一种方法 openurl:','utf-8') getHtml = GetInfoByBrowser() getHtml.openurl("http://blog.csdn.net/eastmount/article/details/39770543") print unicode('第二种方法 geturl:','utf-8') getHtml.geturl("http://blog.csdn.net/eastmount/article/details/39770543")运行效果是下载我的文章“[Python学习] 简单网络爬虫抓取博客文章及思想介绍”,两种方法效果一样,其中本体两个文件geturl.html和openurl.html。该方法运行Python定义类、函数、urllib2和cookielib相关知识。
首先声明:这部分代码实现最终以失败告终,以后可能还会继续研究,一方面由于最近太忙;一方面对Linux的欠缺和对Python的掌握不够,但还是想把这部分写出来,感觉还是有些东西的,可能对你也有所帮助!感觉好遗憾啊~
# -*- coding: utf-8 -*- import sx.pisa3 as pisa data= open('1.htm').read() result = file('test.pdf', 'wb') pdf = pisa.CreatePDF(data, result) result.close() pisa.startViewer('test.pdf')参考文章:python将html转成PDF的实现代码(包含中文)
easy_install的用法: 1) 安装一个包 $ easy_install <package_name> $ easy_install "<package_name>==<version>" 2) 升级一个包 $ easy_install -U "<package_name>>=<version>" pip的用法 1) 安装一个包 $ pip install <package_name> $ pip install <package_name>==<version> 2) 升级一个包 (如果不提供version号,升级到最新版本) $ pip install --upgrade <package_name>>=<version> 3)删除一个包 $ pip uninstall <package_name>第一步:下载PIP软件
Usage: pip <command> [options] Commands: install 安装软件. uninstall 卸载软件. freeze 按着一定格式输出已安装软件列表 list 列出已安装软件. show 显示软件详细信息. search 搜索软件,类似yum里的search. wheel Build wheels from your requirements. zip 不推荐. Zip individual packages. unzip 不推荐. Unzip individual packages. bundle 不推荐. Create pybundles. help 当前帮助. General Options: -h, --help 显示帮助. -v, --verbose 更多的输出,最多可以使用3次 -V, --version 现实版本信息然后退出. -q, --quiet 最少的输出. --log-file <path> 覆盖的方式记录verbose错误日志,默认文件:/root/.pip/pip.log --log <path> 不覆盖记录verbose输出的日志. --proxy <proxy> Specify a proxy in the form [user:passwd@]proxy.server:port. --timeout <sec> 连接超时时间 (默认15秒). --exists-action <action> 默认活动当一个路径总是存在: (s)witch, (i)gnore, (w)ipe, (b)ackup. --cert <path> 证书.
**************************************************** IMPORT ERROR! Reportlab Version 2.1+ is needed! **************************************************** The following Python packages are required for PISA: - Reportlab Toolkit >= 2.2 <http://www.reportlab.org/> - HTML5lib >= 0.11.1 <http://code.google.com/p/html5lib/> Optional packages: - pyPDF <http://pybrary.net/pyPdf/> - PIL <http://www.pythonware.com/products/pil/> Traceback (most recent call last): File "G:\software\Program software\Python\python insert\HtmlToPDF.py", line 5, in <module> import sx.pisa3 as pisa ... raise ImportError("Reportlab Version 2.1+ is needed!") ImportError: Reportlab Version 2.1+ is needed!
其原因是导入"import sx.pisa3 as pisa "时就显示Reportlab版本需要大于2.1以上。而通过代码查看版本为3.1.44。
>>> import reportlab >>> print reportlab.Version 3.1.44 >>>查看了很多资料都没有解决该问题,其中最典型的是将pisa安装目录下,sx\pisa3\pisa_util.py文件中代码修改:
if not (reportlab.Version[0] == "2" and reportlab.Version[2] >= "1"): raise ImportError("Reportlab Version 2.1+ is needed!") REPORTLAB22 = (reportlab.Version[0] == "2" and reportlab.Version[2] >= "2")修改后的代码如下:
if not (reportlab.Version[:3] >="2.1"): raise ImportError("Reportlab Version 2.1+ is needed!") REPORTLAB22 = (reportlab.Version[:3] >="2.1")
但仍然不能解决该问题,这就导致了我无法验证该代码并实现后面的HTML转换为PDF的功能。参看了很多国外的资料:
xhtml2pdf ImportError - Django 来自stackoverflow
https://github.com/stephenmcd/cartridge/issues/174
https://groups.google.com/forum/#!topic/xhtml2pdf/mihS51DtZkU
http://linux.m2osw.com/xhtml2pdf-generating-error-under-1404
最后简单总结下吧!文章主要想实现从CSDN下载HTML静态网页形式的文章,再通过Python第三方库实现转换成PDF格式的备份文章功能,但由于Pisa无法导入最终失败。你可能非常失望,我也很遗憾。但仍然能从文章中学到一些东西,包括:
1.如何通过Python获取403禁止的内容,写消息头模仿登录,采用geturl和openurl两种方法实现;
2.如何配置PIP,它能让我们更方便的安装第三方库,让你了解些配置过程;
3.让你了解了HTML转PDF的一些思想。
最后推荐下我以前关于Python的爬虫文章,可能会给你提供些想法,虽然比那些开源的软件差很多,但这方面的文章和资源还是比较少的,哪怕给你一点灵感就好。
[Python学习] 专题一.函数的基础知识
[Python学习] 专题二.条件语句和循环语句的基础知识
[Python学习] 专题三.字符串的基础知识
[Python学习] 简单网络爬虫抓取博客文章及思想介绍
[python学习] 简单爬取维基百科程序语言消息盒
[python学习] 简单爬取图片网站图库中图片
[python知识] 爬虫知识之BeautifulSoup库安装及简单介绍
[python+nltk] 自然语言处理简单介绍和NLTK坏境配置及入门知识(一)
[python学习] 模仿浏览器下载CSDN源文并实现PDF格式备份
标签:python 模拟登录 下载静态页面 pip 转pdf
原文地址:http://blog.csdn.net/eastmount/article/details/45754407