BeautifulSoup-простой способ получить HTML-содержимое
Я использую этот код, чтобы найти все интересные ссылки на странице:
soup.findAll('a', href=re.compile('^notizia.php?idn=d+'))
и он делает свою работу довольно хорошо. К сожалению, внутри этого a tag есть много вложенных тегов, таких как шрифт, b а это разные вещи... Я хотел бы получить только текстовое содержимое без каких-либо других тегов html.
пример ссылки:
<A HREF="notizia.php?idn=1134" OnMouseOver="verde();" OnMouseOut="blu();"><FONT CLASS="v12"><B>03-11-2009: <font color=green>CCS Ingegneria Elettronica-Sportello studenti ed orientamento</B></FONT></A>
конечно, это уродливо (и разметка не всегда одинакова!) и я хотел бы получить:
03-11-2009: CCS Ingegneria Elettronica-Sportello studenti ed orientamento
в документации сказано использовать text=True
в метода findAll, но он будет игнорировать мое регулярное выражение. Почему? Как я могу это решить?
2 ответов
я использовал этот:
def textOf(soup):
return u''.join(soup.findAll(text=True))
Так...
texts = [textOf(n) for n in soup.findAll('a', href=re.compile('^notizia.php\?idn=\d+'))]
заинтересованы в pyparsing взять на себя эту проблему?
from pyparsing import makeHTMLTags, SkipTo, anyOpenTag, anyCloseTag, ParseException
htmlsrc = """<A HREF="notizia.php?idn=1134" OnMouseOver="verde();" OnMouseOut="blu();"><FONT CLASS="v12"><B>03-11-2009: <font color=green>CCS Ingegneria Elettronica-Sportello studenti ed orientamento</B></FONT></A>"""
# create pattern to find interesting <A> tags
aStart,aEnd = makeHTMLTags("A")
def matchInterestingHrefsOnly(t):
if not t.href.startswith("notizia.php?"):
raise ParseException("not interested...")
aStart.setParseAction(matchInterestingHrefsOnly)
patt = aStart + SkipTo(aEnd)("body") + aEnd
# create pattern to strip HTML tags, and convert HTML entities
stripper = anyOpenTag.suppress() | anyCloseTag.suppress()
def stripTags(s):
s = stripper.transformString(s)
s = s.replace(" "," ")
return s
for match in patt.searchString(htmlsrc):
print stripTags(match.body)
принты:
03-11-2009: CCS Ingegneria Elettronica-Sportello studenti ed orientamento
это на самом деле довольно непроницаемо для HTML-Капризов, поскольку это факторы наличия/отсутствия атрибутов, верхнего/нижнего регистра и т. д.