????????使用urllib庫可以模擬瀏覽器發(fā)送請求獲得服務器返回的數(shù)據(jù)顽爹,下一步就是把有用的數(shù)據(jù)提取出來纤泵。數(shù)據(jù)分為兩種形式結構化和非結構化。
????????非結構化數(shù)據(jù)一般指的是文本和HTML镜粤。文本中的內容特別雜捏题,比如有電話號碼,郵箱等信息肉渴,只能使用正則表達式進行提裙;HTML可以使用CSS選擇器同规、xpath循狰、正則表達式進行提取。
? ? ? ? 結構化數(shù)據(jù)一般指的是JSON和XML券勺。Json可以使用JsonPath處理晤揣,也可以轉化成python對象。XML可以轉化成python對象朱灿,或者使用CSS選擇器、xpath钠四、正則表達式進行提取盗扒。
? ? ? ? 這節(jié)主要研究一下正則表達式的使用方法和re模塊的常用方法。
match():
? ? ????從字符串起始位匹配缀去,如果匹配則返回第一個次提取的內容侣灶,如果不匹配則返回None。
? ? ? ? match中可以設置起始位置和結束位置咏雌。
? ? ? ? compile()中可以設置一些參數(shù)寨典,re.I 表示忽略大小寫,re.S表示全文匹配
????????除了group()還有一個方法span(),返回的是字符下標浴鸿。
? ? ? ? 切記井氢,如果match對象為None時,使用group和span等方法會拋出異常岳链,使用時進行非空判斷花竞。
search():
? ? ????從字符串任意位匹配,如果匹配則返回第一個次提取的內容宠页,如果不匹配則返回None左胞。
?????????search中可以設置起始位置和結束位置。
findall():
? ? ????從字符串任意位匹配俭嘁,如果匹配則返回所有提取的內容躺枕,如果不匹配則返回[]。
????????findall中可以設置起始位置和結束位置供填。
finditer():
????????從字符串任意位匹配拐云,如果匹配則返回所有提取的內容組成的迭代對象,如果不匹配也返回一個迭代對象近她。
????????finditer中可以設置起始位置和結束位置叉瘩。
? ? ? ? finditer返回的迭代對象可以理解為match對象的集合,通過for遍歷的方式粘捎,可以獲取match薇缅,group方法可以獲取匹配的值。
split():
????????從字符串任意位匹配攒磨,如果匹配泳桦,則以匹配的內容為分割點,返回切分后的list數(shù)據(jù)娩缰。
sub():
????????從字符串任意位匹配,如果匹配浮毯,則替換匹配的內容完疫,返回替換后的字符串。
? ??????從字符串任意位匹配亲轨,如果匹配趋惨,則交換匹配的內容的位置,返回處理后的字符串惦蚊。