7

我使用這個代碼,以查找頁面中所有相關鏈接:BeautifulSoup - 簡單的方法來獲得免費的HTML內容

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 

在本文檔中,它說在findAll方法中使用text=True,但它會忽略我的正則表達式。爲什麼?我該如何解決這個問題?

+0

PyQuery聽起來像一個非常酷的替代方案:http://pypi.python.org/pypi/pyquery – 2009-11-17 23:41:53

回答

12

我用這個:

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+'))] 
+0

我認爲你需要一個循環 - 你不能在結果集上調用findAll,只能在單個結果上調用。 – RichieHindle 2009-11-18 00:07:55

+0

你是對的。編輯;謝謝。 – 2009-11-18 00:17:42

+0

它的工作原理!謝謝! – 2009-11-19 08:04:44

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:&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變化無常,因爲它因素存在/不存在的屬性,上部/下部箱子,等等。

相關問題