我正在尝试从Agoda(http://www.agoda.com/grand-hyatt-taipei/hotel/taipei-tw.html)中提取客户评论部分。我感兴趣的数据在'div id =“ hotelreview-panel”'下,其中包括不同类型的旅行者(例如,商务旅行者)进行的评论数量以及相应的KPI量表(例如,物有所值)每种类型的旅行者。
我有两个问题:
(1)我无法通过BeautifulSoup的查找功能到达正确的表。存在表类“ customer-review-category-issues”,但它始终不返回任何表。
import requests
import math
import csv
from bs4 import BeautifulSoup
HotelNames = ['grand-hyatt-taipei']
with open('agoda_hotel_reviews.csv', 'w') as csvfile:
for iHotel in HotelNames:
url = "http://www.agoda.com/"+iHotel+"/hotel/taipei-tw.html"
res = requests.get(url)
soup = BeautifulSoup(res.text, 'html.parser')
table_review = soup.find("table", {"class" : "customer-review-category-issues"})
record_rev = []
for row in table_review.findAll('tr'):
col = row.findAll('td')
rev_issue = col[1].string.split('\n').strip()[0]
rev_count = col[1].string.split('\n').strip()[1]
record_rev.extend([rev_issue], [rev_count])
filewriter = csv.writer(csvfile, delimiter='|', lineterminator='\n')
filewriter.writerow(record_rev)
(2)当我切换到不同的旅行者类型时,如何提取KPI,以便我的返回列表变成类似[所有评论,35、8.1、9.2、9.0、9.1、9.1、8.3,商务旅行者,10、7.8、8.6, 8.4、8.6、8.6、7.2],即[旅客类型,评论数量,KPI 1(物有所值),KPI 2(位置),... KPI 6]?
最佳答案
问题是:评论和页面的其他部分会随着对服务API的其他XHR请求而动态加载。如果您打开开发人员工具并仅过滤XHR请求,则会看到:
如果打算使用requests
+ BeautifulSoup
,则可能对模拟对“ GetReviewScore”和“ GetReviewComments”端点的请求感兴趣。
或者,您可以采用更“高级”的方法,并使用selenium
自动化真正的浏览器。