如何遍历列表编号参考

时间:2017-10-02 03:08:08

标签: python python-2.7 web-scraping beautifulsoup python-requests

我试图对yelp评论做分析,而且我在循环浏览多个评论时遇到了问题。我目前的代码:

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中循环结果?

谢谢你, 纳扎尔

2 个答案:

答案 0 :(得分:0)

它应该仍然是结果(a),而不是结果(len(a)):

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

此外,使用for循环可以更好地执行此操作:

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

然而,这只会将first_result重置为结果中的所有内容。似乎这里有很多格式问题需要解决。

答案 1 :(得分:0)

for循环的前几行是多余的。正如埃文诺瓦克所说,

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

将是一个不错的选择。但由于results是一个列表,您可以进一步缩短它:

for result in result:

在原始代码中,除了将result变量分配给first_result之外,您没有使用for a in results[0]('a', href=True): links.append(a['href'].split()) 变量。您可以完全删除其中一个,也可以在代码中的任何位置将'first_result'更改为'result'。

此外,您正在对内部for循环中的值0进行硬编码:

{{1}}

我认为这不是故意的。所以,如果忽略了这一点,请改变它。

最后,请查看The Best of the Best Practices (BOBP) Guide for Python以获取有关更好格式化和常规编码实践的更多提示。