0

私は昆虫のレビューに関する分析をしようとしていますが、複数のレビューで問題が繰り返されています。現在のコード:リスト番号の参照をループする方法

import requests 
from bs4 import BeautifulSoup 
r = requests.get('https://www.yelp.com/biz/pizzafire-cleveland') 
soup = BeautifulSoup(r.text, 'html.parser') 
results = soup.find_all('div', class_='review review--with-sidebar') 

records=[] 
for result in results: 
    a = 0 
    while a<21: 
     a += 1 
    first_result = results[len(a)] #this is where my code is breaking 

#get review 
    REV1 = first_result.find('p').text 
    print REV1 


#get date 
    Date = first_result.find('span', class_='rating-qualifier').text 
    print Date 

#get username 
    username = first_result.find('li', class_='user-name').text 

#get user location 
    userlocation = first_result.find('b').text 

#get userrating 
    userrating = first_result.find('img', class_='offscreen').get('alt') 

#get userstats 
    userstats = first_result.find('ul', class_='user-passport- 
    stats').text.split() 

    friendcount = userstats[0] 
    reviewcount = userstats[2] 
    photouploadcount = userstats[4] 
    yelpstatus = userstats[6] 

#get user link 
    links=[] 
    for a in results[0]('a', href=True): 
     links.append(a['href'].split()) 

    userlink= str(links[0])[4:-2] 
    print userlink  

結果[0]は最初のレビューを参照してください。私は1、 2などをレビューするつもりです。誰もfirst_resultの結果をループする方法を知っていますか?

それはまだ結果(a)は、ない結果(LEN(A))である必要があり、 ナザール

+0

「結果」はどのようなタイプですか?のリスト ...?そして、最初のループで何を達成しようとしていますか? – Miket25

+1

'results [len(a)]'は 'TypeError'に導かれ、' int'型のオブジェクトは 'len()'を持ちません。あなたは 'results [a]'を意味しますか? 'a <21:a + = 1 'の間に意味がないように見えることにも注意してください。あなたは単一行 'first_result = results [21]'を使うことができます – Andersson

答えて

1

ありがとう:

a = 0 
while a < 21: 
    a += 1 
    first_result = results[a] 

また、このループのために、より良い行うことができたに:

for a in range(21): 
    first_result = results[a] 

ただし、first_resultは結果のすべてにリセットされます。ここには書式設定の問題がたくさんあり、対処する必要があるようです。

0

forループの最初の数行は冗長です。 Evan Nowakが示唆したように、

for a in range(21): 
    first_result = results[a] 

が良い選択です。しかしresultsがリストされているので、あなたはそれをさらに短縮することができます:あなたの元のコードで

for result in result: 

を、あなたはfirst_resultに割り当てるため以外の場所result変数を使用していません。それらのうちの1つを完全に削除して、おそらく 'first_result'をコード内のどこでも 'result'に変更することができます。

さらに、あなたは、forループの内側に値0をハードコーディングしている:

for a in results[0]('a', href=True): 
    links.append(a['href'].split()) 

が、私はそれが意図的ではないと思います。それが見過ごされた場合は、変更してください。

最終的には、より良い書式設定と一般的なコーディング方法に関するヒントを入手するには、The Best of the Best Practices (BOBP) Guide for Pythonをご覧ください。