如何在Python中使用BeautifulSoup有效地从脚本标签中提取数据

问题描述 投票:0回答:1

我正在使用 Python 从如下 URL 的标签中提取

data
:

response = session.get("example.com")

soup = BeautifulSoup(response.content,features='html.parser')
all_scripts = soup.find_all('script')
desiredScript = all_scripts[2].get_text()
desiredData = json.loads(re.match(r'data = ({.*?});', desiredScript)[0]) 

desiredScript
看起来像下面这样

$(document).ready(function() {
    try {
      var data = {.....}
        }.....
})

问题是,由于脚本

desiredScript
非常大(iteslf 中的
var data
非常大),因此以下操作需要大约 9 秒才能完成:

desiredData = json.loads(re.match(r'data = ({.*?});', desiredScript)[0]) 

如何减少从使用

data
提取的
script
中查找变量
BeautifulSoup
的执行时间?有没有更好更快的方法来做到这一点?

也许不使用

re
库,而是使用其他可以更快地从
data
找到
desiredScript
的东西?

使用 re.match() 需要 9 秒,这增加了我的脚本的整体执行时间。

python beautifulsoup python-re
1个回答
0
投票

尝试使用 re.search(),而不是使用 re.match(),因为它在大字符串上可能会变慢。这样,就不需要从字符串的开头开始匹配:

import re
import json

match = re.search(r'var data = ({.*?});', desiredScript, re.DOTALL)
if match:
    desiredData = json.loads(match.group(1))
© www.soinside.com 2019 - 2024. All rights reserved.