【问题标题】:Python Requests print HTML response variablePython 请求打印 HTML 响应变量
【发布时间】:2022-01-23 11:51:01
【问题描述】:

我使用下面的脚本从服务器获取临时代码

import requests
from bs4 import BeautifulSoup
payload{
'username':'demo',
'password':'demo'
}
with requests.session() as s:
    r= s.post(192.13.11.100,data=payload)
print(r.text)

脚本没有问题,

现在,我得到了预期的输出。

<html>
<body>
<script>
var session_key='d2e08508d3';
</script>
<script>
var temporary_data='01';
</script>
</body>
</html>

现在我想从 html 输出中获取 session_key。

请告诉我如何获取 html 中的变量

【问题讨论】:

  • 你试过什么?你检查过像Beautiful Soup 这样的库吗?
  • 您可以使用 r"session_key=['|\"]{1}([0-9a-zA-Z]{1,})['|\"]{1} 尝试正则表达式" 在 html 字符串上并检索组 1
  • @benjababe,虽然正则表达式可能在一些非常有限的情况下工作,但它是better not to use regex to parse HTML。但是你可以使用正则表达式,一旦从标签中提取文本,然后获取特定的值。

标签: python html beautifulsoup python-requests python-requests-html


【解决方案1】:

根据这个答案:Get JS var value in HTML source using BeautifulSoup in Python

你可以做到的:

from bs4 import BeautifulSoup
from slimit import ast
from slimit.parser import Parser
from slimit.visitors import nodevisitor

data = """<html>
<body>
<script>
var session_key='d2e08508d3';
</script>
<script>
var temporary_data='01';
</script>
</body>
</html>"""

soup = BeautifulSoup(data, "html.parser")
script = soup.find("script", text=lambda text: text and "var session_key" in text)
parser = Parser()
tree = parser.parse(script.text)
for node in nodevisitor.visit(tree):
    if isinstance(node, ast.VarDecl) and node.identifier.value == 'session_key':
        print(node.initializer.value)

请为他所做的工作奖励这个答案:https://stackoverflow.com/a/41020794/17077329

【讨论】:

    【解决方案2】:

    您可以使用 RegEx 解析它:

    import re
    regex = re.compile(".*?session_key\=\'(\S+)\'")
    session_key = regex.search(r.text).group(1)
    

    您可以在这里进一步测试正则表达式:RegExr

    您可以在此处找到有关 search() 方法的一些文档:re docs

    【讨论】:

      【解决方案3】:

      试试这个:

      import re
      from bs4 import BeautifulSoup
      
      test_html = f"""
      <html>
      <body>
      <script>
      var session_key='d2e08508d3';
      </script>
      <script>
      var temporary_data='01';
      </script>
      </body>
      </html>
      """
      soup = BeautifulSoup(test_html)
      session_key = re.findall(r"session_key='(.*?)'", soup.find("script").text)[0]
      print(session_key)
      

      【讨论】:

        猜你喜欢
        • 2018-10-14
        • 1970-01-01
        • 2017-07-03
        • 2015-01-26
        • 1970-01-01
        • 2013-04-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多