在瀏覽本文以前,建議先溫習一下如下博客的連接:html
https://www.cnblogs.com/Masterpaopao/p/10061575.htmlpython
一.json正則表達式
json,在爬蟲中毫無疑問扮演着極爲重要的角色:json
JSON是一種輕量級的數據交換格式,適用於進行數據交互的場景。函數
在python中,因爲把json數據轉化爲pyth內建數據類型很簡單,因此若是找到能返回json數據的url,就儘可能使用選擇這種url。編碼
咱們緊緊記住這一點,url
json.loads() --> 把json數據轉換爲python數據,轉換以後的數據類型是字典。spa
json.dumps()-->把python數據轉換爲json數據,轉換以後的數據類型是字符串,可是你在輸出中可能會看不見有引號的存在,格外注意這一點。code
那麼有時候處理數據的時候,咱們想要保留json的原形態,顯示其編碼,在括號內傳遞一個ensure_ascii=False的參數orm
二.re
①re.findall
re.findall功能:在字符串中找到正則表達式所匹配的全部子串,並返回一個列表,若是沒有找到匹配的,則返回空列表。
總結:re.findall的輸出是列表。
經常使用正則表達式的方法:
一些常見的匹配符號:
. :匹配全部字符除換行符「\n」
"\d":匹配任意的數字
"\w":匹配數字和字母以及下劃線
"\s":匹配空白符號,包括相關製表符
匹配貪婪與非貪婪:
②(.*?): 匹配出來括號內的內容
③([\s\S]*?):匹配出來括號內的內容
針對①和②的內容寫出一個代碼論證:
咱們能夠對比b和c的輸出結果,首先,這二者的輸出結果都是列表,這是毫無疑問的,這個須要牢牢記住。
而後就是括號和無括號的區別,無括號的時候匹配出來全部,
有括號的時候,括號兩旁的字符成了定位字符,只匹配出來括號內的內容。
②re.sub
re.sub用於替換字符串中的匹配項,是對字符串的指定部分進行正則替換操做的函數。公式以下:
re.sub(pattern, repl, string, count=0, flags=0)
pattern是字符串中要更換的部分,repl是更換的內容,string是原始字符串。
count是須要更換的次數,按順序更換。其中,count=0是默認替換所有,而不是替換0個。
flags是可選的,表示匹配模式,好比忽略大小寫,多行模式等
只須要注意一下輸出的結果是字符串,具體的請參考我開頭貼的博客,具體我就再也不復述了。
正則使用的注意點:
1.re.findall("a(.*?)b","str")可以返回括號中的內容,括號先後的內容起到定位和過濾的效果。
2.原始字符串,待匹配字符串中有反斜槓的時候,使用r可以忽視反斜槓帶來的轉義的效果。
3.點號默認匹配不到「'\n」,"\s"可以匹配空白字符,不單單包含空格,還有「\t」。
那麼,我將結合json和re來實戰一個簡單的爬蟲,幫助你們更好的理解: