在瀏覽本文之前,建議先溫習一下以下博客的鏈接:
https://www.cnblogs.com/Masterpaopao/p/10061575.html
一.json
json,在爬蟲中毫無疑問扮演着極爲重要的角色:
JSON是一種輕量級的數據交換格式,適用於進行數據交互的場景。
在python中,由於把json數據轉化爲pyth內建數據類型很簡單,所以如果找到能返回json數據的url,就儘量使用選擇這種url。
我們牢牢記住這一點,
json.loads() --> 把json數據轉換爲python數據,轉換之後的數據類型是字典。
json.dumps()-->把python數據轉換爲json數據,轉換之後的數據類型是字符串,但是你在輸出中可能會看不見有引號的存在,格外注意這一點。
那麼有時候處理數據的時候,我們想要保留json的原形態,顯示其編碼,在括號內傳遞一個ensure_ascii=False的參數
二.re
①re.findall
re.findall功能:在字符串中找到正則表達式所匹配的所有子串,並返回一個列表,如果沒有找到匹配的,則返回空列表。
總結:re.findall的輸出是列表。
常用正則表達式的方法:
一些常見的匹配符號:
. :匹配所有字符除換行符“\n”
"\d":匹配任意的數字
"\w":匹配數字和字母以及下劃線
"\s":匹配空白符號,包括相關製表符
匹配貪婪與非貪婪:
②(.*?): 匹配出來括號內的內容
③([\s\S]*?):匹配出來括號內的內容
針對①和②的內容寫出一個代碼論證:
['123qwe456!@#$']
我們可以對比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來實戰一個簡單的爬蟲,幫助大家更好的理解: