Home > Back-end >  How to iterate and fill a dataframe with Scrapped values with Selenium
How to iterate and fill a dataframe with Scrapped values with Selenium

Time:09-08

I am trying to fill up a dataframe with the expected hourly irradiation for an specific location for the next 14 days. I am trying to do scrapping with Selenium from a website where those values are provided, but I do not know how to get the specific values and automate the overall process.

This is what I´ve tried: The df that I want to fill can be generated as follows:

days = range(1,15,1)
hours = ['00:00','01:00','02:00','03:00','04:00','05:00','06:00','07:00','08:00','09:00','10:00','11:00','12:00','13:00','14:00','15:00','16:00','17:00','18:00','19:00','20:00','21:00','22:00','23:00','24:00']
today = date.today()

dates = []
for d in days:
    dates.append(today   timedelta(days=d))

irradiation = pd.DataFrame(columns=dates, index=hours)
irradiation = irradiation.fillna(0) 

** Let me know if you find an easier way to create it.

With this dataframe, and by using Selenium, I want to field up the cells which values are provided in this website enter image description here

So for this example, the result would look like:

Date 2022-09-07 ...
00:00 0 ...
01:00 0 ...
... ... ...
09:00 48 ..
10:00 360 ...
... ... ...
24:00 0 ...

We only fill up the hours where we have values, and they can change one day from other (so one day we have irradiation values from 07:00 and other from 09:00)

This is what I tried:

PATH = "C://Program Files (x86)//chromedriver.exe" # chromedriver.exe path
driver = webdriver.Chrome(PATH)

driver.get("https://www.tutiempo.net/radiacion-solar/madrid.html")
#close cookies
time.sleep(10)
for d in days:
   results = driver.find_element(By.ID, "HorasDia" str(d))
   # irradiation.loc[[h],[today   timedelta(days=(d-1))]] = 0 #here actual value of the irradiation the that hour
   print(results.text)

By doing this, I get the hour and the irradiation but I do not know how to iterate each hour and storage that into the df. Does anyone a solution for this?

CodePudding user response:

This is one way you can get that data as a dataframe:

import requests
import pandas as pd
from bs4 import BeautifulSoup as bs

url = 'https://www.tutiempo.net/radiacion-solar/madrid.html'

big_list = []
r = requests.get(url)
soup = bs(r.text, 'html.parser')
days = soup.select('h3')
for x in days:
    try:
        hours_div = x.find_next('div', {'class': 'horashidsow'})
        hours = hours_div.select('div.horhor')
        for hour in hours:
            h_div = hour.select_one('span.hora')
            val_div = hour.select_one('span.ener')
            big_list.append((x.text, h_div.text, val_div.text))
    except Exception as e:
        print('all done, stopping')
        break
df = pd.DataFrame(big_list, columns = ['Day', 'Hour', 'Value'])
print(df)

Result:

