1. 程式人生 > >python爬蟲第三天

python爬蟲第三天

匹配 size 子類 實例 基礎知識 403錯誤 spa 進行 程序

DebugLog實戰 有時候我們需要在程序運行時,一邊運行一邊打印調試日誌。此時需要開啟DebugLog。 如何開啟: 首先將debuglevel設置為1,然後用urllib.request.build_opener()創建自定義對象opener將debuglevel作為參數傳入接著用urllib.request.install_opener()創建全局默認對象opener,進行後續操作。 import urllib.request #復制區----- httphd=urllib.request.HTTPHandler(debuglevel=1) httpshd=urllib.request.HTTPSHandler(debuglevel=1) opener=urllib.request.build_opener(httphd,httpshd) urllib.request.install_opener(opener) #-----復制區 data=urllib.request.urlopen("http://edu.51cto.com") 這樣就可以邊執行程序邊打印調試Log日誌。
異常處理神器——URLError實戰 如何合理的處理異常:介紹兩個類 URLError和他的一個子類HTTPError 實例1: import urllib.request import urllib.error try: urllib.request.urlopen("http://blog.csdn.net") except urllib.error.URLError as e: #這裏csdn禁止對文章爬取,所以沒有模擬瀏覽爬會出現403錯誤 #由於觸發了HTTPError產生的URLError異常,這裏使用HTTPError替換亦可以,
#但是HTTPError不能處理:連接不上服務器,遠程url不存在、無網絡的異常 print(e.code) print(e.reason) 補充知識:狀態碼 200----一切正常 301----重定向到新的url,永久性 302----重定向到臨時的url,非永久性 304----請求的資源未更新 400----非法請求 401----請求未經授權 403----禁止訪問 404----沒有找到對應頁面 500----服務器內部出現錯誤 501----服務器不支持實現請求所需要的功能 實際上我們處理異常不知道使用HTTPError能不能處理。我們可以進行優化,先讓HTTPError處理,不行再讓URLError處理
代碼如下: try: urllib.request.urlopen("http://blog.baidusss.net")#不存在的網址 except urllib.error.HTTPError as e: print(e.code) print(e.reason) except urllib.error.URLError as e: print(e.reason) 代碼再改進,整合一下:不管何種原因都可以解決 try: urllib.request.urlopen("http://blog.csdn.net") except urllib.error.URLError as e: if hasattr(e,"code"): print(e.code) if hasattr(e,"reason"): print(e.reason) 正則表達式入門 正則表達式就是描述字符串排列的一套規則。比如電子郵件、手機號的字符都是滿足一定的規則的,我們可以用正則來表達他們的格式。在python中我們用re模塊來實現正則。 基礎知識: NO1 、原子:正則的基本組成單位,每個正則中至少包含一個原子。 原子的類型: 1:普通字符 import re pattern="yue" string="http://yum.iqianyue.com" result1=re.search(pattern,string) print(result1) #結果:<_sre.SRE_Match object; span=(16, 19), match=‘yue‘> 這裏我們匹配兩個字符串,成功匹配到了字符結果“yue” 2:非打印字符 指在一些字符串中用於格式控制的符號,如:
符號 含義
\n 用於匹配一個換行符
\t 用於匹配一個制表符
import re pattern="\n" string=‘‘‘http://yum.iqianyue.com http://baidu.com‘‘‘ result=re.search(pattern,string) print(result) 3:通用字符 一個原子可以匹配一類字符
符號 含義
\w 匹配任意一個字母、數字或下劃線
\W 匹配除字母、下劃線、數字以外的任意字符
\d 匹配任意一個十進制數
\D 匹配十進制以外的任意一個其他字符
\s 匹配任意一個空白字符
\S 匹配除空白字符以外的任意一個其他字符
pattern="\w\dpython\w" string="abcdfphp345python_py" result=re.search(pattern,string) print(result) #結果<_sre.SRE_Match object; span=(9, 18), match=‘45python_‘> 4:原子表 使用原子表定義一組地位相等的原子,匹配是會取原子表中任意一個原子進行匹配,在Python中原子表用[]表示 如[xyz]對應源字符是“xpython”如果用re.search匹配,就可以匹配到“xpy”,因為只要py的前一位是xyz的任一個原子就可以匹配成功 pattern1="\w\dpython[xyz]\w" string="abcdfphp345pythony_py" result=re.search(pattern1,string) print(result) #結果:<_sre.SRE_Match object; span=(9, 19), match=‘45pythony_‘> 此文是我在學習《精通Python網絡爬蟲》(韋瑋著)的總結,純手打。

python爬蟲第三天