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...