我正在尝试从此处的脚本标签中提取campaign_hearts和postal_code(代码太长,无法发布完整代码)。
我可以通过以下代码确定我需要的脚本:
<script>
...
"campaign_hearts":4817,"social_share_total":11242,"social_share_last_update":"2020-01-17T10:51:22-06:00","location":{"city":"Los Angeles, CA","country":"US","postal_code":"90012"},"is_partner":false,"partner":{},"is_team":true,"team":{"name":"Team STEVENS NATION","team_pic_url":"https://d2g8igdw686xgo.cloudfront.net
...
我可以通过以下代码确定我需要的脚本:
from bs4 import BeautifulSoup
import numpy as np
import pandas as pd
from time import sleep
import requests
import re
import json
page = requests.get("https://www.gofundme.com/f/eric-stevens-care-trust")
soup = BeautifulSoup(page.content, 'html.parser')
all_scripts = soup.find_all('script')
all_scripts[0]
不过,我不知道如何提取我想要的值。(我非常新手 Python)。 这个线程为类似的问题推荐了以下解决方案(根据我正在使用的 html 进行了编辑)。
data = json.loads(all_scripts[0].get_text()[27:])
然而,运行这个脚本会产生一个错误:JSONDecodeError: Expecting value: line 1 column 1 (char 0).
既然我已经确定了正确的脚本,我该怎么做来提取我需要的值呢?我也尝试过在这里列出的解决方案,但无法导入解析器(Parser)。
re.findall()[0]
不就是re.search()
吗? - AMCre.search(r'window\.initialState = ({.*?});', txt).group(1)
或者re.search(..)[1]
。这只是个人口味的问题。 - Andrej Kesely.findall()
会获取每一个匹配项,无论它是否稍后被丢弃,因此有些不同。 - AMC