使用BeautifulSoup过滤<script>标记内的JSON数据时JSON解析错误

时间:2019-09-06 22:57:16

标签: python json python-3.x beautifulsoup python-requests

我已经在脚本标签(例如:

)中收集了JSON数据。

<script>window.__APOLLO_STATE__ = {...some JSON data here...}<\script>

但是,在解析时,它显示以下错误消息:

第1行解析错误: ... null,“ meterPost({\” postId \“:\” 40d2d0d ----------------------- ^ 期望'EOF','}',':',',',']'处于'undefined'

第一步是使用请求和BeautifulSoup收集页面数据:

headers = requests.utils.default_headers()
headers.update({
            'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0',
        })
link = "https://medium.com/@mvmurthy/full-stack-hello-world-voting-ethereum-dapp-tutorial-part-1-40d2d0d807c2"
request_link = requests.get(link, headers=headers)
request_content = BeautifulSoup(request_link.content,'html.parser')

现在,当我从Jupyter Notebook的window.__APOLLO_STATE__的输出中直接复制request_content的值并将其粘贴到在线json-viewer时,它可以正常工作。但是,我不能那样工作,对吗?我得收起来因此,我尝试使用以下代码来做到这一点:

def json_response(content):
    for tag in content.find_all('script'):
         if 'window.__APOLLO_STATE__' in tag.text:
              data = tag.text
    return data[26:]

json_data = json.loads(json_response(request_content))

但是,json_data的值在联机JSON查看器中不起作用,并显示解析错误。这里缺少什么?以及如何解决该问题以便可以将其保存在JSON文件中?

0 个答案:

没有答案