【发布时间】:2020-12-04 06:43:03
【问题描述】:
我试图在 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])
我需要正则表达式方面的帮助才能单独获取令牌值。
【问题讨论】:
-
我建议使用第三方库来提取这样的内容,而不是构建自己的正则表达式:pypi.org/project/beautifulsoup4
-
如果您尝试解析 HTML,那么您应该使用 HTML 解析器而不是依赖正则表达式。它有点冗长,但更健壮。 Python 在
html.parser模块中内置了一个简单的解析器,但 BeautifulSoup 很受推崇。