python - python正则表达式从页面获取令牌
问题描述
我试图在 Python 中自动化一些事情,而不是一次又一次地手动做同样的事情。目前,我被困在一个名为 dnsdumpster.com 的网站上找到“csrfmiddlewaretoken”。我已经为它编写了一个正则表达式,但它返回包含“csrfmiddlewaretoken”的整个标签。我只对令牌感兴趣(它在 HTML 标记的“值”参数内)。这是我的代码:
import requests
import re
headers = {
'Host' : 'dnsdumpster.com',
'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:80.0) Gecko/20100101 Firefox/80.0',
'Accept' : 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Language' : 'en-US,en;q=0.5',
'Accept-Encoding' : 'gzip, deflate',
'DNT' : '1',
'Upgrade-Insecure-Requests' : '1',
'Connection' : 'close'
}
proxies = {
'http' : 'http://127.0.0.1:8080'
}
with requests.Session() as s:
url = 'https://dnsdumpster.com'
response = s.get(url, headers=headers, proxies=proxies)
response.encoding = 'utf-8' # Optional: requests infers this internally
body = response.text
csrfmiddlewaretoken = re.search('name="csrfmiddlewaretoken" value="[0-9a-zA-z]+', body)
print(csrfmiddlewaretoken)
# Embarassing way of getting the token
print(body[2417:2481])
我需要正则表达式的帮助才能单独获取令牌值。
解决方案
使用美汤,首选方法:
from bs4 import BeautifulSoup
soup = BeautifulSoup(body, 'html.parser') #body is your response.text or your HTML string
csrf = soup.find("meta", attrs={'name': "csrfmiddlewaretoken"})
token = csrf["content"] if csrf else None
使用正则表达式:
csrfmiddlewaretoken = re.search('name="csrfmiddlewaretoken" value="[0-9a-zA-z]+', body)
token = None
if csrfmiddlewaretoken:
token = csrfmiddlewaretoken.group().split(' value="')[-1]
在这两种方法中,token
变量都将包含meta
带有name=csrfmiddlewaretoken
...
推荐阅读
- node.js - 节点 events.js:292 throw er; // 未处理的“错误”事件
- c# - C# 加载图像导致内存不足异常(我使用的是 .tif 或 .tiff)
- javascript - 如何将 div 链接到 JavaScript 生成的 HTML 中的一个容器?
- php - 从php中的多维数组中提取数据
- apache-kafka - 为什么卡夫卡仍然收到“过期”的消息?
- r - 合并两个长度不等的数据帧并用 NA 填充缺失值
- delphi - 如何使用 TNetHTTPClient 或 TNetHTTPRequest 从 URL 获取图片并将其放在 TImage 中?
- google-apps-script - 谷歌应用脚本在谷歌幻灯片中创建链接
- react-native - 反应原生视图镜头表面 gl-react-native
- kerberos - 来自 TGS-REP 的 KDC 验证