2017-05-18 2 views
0

このpostでは、Amazon.comの製品情報/製品の詳細表をどのように掻き集めるかの解決策がalecxeによって提供されています。ただし、その記述テーブルの形式は、アマゾンに掲載されている新しい項目の多くとは異なります。BeautifulSoupを使用してAmazon.comで商品情報の新しいフォーマットを掻き分ける方法は?

hereが表示される古い形式は、新しい形式hereとは異なります。コードでalecxeによって与えられた彼は

for li in soup.select('table#productDetailsTable div.content ul li'): 

を使用して、私はこれを変更しようとした(そしてそれの後に、すべてを削除):

for tr in soup.select('table#productDetails_detailBullets_sections1 tbody tr'): 
    print text.tr 
    print(repr(tr)) 

私ができるようになるかどうかを確認するために私が試した何

製品情報テーブルから少なくとも何かを抽出する。しかし、何も印刷されません。

私もfind_all()find()の機能を試しましたが、私が必要としていたものや必要なものに近いものを抽出できませんでした。

これは、新しいテーブルのHTMLの構造によって発生しています。それはのようなものを見て:私はちょうど「おもちゃ&ゲーム>パズル>ジグソーパズル」のための売り手のランクを抽出したい場合は

<table ... > 
<tbody> 
. 
. 
.  
<tr> 
    <th class="a-color-secondary a-size-base prodDetSectionEntry"> 
     Best Sellers Rank 
    </th> 
    <td> 
     <span> 

       <span>#8,740 in Toys &amp; Games (<a href="/gp/bestsellers/toys-and-games/ref=pd_dp_ts_toys-and-games_1">See Top 100 in Toys &amp; Games</a>)</span> 
     <br> 

       <span>#67 in <a href="/gp/bestsellers/toys-and-games/ref=pd_zg_hrsr_toys-and-games_1_1">Toys &amp; Games</a> &gt; <a href="/gp/bestsellers/toys-and-games/166359011/ref=pd_zg_hrsr_toys-and-games_1_2">Puzzles</a> &gt; <a href="/gp/bestsellers/toys-and-games/166363011/ref=pd_zg_hrsr_toys-and-games_1_3_last">Jigsaw Puzzles</a></span> 
     <br> 

       <span>#87 in <a href="/gp/bestsellers/toys-and-games/ref=pd_zg_hrsr_toys-and-games_2_1">Toys &amp; Games</a> &gt; <a href="/gp/bestsellers/toys-and-games/251909011/ref=pd_zg_hrsr_toys-and-games_2_2">Preschool</a> &gt; <a href="/gp/bestsellers/toys-and-games/251910011/ref=pd_zg_hrsr_toys-and-games_2_3">Pre-Kindergarten Toys</a> &gt; <a href="/gp/bestsellers/toys-and-games/251942011/ref=pd_zg_hrsr_toys-and-games_2_4_last">Puzzles</a></span> 
     <br> 

     </span> 
    </td> 
    </tr> 
. 
. 
. 
</tbody> 
</table> 

どのように私はそれを行うことになっていますか? (第2で、少なくともこの場合は、上記のHTMLのテキスト)

答えて

1

は、私はいくつかの小さな調整であなたのコードの作品を​​作ることができる:soup.select

  1. 削除「のtbody」、それは生成されたタグですブラウザ
  2. プリントtr.textないtext.tr

コード:

for tr in soup.select('table#productDetails_detailBullets_sections1 tr'): 
    if 'Jigsaw Puzzles' in tr.text : 
     print(tr.text.strip()) 

それとも、find/find_allを好む場合:

for tr in soup.find('table', id='productDetails_detailBullets_sections1').find_all('tr') : 
    if 'Jigsaw Puzzles' in tr.text : 
     for span in tr.find('span').find_all('span') : 
      if 'Jigsaw Puzzles' in span.text : 
       print(span.text.strip()) 
+0

はい、これは動作します。しかし、「おもちゃ&ゲーム>パズル>ジグソーパズル」で#89を取得する方法はありますか? – user2330624

+0

2番目の例を使用します。私はそれを更新しました –

+0

ありがとうございます。非常に奇妙な。プログラムを複数回実行すると、「玩具とゲーム>パズル>ジグソーパズル」または「玩具&ゲーム>パズル>ジグソーパズル」の#103が印刷されます。これまたはこのプログラムと同様のプログラムについて詳しく説明している情報源はありますか? – user2330624

関連する問題