Web scraping - html

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Eminem21
User
Beiträge: 3
Registriert: Montag 29. Januar 2024, 08:08

Hallo,

im Rahmen einer Projektarbeit muss ich ein Berechnungstool in Python erstellen.
Hierfür brauche ich Emissionsfaktoren von verschiedenen Materialien und das Ziel ist es diese Faktoren aus einer Datenbank automatisch rauszuziehen.

Ich habe eine Website gefunden die, meiner Meinung nach, gut dafür geeignet ist: https://www.climatiq.io/data/explorer?data_version=8.8
Ich habe versucht diese Seite zu scrapen, aber entweder kriege [ ] raus oder ich kriege die Tabelle raus aber nie einen genauen Emissionsfaktor dabei.


Mein Code:
import pycurl
from pandas import json_normalize
urllib3.contrib.pyopenssl.inject_into_urllib3()
http = urllib3.PoolManager(
cert_reqs='CERT_REQUIRED',
ca_certs=certifi.where()
)
import urllib3
urllib3.disable_warnings()

import requests

res = requests.get('https://www.climatiq.io/data/explorer?s ... y=REDACTED', verify=False)

print(res)

<200>

league_table = soup.find('table', class_ = 'activities-table')
for team in league_table.find_all('tbody'):
rows = team.find_all('tr')

scraper = pd.read_html("https://www.climatiq.io/data/emission-f ... dd4eded999")

for idx, table in enumerate(scraper):
print("**************************************************")
print(idx)
print(table)

Wie kann ich die Seite denn scrapen, dass ich am Ende eine gescheite Tabelle mit allen Emissionsfaktoren habe?
Ich vermute das der Dropdown Menü das Problem ist....?


Ich habe 0 Erfahrung in Python, und dieses Problem beschäftigt mich schon seit einer Woche...


Dankeschön
Sirius3
User
Beiträge: 17688
Registriert: Sonntag 21. Oktober 2012, 17:20

@Eminem21: ich glaube nicht, dass es so gut war, deinen API-Key hier öffentlich zu posten. Den solltest Du jetzt sperren.
Statt zu versuchen, irgendwelche HTML-Seiten zu parsen (was hier eh nicht funktioniert), benutze doch die zur Verfügung gestellte API: https://www.climatiq.io/docs
__deets__
User
Beiträge: 14439
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ach witzig, den CTO von denen kenne ich.

Die haben doch eine API, die sollte wesentlich einfacher zu benutzen sein, denn dazu ist sie ja da.

Nachtrag: ich habe den key mal entfernt, aber Sirius3 hat natuerlich recht, der ist jetzt kompromittiert.
Eminem21
User
Beiträge: 3
Registriert: Montag 29. Januar 2024, 08:08

@__deets__ & @Sirius3
Danke für die Antwort

Ich habe es mit der API gemacht, und ich bekomme alle Informationen aus der Tabelle AUßER Emissionsfaktor.... Und denn brauche ich ja... :(
Und ich weiß nicht was ich am Code ändern soll um des zu bekommen..
__deets__
User
Beiträge: 14439
Registriert: Mittwoch 14. Oktober 2015, 14:29

Und wir wissen nicht, wie die Antwort der API aussieht, noch wie du sie versuchst zu verarbeiten 🤷🏻‍♂
Eminem21
User
Beiträge: 3
Registriert: Montag 29. Januar 2024, 08:08

Mein Code:

import urllib3
urllib3.disable_warnings()

MY_API_KEY="XXX"

url = "https://beta4.api.climatiq.io/search"
query="petrol passenger car medium"
data_version = "^3"

query_params = {
"data_version": data_version,
"region": "DE"
}


authorization_headers = {"Authorization": f"Bearer: {MY_API_KEY}"}

response = requests.get(url,verify = False, params=query_params, headers=authorization_headers).json()


print(response)




Ergebnis:

{'current_page': 1, 'last_page': 2, 'total_results': 25, 'results': [{'activity_id': 'passenger_vehicle-vehicle_type_bus-fuel_source_na-distance_na-engine_size_na', 'id': 'bb937415-ceb6-4cde-b465-3ff3285fffae', 'name': 'Average bus', 'category': 'Road Travel', 'sector': 'Transport', 'source': 'UBA', 'source_link': 'https://www.probas.umweltbundesamt.de/p ... 0ECD41B75B}', 'source_dataset': 'ProBas', 'uncertainty': None, 'year': 2020, 'year_released': 2020, 'region': 'DE', 'region_name': 'Germany', 'description': 'Emission intensity of average diesel bus. Upstream and fuel combustion LCA activity is included.', 'unit_type': 'PassengerOverDistance', 'unit': 'kg/passenger-km', 'source_lca_activity': 'upstream-fuel_combustion', 'data_quality_flags': [], 'access_type': 'public', 'supported_calculation_methods': ['ar4'], 'factor': None, 'factor_calculation_method': None, 'factor_calculation_origin': None, 'constituent_gases': {'co2e_total': None, 'co2e_other': None, 'co2': None, 'ch4': None, 'n2o': None}},

....


Mein Problem ist das bei CO2e_total immer "none" kommt




Danke
Sirius3
User
Beiträge: 17688
Registriert: Sonntag 21. Oktober 2012, 17:20

Warnungen sollte man nicht ignorieren, sondern deren Ursache beheben. Das gilt auch für verify=False. Ansonsten ist das ja eine Frage an den Support der Seite. Was ich auf die schnelle sehe, ist, dass Du Version 3 abfragst, obwohl Version 8 angeblich aktuell ist.
Antworten