0

アマゾンの本のレビューを集めようとしています。これが私がこれまでに持っているものです:

import requests
from bs4 import BeautifulSoup

def data(site):
    url = site
    r = requests.get(url)
    soup = BeautifulSoup(r.text) 
    y = soup.find_all("div", style = "margin-left:0.5em;")
    words = []
    for item in y:
        item = str(item.text).split()
        words.append(item)
    reviews = [" ".join(x) for x in words]
    return reviews

f = data('http://www.amazon.com/Dance-Dragons-Song-Fire-Book/product-reviews/0553801473/ref=cm_cr_pr_top_link_11?ie=UTF8&pageNumber=11&showViewpoints=0&sortBy=bySubmissionDateDescending')

レビューに加えて、著者、タイトル、レビューが役に立ったと思った人の数など、無関係な情報も取得します。BeautifulSoup を使用して、レビューのテキスト以外をすべて除外する方法はありますか? レビューのテキストにはクラス属性やスタイル属性がなく、他の部分のテキストにもあります (私が思うに...) が、soup.find_all の結果をフィルタリングする方法が見つかりませんでした。助けていただければ幸いです。

4

1 に答える 1

0

すべてのレビューは で囲まれているtableため、最初に表を見つけてから、それぞれからレビュー テキストを抽出できます。

この行を変更すると、次のようになります。

...
y = soup\
    .find('table', {'id' : 'productReviews'})\ # here you find the table
    .find_all("div", style = "margin-left:0.5em;")
...
于 2012-12-31T06:34:25.830 に答える