Использование python urllib и красивого супа для извлечения информации с сайта html

Я пытаюсь извлечь некоторую информацию с этого сайта, т.е. строку, которая говорит:

Шкала (Дева + GA + Shapley): 29 шт. / Угловая секунда = 0,029 кпк / угловая секунда = 1,72 кпк / угловая минута = 0,10 Мпк / градус

но все после: переменно в зависимости от galtype.

Я написал код, который использовал Beautifulsoup и urllib и возвращает информацию о sone, но я изо всех сил пытаюсь уменьшить данные до просто информации, которую я хочу. Как получить только ту информацию, которую я хочу?

galname='M82'
a='http://ned.ipac.caltech.edu/cgi-bin/objsearch?objname='+galname+'&extend'+\
   '=no&hconst=73&omegam=0.27&omegav=0.73&corr_z=1&out_csys=Equatorial&out_equinox=J2000.0&obj'+\
   '_sort=RA+or+Longitude&of=pre_text&zv_breaker=30000.0&list_limit=5&img_stamp=YES'

print a
import urllib
f = urllib.urlopen(a)
from bs4 import BeautifulSoup
soup=BeautifulSoup(f)

soup.find_all(text=re.compile('Virgo')) and soup.find_all(text=re.compile('GA')) and soup.find_all(text=re.compile('Shapley'))

1 ответ

Решение

Определите шаблон регулярного выражения, который поможет BeautifulSoup чтобы найти соответствующий узел, затем извлеките число, используя группы сохранения:

pattern = re.compile(r"D \(Virgo \+ GA \+ Shapley\)\s+:\s+([0-9\.]+)")
print pattern.search(soup.find(text=pattern)).group(1)

Печать 5.92,


Кроме того, обычно я против использования регулярных выражений для разбора HTML, но, поскольку это текстовый поиск, и мы не собираемся использовать регулярные выражения для сопоставления открывающих или закрывающих тегов или чего-либо, связанного со структурой, предоставляемой HTML, - вы можете просто примените ваш шаблон к исходному тексту HTML страницы, не используя анализатор HTML:

data = f.read()
pattern = re.compile(r"D \(Virgo \+ GA \+ Shapley\)\s+:\s+([0-9\.]+)")
print pattern.search(data).group(1)
Другие вопросы по тегам