我正在使用 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 秒,这增加了我的脚本的整体执行时间。
尝试使用 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))