存在多个json时,从<script>标记中的json中提取文本

时间:2019-02-04 15:03:47

标签: python web-scraping beautifulsoup

我正在尝试从 https:// www中提取评级。 trueorfiction.com/are-americans-annual-healthcare-undocumented/ ,以便从HTML代码中提取“ ratingValue”和“ alternateName”字段:

  
 

我尝试使用以下代码来做到这一点:

  import json
从bs4导入BeautifulSoup

slink ='https://www.truthorfiction.com/are-americans-annually-healthcare-undocumented/'
响应= http.request('GET',slink)
汤= BeautifulSoup(response.data)
tmp = json.loads(soup.find('script',type ='application / ld + json')。text)
 

但是,tmp而是显示了我想提取的评级之前的'application / ld + json'项目的字典,我想知道如何循环或循环到脚本的相关部分,评分已存储。

2 个答案:

答案 0 :(得分:0)

您需要使用键访问元素。

rating_value = tmp['reviewRating']['ratingValue'] # -1
alternate_name = tmp['reviewRating']['alternateName'] # 'True'

review_rating = tmp['reviewRating']
rating_value = review_rating['ratingValue'] # -1
alternate_name = review_rating['alternateName'] # 'True'

答案 1 :(得分:0)

它有2个.clock(),您可以从<script type=application/ld+json>中选择第二个索引

find_all()

或循环并搜索是否包含字符串

tmp = json.loads(soup.find_all('script', type='application/ld+json')[1].text)