J'ai essayé de gratter les pages suivantes (par exemple 1, 2) en utilisant BeautifulSoup
pour obtenir la liste des actions pour voyager d'un endroit à Bangkok à un autre endroit.BeautifulSoup obtenir tous les liens après balise donné
Fondamentalement, je peux interroger et sélectionner la description des voyages comme suit.
url = 'http://www.transitbangkok.com/showBestRoute.php?from=Sutthawat+-+Arun+Amarin+Intersection&to=Sukhumvit&originSelected=true&destinationSelected=true&lang=en'
route_request = requests.get(url)
soup_route = BeautifulSoup(route_request.content, 'lxml')
descriptions = soup_route.find('div', attrs={'id': 'routeDescription'})
Le code HTML de descriptions
ressemble à la suivante
<div id="routeDescription">
...
<br/>
<img src="/images/walk_icon_small.PNG" style="vertical-align:middle;padding-right: 10px;margin-right: 0px;"/>Walk by foot to <b>Sanam Luang</b>
<br/>
<img src="/images/bus_icon_semi_small.gif" style="vertical-align:middle;padding-right: 10px;margin-right: 0px;"/>Travel to <b>Khok Wua</b> using the line(s): <b><a href="lines/bangkok-bus-line/2">2</a></b> or <a href="lines/bangkok-bus-line/15">15</a> or <a href="lines/bangkok-bus-line/44">44</a> or <a href="lines/bangkok-bus-line/47">47</a> or <a href="lines/bangkok-bus-line/59">59</a> or <a href="lines/bangkok-bus-line/201">201</a> or <a href="lines/bangkok-bus-line/203">203</a> or <a href="lines/bangkok-bus-line/512">512</a><br/>
...
</div>
En gros, j'essaie d'obtenir la liste des actions et des lignes de bus pour se rendre à l'emplacement suivant (question mis à jour avec la réponse, mais encore n » ai pas t résoudre).
route_descrtions = []
for description in descriptions.find_all('img'):
action = description.next_sibling
to_station = action.next_sibling
n = action.find_next_siblings('a')
if 'travel' in action.lower():
lines = [to_station.find_next('b').text] + [a.contents[0] for a in n]
else:
lines = []
desp = {'action': action,
'to': to_station.text,
'lines': lines}
route_descrtions.append(desp)
Cependant, je ne sais pas comment faire une boucle à travers les liens après chaque action (Travel to
action) et ajouter à ma liste. J'ai essayé find_next('a')
et find_next_siblings('a')
mais n'ai pas accompli ma tâche.
Sortie
[{'action': 'Walk by foot to ', 'lines': [], 'to': 'Wang Lang (Siriraj)'},
{'action': 'Travel to ',
'lines': ['Chao Phraya Express Boat', '40', '48', '501', '508'],
'to': 'Si Phraya'},
{'action': 'Walk by foot to ', 'lines': [], 'to': 'Sheraton Royal Orchid'},
{'action': 'Travel to ',
'lines': ['16', '40', '48', '501', '508'],
'to': 'Siam'},
{'action': 'Travel to ',
'lines': ['BTS - Sukhumvit', '40', '48', '501', '508'],
'to': 'Asok'},
{'action': 'Walk by foot to ', 'lines': [], 'to': 'Sukhumvit'}]
sortie souhaitée
[{'action': 'Walk by foot to ', 'lines': [], 'to': 'Wang Lang (Siriraj)'},
{'action': 'Travel to ',
'lines': ['Chao Phraya Express Boat'],
...
Merci André! la solution fonctionne pour moi. Merci aussi pour la bonne explication. Déjà accepté la réponse (et le pouce en l'air)! – titipata