Ich versuche, Daten von der Wetter-Website wunderground.com zu kratzen. Ich möchte, dass es jeden Monat (Jan-Dez) für die Jahre 1941-2016 aus Philadelphia kommt.Ausgabedatei lässt Monate leer von Wetterdaten
Zuerst hatte ich diesen Code, aber dies nur gekratzt und machte eine Datei für Januar 2016.
#!/usr/bin/python
#weather.scraper
from bs4 import BeautifulSoup
import urllib
import json
def main():
# weatherData = weather_philadelphia_data #Json beginns here
# with open(jsonfile, 'w') as outputFile:
# json.dump(weatherData, outputFile)
# #scrapping beginns here
r = urllib.urlopen("https://www.wunderground.com/history/airport/KPHL/2016/1/1/MonthlyHistory.html?&reqdb.zip=&reqdb.magic=&reqdb.wmo=&MR=1").read()
soup = BeautifulSoup(r, "html.parser")
tables = soup.find_all("table", class_="responsive airport-history-summary-table")
weatherdata = []
for table in tables: #reason for it to do it 12x
for tr in table.find_all("tr"):
firstTd = tr.find("td")
if firstTd and firstTd.has_attr("class") and "indent" in firstTd['class']:
values = {}
tds = tr.find_all("td")
maxVal = tds[1].find("span", class_="wx-value")
avgVal = tds[2].find("span", class_="wx-value")
minVal = tds[3].find("span", class_="wx-value")
if maxVal:
values['max'] = maxVal.text
if avgVal:
values['avg'] = avgVal.text
if minVal:
values['min'] = minVal.text
if len(tds) > 4:
sumVal = tds[4].find("span", class_="wx-value")
if sumVal:
values['sum'] = sumVal.text
scrapedData = {}
scrapedData[firstTd.text] = values
weatherdata.append(scrapedData)
break
with open ("january_2016.json", 'w') as outFile:
json.dump(weatherdata, outFile, indent=2)
print "done"
if __name__ == "__main__":
main()
Ich habe versucht, ein for-Schleife zu machen, die all die Jahre und Monate Schleifen durch. Es macht die Datei, aber es ist leer mit Daten, es zeigt nur die Jahre. Dies ist der neue Code:
#!/usr/bin/python
#weather.scraper
from bs4 import BeautifulSoup
import urllib
import json
allData = []
# this loops through all the Weather years
for y in range(1941, 2017):
yearData = {}
yearData['year'] = y
months = []
for m in range(1, 13):
def main():
# weatherData = weather_philadelphia_data #Json beginns here
# with open(jsonfile, 'w') as outputFile:
# json.dump(weatherData, outputFile)
# scrapping beginns here
url = "https://www.wunderground.com/history/airport/KPHL/%d/%d/1/MonthlyHistory.html" % (y, m)
r = urllib.urlopen(url).read()
soup = BeautifulSoup(r, "html.parser")
tables = soup.find_all("table", class_="responsive airport-history-summary-table")
weatherPerMonth = {}
weatherdata = []
for table in tables: #reason for it to do it 12x
for tr in table.find_all("tr"):
firstTd = tr.find("td")
if firstTd and firstTd.has_attr("class") and "indent" in firstTd['class']:
values = {}
tds = tr.find_all("td")
maxVal = tds[1].find("span", class_="wx-value")
avgVal = tds[2].find("span", class_="wx-value")
minVal = tds[3].find("span", class_="wx-value")
if maxVal:
values['max'] = maxVal.text
if avgVal:
values['avg'] = avgVal.text
if minVal:
values['min'] = minVal.text
if len(tds) > 4:
sumVal = tds[4].find("span", class_="wx-value")
if sumVal:
values['sum'] = sumVal.text
scrapedData = {}
scrapedData[firstTd.text] = values
weatherdata.append(scrapedData)
break
monthData = {}
monthData['month'] = m
monthData['weather'] = weatherPerMonth
months.append(monthData)
yearData['months'] = months
allData.append(yearData)
with open ("allData_philly.json", 'w') as outFile:
json.dump(allData, outFile, indent=2)
print "done"
if __name__ == "__main__":
main()
Dieser Teil der Ausgabedatei ist es macht.
[
{
"months": [],
"year": 1941
},
]
Es ist wie diese, bis zum Jahr 2016
Das Problem ist die folgende. Ich möchte eine Datei, die mir die Wetterdaten für 12 Monate (Januar-Dezember) für die Jahre 1941 bis 2016, und es sollte so aussehen etwas gibt:
[
{
"months": [{
'month': 12
'weather' : {
"Max Temperature": {
"max": "18",
"avg": "6",
"min": "-2"
}
},
{
"Mean Temperature": {
"max": "12",
"avg": "1",
"min": "-6"
}
},
{
"Min Temperature": {
"max": "6",
"avg": "-3",
"min": "-11"
}
}],
"year": 1941
},
]
Aber ich kann nicht herausfinden, warum meine Code funktioniert nicht, ich hoffe, jemand kann helfen!
der Code für Python 3, wenn Sie Python verwenden 2 der 'Import urllib.request' geändert zu Ihrem ursprünglichen Code werden muss zurück. –