Анализ html с помощью регулярных выражений обычно рассматривается как очень, очень плохая идея, поэтому я бы поддержал предложение Абизерна об использовании RSS-канала.Фактически, USGS также обеспечивает загрузку XML (см. http://earthquake.usgs.gov/earthquakes/catalogs/).
Если по какой-либо причине вы не можете этого сделать и имеет для использования html, то в качестве блока <pre>
не имеет дальнейшей структуры (исключая что-то хорошее, например, используя lxml или beautifulsoup), тогда следующий python работает для этого single примера ... регулярное выражение, вероятно, очень хрупкое (и, честно говоря, cludgey) и нуждается в настройкедля обработки дальнейших примеров / исключений.
Это записывает в файл Excel, поэтому вы должны иметь возможность вставлять все это в цикл, чтобы очистить несколько страниц (играйте хорошо и проверяйте их условия, ограничивайте скорость и кэш)).
import httplib2
import re
from xlwt import Workbook
h = httplib2.Http(".cache")
url = 'http://earthquake.usgs.gov/earthquakes/eqinthenews/2010/uu00002715/uu00002715_gcmt.php'
resp, content = h.request(url, "GET")
regex = re.compile("<pre>\s*(?P<date>.* \d{2}, \d{4}), (?P<name>\w.*), MW=(?P<Mw>\d.\d).*ORIGIN TIME:\s*(?P<time>\d{2}:\d{2}:\d{2}.\d).*LAT:\s*(?P<lat>\d{2,3}.\d{2,3}[N|S]).*LON:\s*(?P<lon>\d{2,3}.\d{2,3}[W|E]).*DEP:\s*(?P<dep>\d{2,3}.\d)\s*(?P<dep_err>\d{1,3}.\d);.*M0=\s*(?P<M0>\d.\d{1,2}\*\d{1,2}\*\*\d{1,2}).*STRIKE=(?P<strike>\d{1,3}).*DIP=(?P<dip>\d{1,3}).*SLIP=\s*(?P<slip>[-|+]\d{1,3}).*NP2",re.MULTILINE|re.DOTALL)
r = regex.search(content)
data = r.groupdict()
headers = ['name', 'date', 'time', 'lon', 'lat', 'dep', 'dep_err', 'Mw', 'M0', 'strike', 'dip', 'slip']
wb = Workbook()
ws = wb.add_sheet('Quakes')
column = 0
for header in headers:
ws.write(0, column, header)
ws.write(1, column,data[header])
column+=1
wb.save('quakes.xls')
Вы должны определенно использовать вместо этого XML / RSS, хотя, если можете:)