2012-01-06 4 views
3

何百ものリンクがあり、それぞれがaタグにユニークなテキストを持つページがあるとします。どのようにしてタグのテキストを指定し、そこからhrefを得ることができますか?たとえば、美しいスープは、テキストに基づいてhrefを取得します

for a in soup.findAll('a', href=True): 
    print(a['href']) 

これは、過度のページ全体ですべてのhrefを取得します。

for a in soup.findAll('a', href=True text="Some Value"): 
    print(a['href']) 

タグオブジェクトを返さず、Navigableオブジェクトが返されるため、hrefタグを取得できません。どのように私は私が欲しいものを達成することができますか?

答えて

1

あなたのような少なくとも何か行うことができます。

for a in soup.findAll('a', href=True): 
    if self.tag_to_string(a) == "Some Value": 
     print(a['href'])  

をしかし、他の方法があります。

HTH

3

代わりtextパラメータを渡すの、あなたがタグnametext両方チェックしnameパラメータとして呼び出し可能に渡すことができます。

for tag in soup.findAll(lambda tag: (tag.name == 'a' 
            and tag.text == 'Some Value'), 
         href=True): 
    print tag['href'] 

この方法は、返される値はの代わりにNavigableStringの代わりにTag

も注意している、マニュアルに従って:あなたはテキストを使用している場合

、そしてあなたが名前を与える任意の値とキーワード引数は無視されます。

おそらく、NavigableStringを取得したい場合でも、質問の2番目の例は期待どおりに機能しません。

0

「全てを見る」を探しているときに、これらは、タグ内のテキストの初めに、私の仕事:

for tag in soup.findAll(lambda tag: (tag.name == 'a' and re.search('^See all',tag.text)), href=True): 
    print 'href: ', tag['href'] 

for a in soup.findAll('a', href=True): 
    if re.search('^See all',a.text): 
     print 'href: ',(a['href'])  
関連する問題