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 https://tutiempo.net
Those are, for each day, for each hour, in the right of side of the screen (see image below, circled value)
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?
Advertisement
Answer
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