<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                最近突然想給自己的博客備份下,看了兩個軟件:一個是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錯誤”: ~~~ <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相關知識。 ![](https://box.kancloud.cn/2016-02-23_56cc2eb61ffc0.jpg) ![](https://box.kancloud.cn/2016-02-23_56cc2eb63c753.jpg) 相關類似的優秀文章推薦三篇,其中POST方法類似: [[Python]一起來寫一個Python爬蟲工具類whyspider——汪海](http://blog.csdn.net/pleasecallmewhy/article/details/24021695) [用python 寫爬蟲,去爬csdn的內容,完美解決 403 Forbidden](http://www.yihaomen.com/article/python/210.htm) [urllib2.HTTPError: HTTP Error 403: Forbidden](http://blog.csdn.net/my2010sam/article/details/17398807) ##二. 實現HTML轉PDF格式備份文章 首先聲明:這部分代碼實現最終以失敗告終,以后可能還會繼續研究,一方面由于最近太忙;一方面對Linux的欠缺和對Python的掌握不夠,但還是想把這部分寫出來,感覺還是有些東西的,可能對你也有所幫助!感覺好遺憾啊~ ### 1.轉PDF解決方法 通過網上查閱資料,發現最常見的兩種調用Python庫轉PDF的方法: 方法一:調用PDF報表類庫Reportlab,它是在線網站轉PDF該庫不屬于Python的標準類庫,所以必須手動下載類庫包并安裝;同時由于涉及到把圖片轉換為PDF,所以還需要Python imaging library(PIL)類庫。 參考文章:[python實現抓取HTML,取出數據,分析,繪出PDF版圖形](http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=29525990&id=4202841) 方法二:通過調用xhtml2pdf和pisa庫實現HTML轉PDF 該方法可以實現將靜態的HTML轉換成PDF格式,其中核心代碼如下,將本地的"1.html"靜態界面轉換為"test.pdf",下面我嘗試采取的方法也是該方法。 ~~~ # -*- 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的實現代碼(包含中文)](http://www.jb51.net/article/34499.htm) 方法三:調用第三方wkhtmltopdf軟件實現 該方法并不像Python調用第三方那樣有詳細代碼,很多文章都是基于輸入命令實現。下面三篇文章都是關于wkhtmltopdf的實現。 參考文章:[HTML轉換成PDF工具:wkhtmltopdf](http://blog.csdn.net/hantiannan/article/details/4597278)? [[php]將html批量轉pdf文件的解決方案,研究有感](http://blog.csdn.net/w520hua/article/details/12573697) [wkhtmltopdf 生成帶封面、頁眉、頁腳、目錄的pdf](http://my.oschina.net/bobbob/blog/360946) ### 2.安裝PIP及介紹 此時準備介紹通過xhtml2pdf和pisa庫實現HTML轉PDF的功能,首先需要安裝PIP軟件。正如[xifeijian大神](http://blog.csdn.net/xifeijian/article/details/12576455)所說:“作為Python愛好者,如果不知道easy_install或者pip中的任何一個的話,那么......”。 easy_insall的作用和perl中的cpan,ruby中的gem類似,都提供了在線一鍵安裝模塊的傻瓜方便方式,而pip是easy_install的改進版,提供更好的提示信息,刪除package等功能。老版本的python中只有easy_install,沒有pip。常見的具體用法如下: ~~~ 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軟件** 可以在官網[http://pypi.python.org/pypi/pip#downloads](http://pypi.python.org/pypi/pip#downloads)下載,同時cd切換到PIP目錄,在通過python setup.py install安裝。而我采用的是下載pip-Win_1.7.exe進行安裝,下載地址如下: [https://sites.google.com/site/pydatalog/python/pip-for-windows](https://sites.google.com/site/pydatalog/python/pip-for-windows) **第二步:安裝PIP軟件** ![](https://box.kancloud.cn/2016-02-23_56cc2eb672ea9.jpg) ![](https://box.kancloud.cn/2016-02-23_56cc2eb684ae6.jpg) 當提示"pip and virtualenvinstalled"表示安裝成功,那怎么測試PIP安裝成功呢? **第三步:配置環境變量** 此時在cmd中輸入pip指令會提示錯誤“不是內部或外部命令”,所以需要添加path環境變量。PIP安裝完成后,會在Python安裝目錄下添加python\Scripts目錄,即在python安裝目錄的Scripts目錄下,將此目錄加入環境變量中即可!過程如下: ![](https://box.kancloud.cn/2016-02-23_56cc2eb695385.jpg) ![](https://box.kancloud.cn/2016-02-23_56cc2eb6a83ac.jpg) **第四步:使用PIP命令** 下面在CMD中使用PIP命令,“pip list outdate”列舉Python安裝庫的版本信息。 ![](https://box.kancloud.cn/2016-02-23_56cc2eb6c3290.jpg) **PIP常用的命令如下所示:?(參考[pip安裝使用詳解](http://www.ttlsa.com/python/how-to-install-and-use-pip-ttlsa/))** ~~~ 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> 證書. ~~~ ### 3.安裝xhtml2pdf和pisa軟件 通過PIP命令安裝xhtml2pdf和pisa庫。下載地址: xhtml2pdf 0.0.6:[https://pypi.python.org/pypi/xhtml2pdf/](https://pypi.python.org/pypi/xhtml2pdf/) pisa 3.0.33:[https://pypi.python.org/pypi/pisa/](https://pypi.python.org/pypi/pisa/) 然后通過下面命令安裝: pip install xhtml2pdf pip install pisa ![](https://box.kancloud.cn/2016-02-23_56cc2eb6d3969.jpg) ![](https://box.kancloud.cn/2016-02-23_56cc2eb6e8b0c.jpg) 參考: [安裝html5轉化為pdf的python庫pisa 安裝matplotlab數據轉為圖形的python庫](http://blog.csdn.net/lifeiaidajia/article/details/10827527) ### 4.失敗原因 最初沒有安裝Pisa庫時運行那段HTML轉PDF的代碼會報錯: ~~~ ? ? ? ? ? ? >>>? ? ? ? ? ? ? ? Traceback (most recent call last): ? ? ? ? ? ? ? File "G:/software/Program software/Python/python insert/HtmlToPDF.py", line 12, in <module> ? ? ? ? ? ? ? ImportError: No module named sx.pisa3 ~~~ 在安裝完成后不會提示導入庫名不存在,但此時HTML轉PDF的代碼會報錯: ~~~ ************************** 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") ~~~ ![](https://box.kancloud.cn/2016-02-23_56cc2eb70ed32.jpg) 但仍然不能解決該問題,這就導致了我無法驗證該代碼并實現后面的HTML轉換為PDF的功能。參看了很多國外的資料: [xhtml2pdf ImportError - Django 來自stackoverflow](http://stackoverflow.com/questions/22075485/xhtml2pdf-importerror-django) [https://github.com/stephenmcd/cartridge/issues/174](https://github.com/stephenmcd/cartridge/issues/174) [https://groups.google.com/forum/#!topic/xhtml2pdf/mihS51DtZkU](https://groups.google.com/forum/#!topic/xhtml2pdf/mihS51DtZkU) [http://linux.m2osw.com/xhtml2pdf-generating-error-under-1404](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學習] 專題一.函數的基礎知識](http://blog.csdn.net/eastmount/article/details/39088881) [[Python學習] 專題二.條件語句和循環語句的基礎知識](http://blog.csdn.net/eastmount/article/details/39458521) [[Python學習] 專題三.字符串的基礎知識](http://blog.csdn.net/eastmount/article/details/39599061) [[Python學習] 簡單網絡爬蟲抓取博客文章及思想介紹](http://blog.csdn.net/eastmount/article/details/39770543) [[python學習] 簡單爬取維基百科程序語言消息盒](http://blog.csdn.net/eastmount/article/details/44342559) [[python學習] 簡單爬取圖片網站圖庫中圖片](http://blog.csdn.net/eastmount/article/details/44492787) [[python知識] 爬蟲知識之BeautifulSoup庫安裝及簡單介紹](http://blog.csdn.net/eastmount/article/details/44593165) [[python+nltk] 自然語言處理簡單介紹和NLTK壞境配置及入門知識(一)](http://blog.csdn.net/eastmount/article/details/45079095) 如果你有“Reportlab Version 2.1+ is needed!”好的解決方案可告知我,小弟我感激不盡。潛心學習,研究這方面的功能,最好不是調用第三方庫,為自己加油。 最后希望文章對你有所幫助,如果有不足之處或錯誤的地方,還請海涵~ (By:Eastmount 2015-5-17 凌晨3點 [http://blog.csdn.net/eastmount/](http://blog.csdn.net/eastmount/))
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看