2016-07-30 7 views
0

私は最近、bs4を使って非常にきれいな方法でWeb廃棄を発見しました。私たちは、これが私たちのhtmlコードであるとしましょう:私は<div class="a">と仮定しています美味しいスープを使って "DIV"タグからコンテンツを抽出するループを適用する方法は?

<div class="a"> 
 
    <div class="b"> 
 
    <a href="www.yelloaes.com">'hi'</a> 
 
    </div> 
 
    <div class ="c"> 
 
    <p><a href="www.bb.com">'hi again'</a></p> 
 
    <div class="d"> 
 
     <p>'well this final'</p> 
 
    </div> 
 
    </div> 
 
</div> 
 

 

 
<div class="a"> 
 
    <div class="b"> 
 
    <a href="www.yelloaes1.com">'hi1'</a> 
 
    </div> 
 
    <div class ="c"> 
 
    <p><a href="www.bb1.com">'hi again1'</a></p> 
 
    <div class="d"> 
 
     <p>'well this final1'</p> 
 
    </div> 
 
    </div> 
 
</div>

は、私たちの親タグであり、我々はこのタグの外に情報を吸うだろう、今では私は、このをループしなければならないことを意味しますすべてのページから情報を抽出します。

が、私はBeautifulSoupを理解することに苦労したので、私は私のコードは次のようである。この<div class= "a">の最初の反復から情報を抽出するために、Pythonコードで

をテストランをした:

soup = BeautifulSoup(r.text) 
find_hi =  soup.find('div',{'class':'a'}).div.text 
find_hi-again =soup.find('div',{'class':'a'}).find_all('div')[1].p.text 
find_final =soup.find('div',{'class':'a'}).find('div',{'class':'d'}).text 

print(find_hi , find_hi-again , find_final) 

#output comes as (it worked !!!) 
hi , hi again , this is final 

注:私は本当にこの1つに固執したいので、全く新しい方法で廃棄してはいけません。今私ははすべてのページにループするように見えません。 私はループのためにこれを試してみましたが、私が見たいと思った結果が表示されない:

soup = BeautifulSoup(r.text) 
#To have a list of all div tags having this class 
scrapping = soup.find_all('div',{'class':'a'}) 
for i in scrapping: 
    find_hi =  i.div.text 
    find_hi-again =i.find_all('div')[1].p.text 
    find_final =i.find('div',{'class':'d'}).text 

print(find_hi , find_hi-again , find_final) 

ループに助けてください?

+0

表示される結果は何ですか? – sushant

+0

結果が表示されていますが、異なる要素が表示されているのではなく、同じタグの繰り返し要素が表示されています。*** hi、hiもう一度、この最終、hi、hi再度、 * hi、hiもう一度、よく最後に、hi1、hi again1、よく最終この1 ** –

+0

可能な限りURLを共有し、出力として期待するものは、あなたの現在のコードは意味がありません。 –

答えて

0

構文エラーの場合を除いて、私のコードは正常に動作します。find_hi-againは有効な変数名ではありません。

divs = soup.find_all('div',{'class':'a'}) 
for i in divs: 
    find_hi = i.div.text.strip() 
    find_hi_again = i.find_all('div')[1].p.text.strip() 
    find_final = i.find('div',{'class':'d'}).text.strip() 

    print(find_hi , find_hi_again , find_final) 

## (u"'hi'", u"'hi again'", u"'well this final'") 
## (u"'hi1'", u"'hi again1'", u"'well this final1'") 
+0

大きな実ページを試してみてください。そしてyaa私はそれがエラーをスローすることを知っているその名前を作った。 –

+0

私が実際にやっていることのコードをどのように共有するのですか? –

+0

私はそれがいくつかのサイトでは動作しませんと私はexpediaとmakemytripで試して動作していないと思う答えを確認していただきありがとうございます –

関連する問題