Quantcast
Channel: Active questions tagged selenium - Stack Overflow
Viewing all articles
Browse latest Browse all 99411

WeatherUnderground Web Scraping - choosing different measurements systems

$
0
0

I've been trying to change measurements systems. Default measurement system on the WeatherUnderground is set on imperial system.

from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom datetime import datetime    def scrape_weather_data(url, time_selector, temperature_selector,     humidity_selector, precip_selector, wind_speed_selector,     pressure_selector, amount_selector):    driver = webdriver.Chrome()      driver.get(url)  # Enter The website    driver.find_element(By.CSS_SELECTOR, '#wuSettings > i').click()    driver.find_element(By.CSS_SELECTOR, '#wuSettings-quick > div >     a:nth-child(2)').click()    # Generate text file name based on day and hour    current_time = datetime.now().strftime("%Y-%m-%d_%H-%M-%S")    filename = f'dane_pogodowe_{current_time}.txt'    # Saving data into a .txt file    with open(filename, 'a') as file:    time_elements = driver.find_elements(By.CSS_SELECTOR,time_selector)    temperature_elements =     driver.find_elements(By.CSS_SELECTOR,temperature_selector)    humidity_elements =     driver.find_elements(By.CSS_SELECTOR,humidity_selector)    precip_elements =     driver.find_elements(By.CSS_SELECTOR,precip_selector)    wind_elements = driver.find_elements(By.CSS_SELECTOR,     wind_speed_selector)    pressure_elements = driver.find_elements(By.CSS_SELECTOR,     pressure_selector)    amount_elements = driver.find_elements(By.CSS_SELECTOR,     amount_selector)    for i in range(len(time_elements)):        time = time_elements[i].text.strip()        temperature = temperature_elements[i].text.strip()        humidity = humidity_elements[i].text.strip()        precip = precip_elements[i].text.strip()        wind = wind_elements[i].text.strip()        pressure = pressure_elements[i].text.strip()        amount = amount_elements[i].text.strip()        file.write(f"Czas: {time}\n")        file.write(f"Temperatura: {temperature}\n")        file.write(f"Wilgotność: {humidity}\n")        file.write(f"Szansa opadów: {precip}\n")        file.write(f"Wiatr: {wind}\n")        file.write(f"Ciśnienie: {pressure}\n")        file.write(f"Ilość opadów: {amount}\n")        file.write("\n")    file.write("------------------------------\n")    driver.quit()  # Close the Web browser     print("Dane pogodowe zostały zapisane.")    # URL    url = 'https://www.wunderground.com/hourly/pl/kucoby'    # Selectors CSS    time_selector = '#hourly-forecast-table > tbody > tr:nth-child(1) > td.mat-cell.cdk-cell.cdk-column-timeHour.mat-column-     timeHour.ng-star-inserted > span'    temperature_selector = '#hourly-forecast-table > tbody > tr:nth-     child(1) > td.mat-cell.cdk-cell.cdk-column-temperature.mat-     column-temperature.ng-star-inserted'    humidity_selector = '#hourly-forecast-table > tbody > tr:nth-     child(1) > td.mat-cell.cdk-cell.cdk-column-humidity.mat-column-     humidity.ng-star-inserted'    precip_selector = '#hourly-forecast-table > tbody > tr:nth-     child(1) > td.mat-cell.cdk-cell.cdk-column-precipitation.mat-     column-precipitation.ng-star-inserted'    wind_speed_selector = '#hourly-forecast-table > tbody > tr:nth-     child(1) > td.mat-cell.cdk-cell.cdk-column-wind.mat-column-     wind.ng-star-inserted'    pressure_selector = '#hourly-forecast-table > tbody > tr:nth-     child(1) > td.mat-cell.cdk-cell.cdk-column-pressure.mat-column-     pressure.ng-star-inserted'    amount_selector = '#hourly-forecast-table > tbody > tr:nth-     child(1) > td.mat-cell.cdk-cell.cdk-column-     liquidPrecipitation.mat-column-liquidPrecipitation.ng-star-     inserted'    # Calling a function and saving the Data    scrape_weather_data(url, time_selector, temperature_selector,     humidity_selector, precip_selector, wind_speed_selector,     pressure_selector, amount_selector)

So basically the most important 2 lines are :

 driver.find_element(By.CSS_SELECTOR, '#wuSettings > i').click() driver.find_element(By.CSS_SELECTOR, '#wuSettings-quick > div >  a:nth-child(2)').click()

The first one is responsible to enter the settings[the gear icon] (which from where we can change the measurements systems), and the other one is responsible to click the 2nd option which is the metric system.

The problem is that when i try do that the output in my textfile is "------------------------------". I don't know why. It seems that is only working with selectors, that don't have such a path "a:nth-child". Because when I change that to celsius, then the imperial system becomes the selector that is"#wuSettings-quick > div > a:nth-child(1)". And the chosen selector is "#wuSettings-quick > div > a.button.selected" which works perfectly fine.

How do I solve that?


Viewing all articles
Browse latest Browse all 99411

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>