2017-09-16 5 views
2

Je suis nouveau sur Python et je suis en train de coder un petit scraper en Python avec BeautifulSoup, afin d'obtenir l'adresse de la page web. Je joins l'image de celui-ci enter image description hereComment obtenir le contenu spécifique en Python avec BeautifulSoup?

</div> 
    </div> 
    <div data-integration-name="redux-container" data-payload='{"name":"LocationsMapList","props":{"locations":[{"id":17305,"company_id":106906,"description":"","city":"New York","country":"United States","address":"5 Crosby St 3rd Floor","state":"New York","region":"","latitude":40.719753,"longitude":-74.0001954,"hq":true,"created_at":"2015-01-19T01:32:16.317Z","updated_at":"2016-05-05T07:57:19.282Z","zip_code":"10013","country_code":"US","full_address":"5 Crosby St 3rd Floor, New York, 10013, New York, USA","dirty":false,"to_params":"new-york-us"}]},"storeName":null}' data-rwr-element="true"> 

Je suis le contenu complet en utilisant BeautifulSoup mais je ne sais pas comment extraire le contenu du « full_address ». Je l'ai vu en "div" mais je ne sais pas quoi faire ensuite.

links = soup.find_all('div')

Merci beaucoup!

+3

(s'il vous plaît ajouter votre code sous forme de texte au lieu d'une image) – PRMoureu

+1

je l'ai ajouté. Merci! – Laura

+0

L'attribut ''data-payload'' est json, alors utilisez' json.loads' –

Répondre

2

Vous pouvez utiliser json pour analyser les données:

#!/usr/bin/env python 

from bs4 import BeautifulSoup 
import json 

data = ''' 
</div> 
    </div> 
    <div data-integration-name="redux-container" data-payload='{"name":"LocationsMapList","props":{"locations":[{"id":17305,"company_id":106906,"description":"","city":"New York","country":"United States","address":"5 Crosby St 3rd Floor","state":"New York","region":"","latitude":40.719753,"longitude":-74.0001954,"hq":true,"created_at":"2015-01-19T01:32:16.317Z","updated_at":"2016-05-05T07:57:19.282Z","zip_code":"10013","country_code":"US","full_address":"5 Crosby St 3rd Floor, New York, 10013, New York, USA","dirty":false,"to_params":"new-york-us"}]},"storeName":null}' data-rwr-element="true"> 
''' 

soup = BeautifulSoup(data, 'html.parser') 
for i in soup.find_all('div', attrs={'data-integration-name':'redux-container'}): 
    info = json.loads(i.get('data-payload')) 
    for i in info['props']['locations']: 
     print i['address'] 
+0

Il dit: KeyError: 'locations' – Laura

+1

@Laura pour que ma solution fonctionne Je suppose que les données que vous essayez d'analyser sont exactement les mêmes que celles de votre message. Vos données ont-elles la même cause à cause de l'erreur que vous avez affichée, il semble que les «emplacements» n'existent pas dans vos données? Aussi pour voir les clefs que vous pouvez faire 'print i.keys()' – coder

+0

Peut-être le limiter à 'div' qui ont l'attribut' data-integration-name = "redux-container" '. – wwii