正則表達式取值方法歸納


如,某站點接口請求返回值如下:

{"Code":0,"Msg":"獲取成功","Data":
  {"Total":1,"DataList":
    [{"Id":11564XXXX4368,
     "TopIsAgent":false,
     "IsAnchor":true,
     "FirstTwitterId":1156XXX368,
     "FirstTwitterName":"貝克漢姆",
     "FirstTwitterRemark":"小貝960",
      "FirstTwitterTelephone":"1867XXXX640",
      "IsTwitter":true,
      "HeadImgUrl":"https://wx.qlogo.cn/mmopen/vi_32/DYAIOgqXXXXyXXX2ov4UzAxA/132",
      "NickName":"貝克漢姆",
      "Remark":"小貝960",
      "WxRemark":null,
      "Telephone":"1867XXXX640",
      "LastBuyTime":"2021-03-06 11:25:38",
      "Source":1,
      "MemberSourceStr":"小程序授權登錄",
      "TotalPoints":185200,
      "TotalFee":10030866.84,
      "TotalFeeNum":292,
      "SingleFee":34352.283698630136986301369863,
      "CustomerType":"會員",
    "Tags":[{"Id":11668,"Name":"規格","TagType":2}],
      "SystemTagType":"成交客戶",
      "Cards":[{"Id":987,"Name":"會員卡測試會員卡測"}],
      "CustomerTime":"2019-07-25 13:59:28","IsExistBlackList":false}]},
      "TraceFlag":null,"ErrorDetail":null,"Pname":null}

 

案例1:直取法取"NickName"后的值”貝克漢姆“,但是輸出會帶“ ”雙引號,value = eval(value)可去掉引號

value = re.findall('"NickName":(.*?),', response, re.S)[0]

或者直接在代碼中把引號去除

value = re.findall('"NickName":”(.*?)“,', response, re.S)[0]

 

案列2:前后匹配法取"NickName"后的值”貝克漢姆“,經觀察,”貝克漢姆“值前面為FirstTwitterName":"“,后面為"FirstTwitterRemark,則表達式可寫成如下

value = re.findall('FirstTwitterName":"(.+?)","FirstTwitterRemark', response, re.S)[0]

同理,也可以取出HeadImgUrl參值網址中的任意一段內容,如取”wx.qlogo.cn“,寫法如下

value = re.findall("https://(.+?)/mmopen", response, re.S)[0]

 爬蟲中經常要取”href“里的內容,也可以通過案例2中的前后匹配法取值,如取下圖html內的href內容,但是要注意中間的空格、換行字符

 

 這里面我們看不到任何空格和換行字符,但如果先取出class=”tal“內的數據,就可以看的出來了,寫法如下

value = re.findall('<td class="tal" id="">(.+?)</td', response, re.S)

 

 返回內容,可見href前有\r\n,還有空格等數據,所以基於這些數據,把正則再完善一下

value = re.findall('<td class="tal" id=""> \r\n\r\n\t\r\n\r\n\t<h3><a href="(.+?)" target=', response, re.S)

如此,便取出了想要的數據

 

案例3:如果返回值內即包含中文又包含數字,我們只需要數字或者中文呢?如"FirstTwitterRemark":"小貝960",取出960或者小貝

首先,取出數字

value = re.findall('"FirstTwitterRemark":"(.*?)",', response, re.S)[0]
num = re.sub(r'\D', "", value)
print(value)
print(num)

 

 

 然后,取出中文

value = re.findall('"FirstTwitterRemark":"(.*?)",', response, re.S)[0]
zhong = re.findall('[\u4e00-\u9fa5]+', value)
print(value)
print(zhong[0])

 

 

 如上,取中間,是通過寫入漢字的unicode范圍來取值,那么替換成下表格內諸如數字和字母的范圍,同理也可以取出對應的內容

 

未完待續。。。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM