Разбор конкретных значений из объекта JSON в BeautifulSoup - PullRequest
2 голосов
/ 07 апреля 2019
import urllib
from urllib import request
from bs4 import BeautifulSoup

url = 'http://mygene.info/v3/query?q=symbol:CDK2&species:human&fields=name,symbol,entrezgene'
html = request.urlopen(url).read()
soup = BeautifulSoup(html)

Выход:

<html><body><p>{
  "max_score": 88.84169,
  "took": 6,
  "total": 244,
  "hits": [
    {
      "_id": "1017",
      "_score": 88.84169,
      "entrezgene": "1017",
      "name": "cyclin dependent kinase 2",
      "symbol": "CDK2"
    },
    {
      "_id": "12566",
      "_score": 73.8155,
      "entrezgene": "12566",
      "name": "cyclin-dependent kinase 2",
      "symbol": "Cdk2"
    },
    {
      "_id": "362817",
      "_score": 62.09322,
      "entrezgene": "362817",
      "name": "cyclin dependent kinase 2",
      "symbol": "Cdk2"
    }
  ]
}</p></body></html>

Цель : Из этого вывода я бы хотел разобрать значения entrezgene, name и symbol

Вопрос : Как мне добиться этого?

Справка: Я попытался https://www.crummy.com/software/BeautifulSoup/bs4/doc/#searching-by-css-class и Python BeautifulSoup извлечь текст между элементами , чтобы назвать пару, но я не смог найти то, что я ищу

1 Ответ

3 голосов
/ 07 апреля 2019

Вы можете получить text в формате json .Затем используйте json.loads () , чтобы преобразовать его в словарь .

from urllib import request
from bs4 import BeautifulSoup
import json
url = 'http://mygene.info/v3/query?q=symbol:CDK2&species:human&fields=name,symbol,entrezgene'
html = request.urlopen(url).read()
soup = BeautifulSoup(html,'html.parser')
site_json=json.loads(soup.text)
#printing for entrezgene, do the same for name and symbol
print([d.get('entrezgene') for d in site_json['hits'] if d.get('entrezgene')])

Вывод:

['1017', '12566', '362817', '100117828', '109992509', '100981695', '100925631']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...