BeautifulSoup - 获取无 HTML 内容的简单方法
Posted
技术标签:
【中文标题】BeautifulSoup - 获取无 HTML 内容的简单方法【英文标题】:BeautifulSoup - easy way to to obtain HTML-free contents 【发布时间】:2010-12-17 16:23:04 【问题描述】:我正在使用此代码查找页面中所有有趣的链接:
soup.findAll('a', href=re.compile('^notizia.php\?idn=\d+'))
而且它的工作做得很好。不幸的是,在那个 a 标签里面有很多嵌套标签,比如 font、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
在文档中说要在 findAll 方法中使用text=True
,但它会忽略我的正则表达式。为什么?我该如何解决?
【问题讨论】:
PyQuery 听起来是个很酷的替代方案:pypi.python.org/pypi/pyquery 【参考方案1】:我用过这个:
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+'))]
【讨论】:
我认为您需要一个循环 - 您不能在结果集上调用findAll
,只能在单个结果上调用。【参考方案2】:
对这个问题的 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 变幻莫测的影响,因为它会考虑属性的存在/不存在、大写/小写等等。
【讨论】:
以上是关于BeautifulSoup - 获取无 HTML 内容的简单方法的主要内容,如果未能解决你的问题,请参考以下文章
Beautifulsoup:解析 html – 获取部分 href
如何使用 BeautifulSoup 在标签内获取 html 文本