python爬蟲第三天
阿新 • • 發佈:2019-01-27
匹配 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:非打印字符
指在一些字符串中用於格式控制的符號,如:
import re
pattern="\n"
string=‘‘‘http://yum.iqianyue.com
http://baidu.com‘‘‘
result=re.search(pattern,string)
print(result)
3:通用字符
一個原子可以匹配一類字符
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網絡爬蟲》(韋瑋著)的總結,純手打。
符號 | 含義 |
\n | 用於匹配一個換行符 |
\t | 用於匹配一個制表符 |
符號 | 含義 |
\w | 匹配任意一個字母、數字或下劃線 |
\W | 匹配除字母、下劃線、數字以外的任意字符 |
\d | 匹配任意一個十進制數 |
\D | 匹配十進制以外的任意一個其他字符 |
\s | 匹配任意一個空白字符 |
\S | 匹配除空白字符以外的任意一個其他字符 |
python爬蟲第三天