0

Ich versuche, Analyse auf yelp Bewertungen zu tun, und ich habe Probleme, durch mehrere Überprüfungen zu schlängeln. Mein aktueller Code:Wie man eine Listennummerreferenz durchläuft

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  

Ergebnisse [0] bezieht sich auf die erste Überprüfung. Ich möchte, dass es weitergeht, um 1, 2 usw. zu überprüfen. Kann jemand das Ergebnis in first_result durchlaufen?

Danke, Nazar

+0

Welcher Typ ist 'Ergebnisse'? Eine Liste von ...? Und was versuchst du mit dem Beginn der Schleife zu erreichen? – Miket25

+1

'results [len (a)]' sollte zu 'TypeError' als Objekt vom Typ' int' führen hat keine 'len()'. Meinst du "Ergebnisse [a]"? Beachten Sie auch, dass 'a <21: a + = 1 'keinen Sinn zu haben scheint. Sie können einfach die Zeile 'first_result = results [21]' verwenden – Andersson

Antwort

1

Es sollte noch Ergebnisse (a), nicht Ergebnisse (len (a)):

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

Auch dies mit einer besser abgeschnitten for-Schleife werden könnte:

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

Dies wird jedoch nur resetting first_result auf alles in den Ergebnissen zurückgesetzt. Anscheinend gibt es hier viele Formatierungsprobleme, die behoben werden müssen.

0

Die ersten Zeilen der for-Schleife sind redundant. Wie Evan Nowak vorgeschlagen,

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

wäre eine gute Wahl. Aber da results eine Liste ist, können Sie es verkürzen weiter:

for result in result: 

In Ihrem ursprünglichen Code, sind Sie nicht mit der result Variable irgendwo anders als für sie zu first_result zuweisen. Sie können einen von ihnen komplett eliminieren und vielleicht "first_result" überall in Ihrem Code in "result" ändern.

Des Weiteren sind Sie hart codierte den Wert 0 in der inneren for-Schleife:

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

Ich glaube nicht, das ist beabsichtigt. Also, wenn das übersehen wurde, ändere es.

Schließlich werfen Sie einen Blick auf The Best of the Best Practices (BOBP) Guide for Python, um weitere Tipps für eine bessere Formatierung und allgemeine Codierungspraktiken zu erhalten.

Verwandte Themen