Получите доступ к словарю внутри тега скрипта, используя красивый суп - PullRequest
0 голосов
/ 10 января 2019
from urllib.request import urlopen
from bs4 import BeautifulSoup
import lxml
import time #to add delay

url ='https://www.fundoodata.com/companies-detail/Banctec-Tps-India-Pvt- 
Ltd/48600.html' #from where i need data
html = urlopen(url)
soup = BeautifulSoup(html, 'lxml')
type(soup)
links= soup.find('script')
print(links)

это дает ->

<script type="application/ld+json">
    {
      "@context": "https://schema.org",
      "@type": "Organization",
        "address": {
        "@type": "PostalAddress",
        "addressLocality": "3rd Floor, Sharda Arcade, Pune Satara Road, 
Bibvewadi",
        "postalCode": "411016 ",
        "streetAddress": " Pune/Maharashtra "
      },
      "name": "Banctec Tps India Pvt Ltd",
      "telephone": "(020) "
    }
    </script>

Мне нужно распечатать адресный словарь, который находится внутри словаря, мне нужно получить доступ к addressLocality, почтовому коду, streetaddress. пробовал разные методы и не получилось.

Ответы [ 3 ]

0 голосов
/ 10 января 2019

Используйте свойство string, чтобы получить текст элемента, затем вы можете проанализировать его как JSON.

links_dict = json.loads(links.string)
address = links_dict['address']
0 голосов
/ 10 января 2019

Строка данных в формате JSON в Python, десериализовать это с помощью json.loads ()

import json
links= soup.find('script')
print(links)

после этого

address = json.loads(links.text)['address']
print(address)
0 голосов
/ 10 января 2019

Используйте пакет json:

from urllib.request import urlopen
from bs4 import BeautifulSoup
import lxml
import time #to add dealay
import json

url ='https://www.fundoodata.com/companies-detail/Banctec-Tps-India-Pvt-Ltd/48600.html' #from where i need data
html = urlopen(url)
soup = BeautifulSoup(html, 'lxml')
type(soup)
links= soup.find_all('script')
print(links)


for script in links:
    if '@context' in script.text:
        jsonStr = script.string
        jsonObj = json.loads(jsonStr)

print (jsonObj['address'])

Выход:

print (jsonObj['address'])
{'@type': 'PostalAddress', 'addressLocality': '3rd Floor, Sharda Arcade, Pune Satara Road, Bibvewadi', 'postalCode': '411016 ', 'streetAddress': ' Pune/Maharashtra '}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...