Python 網頁轉義字元及正則全文匹配

2021-09-20 05:54:43 字數 1846 閱讀 1013

header = 

def rget():

response = session.get("", headers=header)

target_str = response.text

print(target_str)

rget()

在給知乎的登入頁面發請求後,列印返回結果(內容太多,只返回一小部分):

"token":,"account":
發現有很多字元是轉義的,登入需要用到的xsrf欄位也在這裡面,這樣做正則匹配就很麻煩。

解決的辦法是將html進行轉義:

import html

target_str = html.unescape(response.text)

就能夠得到正常的返回資訊了:

"token":,
匹配xsrf的值 (為了方便測試,只將一小部分值提取出來做匹配):

tokens = '"token":,:'

matchs = re.search(r'xsrf[:"\w-]+', tokens)

if matchs:

print(matchs.group(0))

else:

print("未匹配")

得到輸出結果為:

xsrf":"9febf0fd-7c47-4695-93b6-f670e518d920"
然後再借用replace將引號替換,然後用split將值用冒號分開:

import re

tokens = '"token":,:'

matchs = re.search(r'xsrf[:"\w-]+', tokens)

nstr = matchs.group(0).replace("\"", "").split(":")

finall = nstr[1]

print(finall)

就得到了我需要的xsrf:

9febf0fd-7c47-4695-93b6-f670e518d920
xudid的提取也是如此,這兩個值在知乎登入的時候是需要攜帶的,所以要提取:

import re

tokens = '"token":,:'

matchs = re.search(r'xudid[:"\w-]+=', tokens)

nstr = matchs.group(0).replace("\"", "").split(":")

finall = nstr[1]

print(finall)

acdsf5lmag2pti2gmwqtl0cwh88g51bogzc=
上面的正則可以匹配到字串了,如果正常登入的話要將請求返回的內容文字進行匹配的,也就是匹配response.text,**是否就是

matchs = re.search(r'xudid[:"\w-]+=', response.text)
坑就在這裡!

re預設匹配的是單行字串,而response.text的返回值雖然是乙個html頁面的構成,但是它是分行的,第一行是html頭不是我想要的整個文字進行匹配。

re是支援整個文字匹配的,需要在正則**加上引數re.dotall即可:

matchs = re.search(r'xudid[:"\w-]+=', response.text, re.dotall)
就可以對整個返回的文字進行匹配了

Python轉義字元及用法

在前面的章節中,我們曾經簡單學習過轉義字元,所謂轉義,可以理解為 採用某些方式暫時取消該字元本來的含義 這裡的 某種方式 指的就是在指定字元前新增反斜槓 以此來表示對該字元進行轉義。舉個例子,在 python 中單引號 或雙引號 是有特殊作用的,它們常作為字元 或字串 的標識 只要資料用引號括起來,...

Python轉義字元

在需要在字元中使用特殊字元時,python 用反斜槓 轉義字元。如下表 原始字串 有時我們並不想讓轉義字元生效,我們只想顯示字串原來的意思,這就要用r和 r來定義原始字串。如 print r t r 實際輸出為 t r 轉義字元 描述 在行尾時 續行符 反斜槓符號 單引號 雙引號 a 響鈴 b 退格...

Python轉義字元

在需要在字元中使用特殊字元時,python用反斜槓 轉義字元。如下表 原始字串 有時我們並不想讓轉義字元生效,我們只想顯示字串原來的意思,這就要用r和r來定義原始字串。如 print r t r 實際輸出為 t r 轉義字元 描述 在行尾時 續行符 反斜槓符號 單引號 雙引號 a響鈴 b退格 bac...