alecxe..
5
这总体上是一个有趣的问题 - 从HTML代码中的JavaScript代码中提取内容.
基本上,这意味着您首先需要进行HTML解析 - 找到所需的script元素并获取其文本.然后,第二步是从realty对象内部提取所需的数字.
如果您要使用正则表达式方法,您实际上可以重复使用正则表达式来定位所需script元素并提取所需变量(BeautifulSoup 允许应用正则表达式模式来查找/过滤元素):
import re
from bs4 import BeautifulSoup
html = """
window.realty = {"user_id":4243456};
pattern = re.compile(r'\{"user_id"\s*:\s*(\d+)\}')
soup = BeautifulSoup(html, "html.parser")
script = soup.find("script", text=pattern)
print(pattern.search(script.text).group(1))
# prints 4243456
我们\{"user_id"\s*:\s*(\d+)\}在这里分解:
反斜杠用于转义在正则表达式语法中具有特殊含义的字符
\s*意味着 - 零个或多个空格字符(把它放在那里以防你:在对象定义中有额外的空格)
\d+ 表示"一个或多个数字"
括号定义一个捕获组 - 这是我们将字符串的特定部分提取到一个组中的一种方式,然后我们通过该组访问.group(1)
请注意,\d+@ Evyatar建议的简单表达式过于宽泛,您可能很容易得到误报.
以下是一些类似的主题,其中包含一些其他选项: