【发布时间】:2017-10-02 03:08:08
【问题描述】:
我正在尝试对 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
results[0] 指的是第一次审查。我希望它继续审查 1, 2等。有谁知道如何循环遍历first_result中的结果?
谢谢你, 纳扎尔
【问题讨论】:
-
results是什么类型?的列表 ...?你想用 for 循环的开头来完成什么? -
results[len(a)]应该导致TypeError,因为int类型的对象没有len()。你的意思是results[a]?另请注意,while a<21: a += 1似乎没有任何意义。你可以只使用单行first_result = results[21]
标签: python python-2.7 web-scraping beautifulsoup python-requests