0
votes

Accéder à un dictionnaire à l'intérieur d'une étiquette de script en utilisant une belle soupe

<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>

3 commentaires

Qu'est-ce que vous avez essayé exactement et qu'est-ce qui a échoué?


Il devrait être soupe.find ("script"). Chaîne


Je suis nouveau à Python, puisque c'était un dict, j'ai essayé de faire une liste alors accédant à des valeurs clés, j'ai essayé d'accéder directement mais cela n'a pas fonctionné


4 Réponses :


1
votes

Utilisez le package JSON:

print (jsonObj['address'])
{'@type': 'PostalAddress', 'addressLocality': '3rd Floor, Sharda Arcade, Pune Satara Road, Bibvewadi', 'postalCode': '411016 ', 'streetAddress': ' Pune/Maharashtra '}


0 commentaires

1
votes

Utilisez la propriété string code> pour obtenir le texte de l'élément, vous pouvez l'analyser comme JSON.

links_dict = json.loads(links.string)
address = links_dict['address']


3 commentaires

Hey Barmar, merci cela a fonctionné. La variable d'adresse est-elle un dictionnaire maintenant?


Oui, json.loads () charge l'objet entier dans le dictionnaire.


Vous pouvez faire print (links_dict) pour voir le tout.



3
votes

chaîne de données formatées JSON en Python, désérialisez celle avec json.loads () xxx

après cela, xxx


0 commentaires

0
votes

Les balises de script souvent souvent contiennent beaucoup de fluff JavaScript. Vous pouvez utiliser RegEx pour isoler le dictionnaire:

scripts = s.findAll('script')
    for script in scripts:
        if '@context' in script.text:

            # Extra step to isolate the dictionary.
            jsonStr = re.search(r'\{.*\}', str(script)).group()
            # Create dictionary
            dct = json.loads(jsonStr)

print(dct['address'])


0 commentaires