Day Hour Value
0 Hoy - 7 Septiembre 09:00 48 w/m2
1 Hoy - 7 Septiembre 10:00 360 w/m2
2 Hoy - 7 Septiembre 11:00 496 w/m2
3 Hoy - 7 Septiembre 12:00 166 w/m2
4 Hoy - 7 Septiembre 13:00 187 w/m2
5 Hoy - 7 Septiembre 14:00 197 w/m2
6 Hoy - 7 Septiembre 15:00 193 w/m2
7 Hoy - 7 Septiembre 16:00 177 w/m2
8 Hoy - 7 Septiembre 17:00 149 w/m2
9 Hoy - 7 Septiembre 18:00 135 w/m2
10 Hoy - 7 Septiembre 19:00 68 w/m2
11 Hoy - 7 Septiembre 20:00 20 w/m2
12 Mañana - 8 Septiembre 09:00 47 w/m2
13 Mañana - 8 Septiembre 10:00 198 w/m2
14 Mañana - 8 Septiembre 11:00 185 w/m2
15 Mañana - 8 Septiembre 12:00 165 w/m2
16 Mañana - 8 Septiembre 13:00 205 w/m2
17 Mañana - 8 Septiembre 14:00 324 w/m2
18 Mañana - 8 Septiembre 15:00 211 w/m2
19 Mañana - 8 Septiembre 16:00 348 w/m2
20 Mañana - 8 Septiembre 17:00 148 w/m2
21 Mañana - 8 Septiembre 18:00 184 w/m2
22 Mañana - 8 Septiembre 19:00 196 w/m2
23 Mañana - 8 Septiembre 20:00 60 w/m2
24 Viernes - 9 Septiembre 09:00 185 w/m2
25 Viernes - 9 Septiembre 10:00 369 w/m2
26 Viernes - 9 Septiembre 11:00 531 w/m2
27 Viernes - 9 Septiembre 12:00 658 w/m2
28 Viernes - 9 Septiembre 13:00 661 w/m2
29 Viernes - 9 Septiembre 14:00 234 w/m2
30 Viernes - 9 Septiembre 15:00 191 w/m2
31 Viernes - 9 Septiembre 16:00 474 w/m2
32 Viernes - 9 Septiembre 17:00 527 w/m2
33 Viernes - 9 Septiembre 18:00 433 w/m2
34 Viernes - 9 Septiembre 19:00 251 w/m2
35 Viernes - 9 Septiembre 20:00 42 w/m2
36 Sábado - 10 Septiembre 09:00 182 w/m2
37 Sábado - 10 Septiembre 10:00 366 w/m2
38 Sábado - 10 Septiembre 11:00 528 w/m2
39 Sábado - 10 Septiembre 12:00 655 w/m2
40 Sábado - 10 Septiembre 13:00 740 w/m2
41 Sábado - 10 Septiembre 14:00 776 w/m2
42 Sábado - 10 Septiembre 15:00 760 w/m2
43 Sábado - 10 Septiembre 16:00 695 w/m2
44 Sábado - 10 Septiembre 17:00 584 w/m2
45 Sábado - 10 Septiembre 18:00 435 w/m2
46 Sábado - 10 Septiembre 19:00 258 w/m2
47 Sábado - 10 Septiembre 20:00 65 w/m2
48 Domingo - 11 Septiembre 09:00 179 w/m2
49 Domingo - 11 Septiembre 10:00 363 w/m2
50 Domingo - 11 Septiembre 11:00 525 w/m2
51 Domingo - 11 Septiembre 12:00 652 w/m2
52 Domingo - 11 Septiembre 13:00 736 w/m2
53 Domingo - 11 Septiembre 14:00 772 w/m2
54 Domingo - 11 Septiembre 15:00 756 w/m2
55 Domingo - 11 Septiembre 16:00 690 w/m2
56 Domingo - 11 Septiembre 17:00 579 w/m2
57 Domingo - 11 Septiembre 18:00 430 w/m2
58 Domingo - 11 Septiembre 19:00 252 w/m2
59 Domingo - 11 Septiembre 20:00 59 w/m2
60 Lunes - 12 Septiembre 09:00 44 w/m2
61 Lunes - 12 Septiembre 10:00 90 w/m2
62 Lunes - 12 Septiembre 11:00 130 w/m2
63 Lunes - 12 Septiembre 12:00 162 w/m2
64 Lunes - 12 Septiembre 13:00 183 w/m2
65 Lunes - 12 Septiembre 14:00 192 w/m2
66 Lunes - 12 Septiembre 15:00 188 w/m2
67 Lunes - 12 Septiembre 16:00 172 w/m2
68 Lunes - 12 Septiembre 17:00 144 w/m2
69 Lunes - 12 Septiembre 18:00 241 w/m2
70 Lunes - 12 Septiembre 19:00 192 w/m2
71 Lunes - 12 Septiembre 20:00 49 w/m2
72 Martes - 13 Septiembre 09:00 43 w/m2
73 Martes - 13 Septiembre 10:00 89 w/m2
74 Martes - 13 Septiembre 11:00 130 w/m2
75 Martes - 13 Septiembre 12:00 161 w/m2
76 Martes - 13 Septiembre 13:00 182 w/m2
77 Martes - 13 Septiembre 14:00 191 w/m2
78 Martes - 13 Septiembre 15:00 187 w/m2
79 Martes - 13 Septiembre 16:00 170 w/m2
80 Martes - 13 Septiembre 17:00 142 w/m2
81 Martes - 13 Septiembre 18:00 105 w/m2
82 Martes - 13 Septiembre 19:00 60 w/m2
83 Martes - 13 Septiembre 20:00 12 w/m2
84 Miércoles - 14 Septiembre 09:00 169 w/m2
85 Miércoles - 14 Septiembre 10:00 354 w/m2
86 Miércoles - 14 Septiembre 11:00 515 w/m2
87 Miércoles - 14 Septiembre 12:00 642 w/m2
88 Miércoles - 14 Septiembre 13:00 724 w/m2
89 Miércoles - 14 Septiembre 14:00 754 w/m2
90 Miércoles - 14 Septiembre 15:00 742 w/m2
91 Miércoles - 14 Septiembre 16:00 677 w/m2
92 Miércoles - 14 Septiembre 17:00 565 w/m2
93 Miércoles - 14 Septiembre 18:00 415 w/m2
94 Miércoles - 14 Septiembre 19:00 237 w/m2
95 Miércoles - 14 Septiembre 20:00 43 w/m2
96 Jueves - 15 Septiembre 09:00 166 w/m2
97 Jueves - 15 Septiembre 10:00 351 w/m2
98 Jueves - 15 Septiembre 11:00 512 w/m2
99 Jueves - 15 Septiembre 12:00 639 w/m2
100 Jueves - 15 Septiembre 13:00 722 w/m2
101 Jueves - 15 Septiembre 14:00 756 w/m2
102 Jueves - 15 Septiembre 15:00 739 w/m2
103 Jueves - 15 Septiembre 16:00 672 w/m2
104 Jueves - 15 Septiembre 17:00 560 w/m2
105 Jueves - 15 Septiembre 18:00 409 w/m2
106 Jueves - 15 Septiembre 19:00 231 w/m2
107 Jueves - 15 Septiembre 20:00 38 w/m2
108 Viernes - 16 Septiembre 09:00 41 w/m2
109 Viernes - 16 Septiembre 10:00 87 w/m2
110 Viernes - 16 Septiembre 11:00 127 w/m2
111 Viernes - 16 Septiembre 12:00 159 w/m2
112 Viernes - 16 Septiembre 13:00 180 w/m2
113 Viernes - 16 Septiembre 14:00 188 w/m2
114 Viernes - 16 Septiembre 15:00 238 w/m2
115 Viernes - 16 Septiembre 16:00 262 w/m2
116 Viernes - 16 Septiembre 17:00 241 w/m2
117 Viernes - 16 Septiembre 18:00 159 w/m2
118 Viernes - 16 Septiembre 19:00 73 w/m2
119 Viernes - 16 Septiembre 20:00 8 w/m2
120 Sábado - 17 Septiembre 09:00 159 w/m2
121 Sábado - 17 Septiembre 10:00 343 w/m2
122 Sábado - 17 Septiembre 11:00 504 w/m2
123 Sábado - 17 Septiembre 12:00 631 w/m2
124 Sábado - 17 Septiembre 13:00 714 w/m2
125 Sábado - 17 Septiembre 14:00 748 w/m2
126 Sábado - 17 Septiembre 15:00 731 w/m2
127 Sábado - 17 Septiembre 16:00 663 w/m2
128 Sábado - 17 Septiembre 17:00 550 w/m2
129 Sábado - 17 Septiembre 18:00 399 w/m2
130 Sábado - 17 Septiembre 19:00 220 w/m2
131 Sábado - 17 Septiembre 20:00 27 w/m2
132 Domingo - 18 Septiembre 09:00 157 w/m2
133 Domingo - 18 Septiembre 10:00 341 w/m2
134 Domingo - 18 Septiembre 11:00 502 w/m2
135 Domingo - 18 Septiembre 12:00 627 w/m2
136 Domingo - 18 Septiembre 13:00 710 w/m2
137 Domingo - 18 Septiembre 14:00 743 w/m2
138 Domingo - 18 Septiembre 15:00 720 w/m2
139 Domingo - 18 Septiembre 16:00 640 w/m2
140 Domingo - 18 Septiembre 17:00 509 w/m2
141 Domingo - 18 Septiembre 18:00 342 w/m2
142 Domingo - 18 Septiembre 19:00 165 w/m2
143 Domingo - 18 Septiembre 20:00 13 w/m2
144 Lunes - 19 Septiembre 09:00 154 w/m2
145 Lunes - 19 Septiembre 10:00 338 w/m2
146 Lunes - 19 Septiembre 11:00 499 w/m2
147 Lunes - 19 Septiembre 12:00 624 w/m2
148 Lunes - 19 Septiembre 13:00 707 w/m2
149 Lunes - 19 Septiembre 14:00 740 w/m2
150 Lunes - 19 Septiembre 15:00 722 w/m2
151 Lunes - 19 Septiembre 16:00 654 w/m2
152 Lunes - 19 Septiembre 17:00 540 w/m2
153 Lunes - 19 Septiembre 18:00 389 w/m2
154 Lunes - 19 Septiembre 19:00 210 w/m2
155 Lunes - 19 Septiembre 20:00 16 w/m2
156 Martes - 20 Septiembre 09:00 151 w/m2
157 Martes - 20 Septiembre 10:00 335 w/m2
158 Martes - 20 Septiembre 11:00 495 w/m2
159 Martes - 20 Septiembre 12:00 621 w/m2
160 Martes - 20 Septiembre 13:00 703 w/m2
161 Martes - 20 Septiembre 14:00 736 w/m2
162 Martes - 20 Septiembre 15:00 717 w/m2
163 Martes - 20 Septiembre 16:00 649 w/m2
164 Martes - 20 Septiembre 17:00 535 w/m2
165 Martes - 20 Septiembre 18:00 383 w/m2
166 Martes - 20 Septiembre 19:00 204 w/m2
167 Martes - 20 Septiembre 20:00 10 w/m2
168 Miércoles - 21 Septiembre 09:00 147 w/m2
169 Miércoles - 21 Septiembre 10:00 332 w/m2
170 Miércoles - 21 Septiembre 11:00 492 w/m2
171 Miércoles - 21 Septiembre 12:00 617 w/m2
172 Miércoles - 21 Septiembre 13:00 699 w/m2
173 Miércoles - 21 Septiembre 14:00 732 w/m2
174 Miércoles - 21 Septiembre 15:00 713 w/m2
175 Miércoles - 21 Septiembre 16:00 644 w/m2
176 Miércoles - 21 Septiembre 17:00 530 w/m2
177 Miércoles - 21 Septiembre 18:00 378 w/m2
178 Miércoles - 21 Septiembre 19:00 199 w/m2
179 Miércoles - 21 Septiembre 20:00 5 w/m2

1

Relevant documentation for Requests: https://requests.readthedocs.io/en/latest/

For Pandas: https://pandas.pydata.org/pandas-docs/stable/index.html

And for BeautifulSoup: https://beautiful-soup-4.readthedocs.io/en/latest/index.html

  • Related