2011-07-23 15 views
1

BeautifulSoupを使用してサイトから値を抽出しようとしています。値は本質的に検索結果です。この場合、特定の地域の薬局です。BeautifulSoupを使用してアンカータグ値を抽出する

<a id="body_BusinessSearchResultSummaryList_repBusinessList_lnkBusinessProfile_2" class="sr-item-link" href="http://www.mocality.co.ke/b/natros-pharmacy/natrosoh/innercore/medical-services/_/_/0cfe6a11-7bee-41f8-8d2e-6a472557201f?skw=pharmacys&amp;rcnt=10">Natros Pharmacy</a> 
:次の1は2を持っているので、

<a id="body_BusinessSearchResultSummaryList_repBusinessList_lnkBusinessProfile_1" class="sr-item-link" href="http://www.mocality.co.ke/b/applegene-pharmacy/applegene/brooklyn/health-and-beauty-medical/_/airtime-chemist-cosmetics-medicine/d42f7388-3f9b-4a34-8971-dc6ae9692586?skw=pharmacys&amp;rcnt=10">Applegene Pharmacy</a> 

アンカータグのIDが結果に基づいてインクリメントされます。私はから抽出しようとしているページのソースには、以下のHTMLが含まれてい

私はfindAll( 'a')を使用しましたが、それは私にすべてのアンカータグを与えました。これを解析して特定のアンカータグの値を抽出するのに、BeautifulSoupを使用する方法はありますか?

答えて

4
from BeautifulSoup import BeautifulSoup 

txt = '''<a id="body_BusinessSearchResultSummaryList_repBusinessList_lnkBusinessProfile_1" class="sr-item-link" href="http://www.mocality.co.ke/b/natros-pharmacy/natrosoh/innercore/medical-services/_/_/0cfe6a11-7bee-41f8-8d2e-6a472557201f?skw=pharmacys&amp;rcnt=10">Natros Pharmacy</a> 
<a id="body_BusinessSearchResultSummaryList_repBusinessList_lnkBusinessProfile_2" class="sr-item-link 
" href="http://www.mocality.co.ke/b/natros-pharmacy/natrosoh/innercore/medical-services/_/_/0cfe6a11- 
7bee-41f8-8d2e-6a472557201f?skw=pharmacys&amp;rcnt=10">Natros Pharmacy</a>''' 
match = 'body_BusinessSearchResultSummaryList_repBusinessList_lnkBusinessProfile' 

soup = BeautifulSoup(txt) 
for a in soup.findAll('a'): 
     if a.has_key('id') and a['id'].startswith(match): 
       print a['href'], a.contents 
+1

を、結果が返され、エラーは表示されません。どんな考え? – jwesonga

+0

それは正確にそれらのリンクで動作します。私自身の編集を実行してみてください – lunixbochs

+0

私の場合は私がページから返されたHTMLが貼り付けたものよりも多く含まれているので、Webページを解析しています。私は値を解析して抽出したい部分のみを示しました。アンカータグの前に、同じコードをHTML全体で使用できますか? – jwesonga

0

使用する属性を制限findのキーワード引数、:

find("a", id="whatever_1") 

あなたはまた、(ブール)機能付きfind呼び出すことができます:いいえ、私はあなたのコードを試してみました

def isRight(tag): 
    return ... 

findAll(isRight) 
関連する問題