7

を取得するための簡単な方法は、私は、ページ内のすべての興味深いリンクを見つけるために、このコードを使用しています。残念ながらその内にタグがあります。フォント,bなどさまざまなネストされたタグがあります。他のHTMLタグを使用せずにテキストコンテンツを取得したいと思います。BeautifulSoup 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 –

答えて

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

+0

あなたはそうです。編集されました。ありがとう。 –

+0

それは動作します!ありがとうございました! –

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気まぐれにかなり不浸透性です。