2016-12-13 10 views
-2

通常のtd/trフォーマットではなく画像を含むテーブルをhtmlからダウンロードしようとしています。 htmlコードは次のようになりますPythonを使用して画像を含むhtmlからテーブルを抽出する

<div class="dynamicBottom"> 
<div class="dynamicLeft"> 
<div class="content_block details_block scroll_tabs" data-tab="TABS_DETAILS"> 
<div class="header_with_improve wrap"> 
<a href="/UpdateListing.html" onclick="ta.setEvtCookie('UpdateListing', 'entry-detail-moreinfo', null, 0, '/UpdateListingRedesign')"><div class="improve_listing_btn ui_button primary small">improve this entry</div></a> 
<h3 class="tabs_header">Details</h3> </div> 
<div class="details_tab"> 
<div class="table_section"> 
<div class="row"> 
<div class="ratingSummary wrap"> 
<div class="histogramCommon bubbleHistogram wrap"> 
<div class="colTitle"> 
Rating 
</div> 
<ul class="barChart"> 
<li> 
<div class="ratingRow wrap"> 
<div class="label part "> 
<span class="text">Location</span> 
</div> 
<div class="wrap row part "> 
<span class="rate sprite-rating_s rating_s"> <img class="sprite-rating_s_fill rating_s_fill s45" src="https://static.tacdn.com/img2/x.gif" alt="45 out of fifty points"> 
</span> 
</div> 
</div> 
<div class="ratingRow wrap"> 
<div class="label part "> 
<span class="text">Service</span> 
</div> 
<div class="wrap row part "> 
<span class="rate sprite-rating_s rating_s"> <img class="sprite-rating_s_fill rating_s_fill s45" src="https://static.tacdn.com/img2/x.gif" alt="45 out of fifty points"> 
</span> 
</div> 
</div> 
</li> 

私はテーブルを取得したいと思います: [場所50箇所のうち45、50ポイントのうち サービス45]。

次のコードは、「場所」と「サービス」のみを出力し、評価は含まれません。

for url in urls: 
    r=requests.get(url) 
    time.sleep(delayTime) 
    soup=BeautifulSoup(r.content, "lxml") 
    data17= soup.findAll('div', {'class' :'dynamicBottom'}) 
    for item in (data17): 
     print(item.text) 

とコード

data18= soup.find(attrs={'class': 'sprite-rating_s_fill rating_s_fill s45'}) 
print(data18["alt"] if data18 else "No meta title given") 

それは明らかではないので、どちらかそれは唯一の「45 50ポイントのうち、」プリントアウトするが、それはどのカテゴリに明確ではありませんので、それが表す評価についてはありません。さらに、画像タグ( 'sprite-rating_s_fill rating_s_fill s45')は、評価によって他の表でも異なります。

完全なテーブルを抽出する方法はありますか? また、特定の単語の後に画像を抽出するようにPythonに指示することもできます。 "ロケーション"?

ありがとうございました!

答えて

0
html = '''<div class="dynamicBottom"> 
<div class="dynamicLeft"> 
<div class="content_block details_block scroll_tabs" data-tab="TABS_DETAILS"> 
<div class="header_with_improve wrap"> 
<a href="/UpdateListing.html" onclick="ta.setEvtCookie('UpdateListing', 'entry-detail-moreinfo', null, 0, '/UpdateListingRedesign')"><div class="improve_listing_btn ui_button primary small">improve this entry</div></a> 
<h3 class="tabs_header">Details</h3> </div> 
<div class="details_tab"> 
<div class="table_section"> 
<div class="row"> 
<div class="ratingSummary wrap"> 
<div class="histogramCommon bubbleHistogram wrap"> 
<div class="colTitle"> 
Rating 
</div> 
<ul class="barChart"> 
<li> 
<div class="ratingRow wrap"> 
<div class="label part "> 
<span class="text">Location</span> 
</div> 
<div class="wrap row part "> 
<span class="rate sprite-rating_s rating_s"> <img class="sprite-rating_s_fill rating_s_fill s45" src="https://static.tacdn.com/img2/x.gif" alt="45 out of fifty points"> 
</span> 
</div> 
</div> 
<div class="ratingRow wrap"> 
<div class="label part "> 
<span class="text">Service</span> 
</div> 
<div class="wrap row part "> 
<span class="rate sprite-rating_s rating_s"> <img class="sprite-rating_s_fill rating_s_fill s45" src="https://static.tacdn.com/img2/x.gif" alt="45 out of fifty points"> 
</span> 
</div> 
</div> 
</li>''' 
from bs4 import BeautifulSoup 
soup = BeautifulSoup(html, 'lxml') 
for div in soup.find_all('div', class_="ratingRow wrap"): 
    text = div.text.strip() 
    alt = div.find('img').get('alt') 
    print(text, alt) 

アウト:

Location 45 out of fifty points 
Service 45 out of fifty points 
+0

@F。ポールは、この質問を閉じるためにそれを受け入れてください。 –

関連する問題