我使用这个代码中找到所有有趣的链接在一个网页:

soup.findAll('a', href=re.compile('^notizia.php\?idn=\d+'))

和它做它的工作得很好。不幸的是那里面 一个 标记有很多的嵌套的标签,就像 字体, b 和不同的东西...我想得到的只是文本的内容,没有任何其他html标签。

例的链接:

<A HREF="notizia.php?idn=1134" OnMouseOver="verde();" OnMouseOut="blu();"><FONT CLASS="v12"><B>03-11-2009:&nbsp;&nbsp;<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方法,但它忽略我的regex.为什么?我怎么解决?

有帮助吗?

解决方案

我用这个:

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:&nbsp;&nbsp;<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("&nbsp;"," ")
    return s


for match in patt.searchString(htmlsrc):
    print stripTags(match.body)

打印:

03-11-2009:  CCS Ingegneria Elettronica-Sportello studenti ed orientamento

这实际上是非常不透HTML变幻莫测,因为它因素的存在/缺乏的属性,上/下情况,等等。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top