Python - 从表中提取数据的爬虫

Python - Crawler to Extract Data from Tables

我正在尝试从 Agoda (http://www.agoda.com/grand-hyatt-taipei/hotel/taipei-tw.html) 中提取客户评论部分。我感兴趣的数据在'div id = "hotelreview-panel" '下,其中包括不同类型旅行者(例如商务旅行者)的评论数量以及每种类型旅行者相应的KPI量表(例如Value for Money)。

我有两个问题:

(1) 我无法通过BeautifulSoup的查找函数找到右边的table。存在 table class "customer-review-category-issues" 但它一直返回 none。

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]?

问题是:评论和页面的其他部分是通过对服务的额外 XHR 请求动态加载的 API。如果您打开开发人员工具并仅过滤 XHR 请求,您将看到:

如果您打算继续使用 requests+BeautifulSoup,您可能会对模拟对 "GetReviewScore" 和 "GetReviewComments" 端点的请求感兴趣。

或者,您可以采取更 "high-level" 的方法并使用 selenium 自动化一个真正的浏览器。