我正在寻找使用刮板为镇上的汽车旅馆返回Yelp评论的方法。我需要做的就是在评论中搜索关键字,例如“霉菌”,并提供给汽车旅馆,以及评论本身。我有一些代码(我正在使用Jupyterhub),但似乎只给了我汽车旅馆名称。
import json
from bs4 import BeautifulSoup
api_key = '#insert key here'
headers = {'Authorization': 'Bearer %s' % api_key}
url = 'https://api.yelp.com/v3/businesses/search'
params = {'term':'motel','location':'Williamsburg, VA'}
req = requests.get(url, params=params, headers=headers)
parsed = json.loads(req.text)
businesses = parsed["businesses"]
business_url_list = [business["url"] for business in businesses]
print(businesses)
biznames=[]
for val in businesses:
biznames.append(val['name'])
print(biznames)
review_list_master = []
for i in business_url_list:
continue_search = True
reviews_list = []
while continue_search == True:
html_doc = requests.get(i).content
parsed_html = BeautifulSoup(html_doc, 'lxml')
target_rows_url = parsed_html.findAll('div',attrs={'class','review-content'})
for x in target_rows_url:
new_text = x.text.strip().replace('\n','')
date_break_point = new_text.find(' ')
reviews_list.append(new_text[date_break_point+4:len(new_text)])
try:
target_rows_new = parsed_html.find('a',attrs={'class','u-decoration-none next pagination-links_anchor'})
new_url = target_rows_new.get('href')
i = new_url
except:
continue_search = False
review_list_master.append(reviews_list)
print(target_rows_url)
print(parsed_html)
for i in range(len(review_list_master)):
print(biznames[i])
#print(len(review_list_master[i]))
for x in review_list_master[i]:
print(x)
print()
print("------")
任何建议将不胜感激。我是编码方面的新手,并且尝试使用了很多刮板,似乎无法工作。
您似乎使用了错误的端点。如果要分析评论,则需要使用https://www.yelp.com/developers/documentation/v3/business_reviews
。当前使用的'https://api.yelp.com/v3/businesses/search'
只是让您搜索商家,而评论内容不是您可以搜索的字段之一(尽管这是您想要的)。
遗憾的是,解决此问题并非易事,因为这意味着您需要进行大量的API调用(每个业务一个)来获得评论,然后将其存储在自己的存储中。将它们存储在本地/内存/任何位置后,您可以使用自己的关键字在它们中进行搜索,
而且,不幸的是,business_reviews端点似乎每个企业最多只能提供三个评论。我不确定为什么要设置该限制(或者如果您为API付费则可以取消该限制)。