Wie in der vorherigen Frage erwähnt, verwende ich Schöne Suppe mit Python, um Wetterdaten von einer Website abzurufen.Beautifulsoup in Tags zu extrahieren und als JSON
Hier ist, wie die Website aussieht:
<channel>
<title>2 Hour Forecast</title>
<source>Meteorological Services Singapore</source>
<description>2 Hour Forecast</description>
<item>
<title>Nowcast Table</title>
<category>Singapore Weather Conditions</category>
<forecastIssue date="18-07-2016" time="03:30 PM"/>
<validTime>3.30 pm to 5.30 pm</validTime>
<weatherForecast>
<area forecast="TL" lat="1.37500000" lon="103.83900000" name="Ang Mo Kio"/>
<area forecast="SH" lat="1.32100000" lon="103.92400000" name="Bedok"/>
<area forecast="TL" lat="1.35077200" lon="103.83900000" name="Bishan"/>
<area forecast="CL" lat="1.30400000" lon="103.70100000" name="Boon Lay"/>
<area forecast="CL" lat="1.35300000" lon="103.75400000" name="Bukit Batok"/>
<area forecast="CL" lat="1.27700000" lon="103.81900000" name="Bukit Merah"/>`
<channel>
ich die Informationen abzurufen, habe ich es geschafft, diese Codes verwenden müssen:
import requests
from bs4 import BeautifulSoup
import urllib3
import json
weather = []
#getting the time
r = requests.get('http://www.nea.gov.sg/api/WebAPI/?dataset=2hr_nowcast&keyref=<keyrefno>')
soup = BeautifulSoup(r.content, "xml")
time = soup.find('validTime').string
print "validTime: " + time
for currentdate in soup.find_all('item'):
element = currentdate.find('forecastIssue')
print "date: " + element['date']
for currentdate in soup.find_all('item'):
element = currentdate.find('forecastIssue')
print "time: " + element['time']
for area in soup.find('weatherForecast').find_all('area'):
print area
#file writing
with open("c:/scripts/nea.json", 'w') as outfile:
json.dumps(weather, outfile)
#outfile.write(",")
Dies ist die Ausgabe Ich habe (in CMD):
C:\scripts>python neaweather.py
2.30 pm to 4.30 pm
date: 25-07-2016
time: 02:30 PM
<area forecast="LR" lat="1.37500000" lon="103.83900000" name="Ang Mo Kio"/>
<area forecast="LR" lat="1.32100000" lon="103.92400000" name="Bedok"/>
<area forecast="LR" lat="1.35077200" lon="103.83900000" name="Bishan"/>
<area forecast="LR" lat="1.30400000" lon="103.70100000" name="Boon Lay"/>
<area forecast="LR" lat="1.35300000" lon="103.75400000" name="Bukit Batok"/>
<area forecast="LR" lat="1.27700000" lon="103.81900000" name="Bukit Merah"/>
Ich habe ein paar Fragen, die ich nicht sicher bin, wie zu lösen:
Gibt es eine Möglichkeit, die Attribute in Bereich Prognose = "LR" lat = "1,37500000" lon = "103,83900000" name = "Ang Mo Kio"ohne seine Tags abrufen?
Ich habe versucht, „.text“ zu meinen Codes hinzugefügt, aber es würde immer ein Fehler sein
ich die Ausgabe in einem JSON-Format für meine Ausgabe sein möchte, da es nicht in einem Tabellenformat ist als gezeigt auf Anleitungen, wie eine JSON-Datei mit python zu erstellen:/
EDIT: ich habe es geschafft, die Daten in einer JSON-Datei zu öffnen, aber wie formatiere ich die Unicode-String in eine normale Zeichenfolge als die Ergebnis enthält u '?
1. Ihre Frage ist nicht ganz klar, wie '' ist ein einzelnes Tag ('area') mit vielen ** Attributen ** (' prognose', 'lat',' lon', 'name'). 2. Auch nicht sehr klar. Wenn Sie ein JSON-Format haben möchten, können Sie es selbst analysieren und eine Ausgabe in einem JSON-Format erstellen. – DeepSpace
Hallo, Entschuldigung für die Verwirrung. Ich möchte die Attribute der Gebietsvorhersage abrufen. Kann ich auch wissen, wie ich es im JSON-Format analysiere? Danke – plzhelpmi
Sie können die AttrS Eigenschaft wie folgt nutzen: 'area_attrs_li = [area.attrs für den Bereich in supp.find ('weatherForecast'). Find_all ('area')]' –