python beautifulsoup extrayendo texto
extract extraction (2)
Asegúrese de entender lo que está sucediendo aquí:
import urllib2
import datetime
from bs4 import BeautifulSoup as soup
url = "http://app2.nea.gov.sg/anti-pollution-radiation-protection/air-pollution/psi/psi-readings-over-the-last-24-hours"
web_soup = soup(urllib2.urlopen(url))
table = web_soup.find(name="div", attrs={''class'': ''c1''}).find_all(name="div")[2].find_all(''table'')[0]
data = {}
bold_time = ''''
cur_time = datetime.datetime.strptime("12AM", "%I%p")
for tr_index, tr in enumerate(table.find_all(''tr'')):
if ''Time'' in tr.text:
continue
for td_index, td in enumerate(tr.find_all(''td'')):
if not td_index:
continue
data[cur_time] = td.text.strip()
if td.find(''strong''):
bold_time = cur_time
cur_time += datetime.timedelta(hours=1)
print data.get(bold_time) # bold
print data.get(bold_time - datetime.timedelta(hours=1)) # before bold
print data.get(bold_time - datetime.timedelta(hours=2)) # before before bold
Esto imprimirá el valor de 3-hr PSI
que está marcado en negrita y dos valores antes (si existe).
Espero que ayude.
Me gustaría extraer el texto en negrita , que indica el último clima psi de este sitio web http://app2.nea.gov.sg/anti-pollution-radiation-protection/air-pollution/psi/psi-readings-over -las-últimas-24 horas . ¿Alguien sabe cómo extraer usando este código a continuación?
También necesitaba extraer dos valores que están delante del clima actual psi para calcular. Total de tres valores (últimos y dos valores anteriores)
Ejemplo: el valor actual ( negrita ) es 5AM: 51, también necesito 3AM y 4AM. ¿Alguien sabe y puede ayudarme con esto? Gracias por adelantado !
from pprint import pprint
import urllib2
from bs4 import BeautifulSoup as soup
url = "http://app2.nea.gov.sg/anti-pollution-radiation-protection/air-pollution/psi/psi-readings-over-the-last-24-hours"
web_soup = soup(urllib2.urlopen(url))
table = web_soup.find(name="div", attrs={''class'': ''c1''}).find_all(name="div")[2].find_all(''table'')[0]
table_rows = []
for row in table.find_all(''tr''):
table_rows.append([td.text.strip() for td in row.find_all(''td'')])
data = {}
for tr_index, tr in enumerate(table_rows):
if tr_index % 2 == 0:
for td_index, td in enumerate(tr):
data[td] = table_rows[tr_index + 1][td_index]
pprint(data)
huellas dactilares:
{''10AM'': ''49'',
''10PM'': ''-'',
''11AM'': ''52'',
''11PM'': ''-'',
''12AM'': ''76'',
''12PM'': ''54'',
''1AM'': ''70'',
''1PM'': ''59'',
''2AM'': ''64'',
''2PM'': ''65'',
''3AM'': ''59'',
''3PM'': ''72'',
''4AM'': ''54'',
''4PM'': ''79'',
''5AM'': ''51'',
''5PM'': ''82'',
''6AM'': ''48'',
''6PM'': ''79'',
''7AM'': ''47'',
''7PM'': ''-'',
''8AM'': ''47'',
''8PM'': ''-'',
''9AM'': ''47'',
''9PM'': ''-'',
''Time'': ''3-hr PSI''}
Este código (ver líneas con #changed
texto #changed
)
from pprint import pprint
import urllib2
from bs4 import BeautifulSoup as soup
url = "http://app2.nea.gov.sg/anti-pollution-radiation-protection/air-pollution/psi/psi-readings-over-the-last-24-hours"
web_soup = soup(urllib2.urlopen(url))
table = web_soup.find(name="div", attrs={''class'': ''c1''}).find_all(name="div")[2].find_all(''table'')[0]
table_rows = []
for row in table.find_all(''tr''):
table_rows.append([td.text.strip() for td in row.find_all(''td'')])
data = [] # changed
for tr_index, tr in enumerate(table_rows):
if tr_index % 2 == 0:
for td_index, td in enumerate(tr):
data.append([td, table_rows[tr_index + 1][td_index]]) # changed
pprint(data)
darte
[[u''Time'', u''3-hr PSI''],
[u''12AM'', u''57''],
[u''1AM'', u''-''],
[u''2AM'', u''-''],
[u''3AM'', u''-''],
[u''4AM'', u''-''],
[u''5AM'', u''-''],
[u''6AM'', u''-''],
[u''7AM'', u''-''],
[u''8AM'', u''-''],
[u''9AM'', u''-''],
[u''10AM'', u''-''],
[u''11AM'', u''-''],
[u''Time'', u''3-hr PSI''],
[u''12PM'', u''-''],
[u''1PM'', u''-''],
[u''2PM'', u''-''],
[u''3PM'', u''-''],
[u''4PM'', u''-''],
[u''5PM'', u''-''],
[u''6PM'', u''-''],
[u''7PM'', u''-''],
[u''8PM'', u''-''],
[u''9PM'', u''-''],
[u''10PM'', u''-''],
[u''11PM'', u''-'']]
e print data[4:7]
te dan
[[u''3AM'', u''-''], [u''4AM'', u''-''], [u''5AM'', u''-'']]