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

时间:2015-10-23 13:57:26

标签: python beautifulsoup web-crawler html-table

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

我有两个问题:

(1)我无法通过BeautifulSoup的find功能到达正确的表格。存在表类"客户审查类别问题"但它一直没有返回。

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

1 个答案:

答案 0 :(得分:1)

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

enter image description here

如果您计划使用requests + BeautifulSoup,则可能有兴趣模拟对“GetReviewScore”和“GetReviewComments”端点的请求。

或者,您可以采用更“高级”的方法,并使用selenium自动化真正的浏览器。