请求 - 从基于api的网站中获取数据

2024-04-19 22:57:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我想得到来自this site的所有评论。在

首先,我使用以下代码:

import requests
from bs4 import BeautifulSoup

r = requests.get(
    "https://www.traveloka.com/hotel/singapore/mandarin-orchard-singapore-10602")

data = r.content
soup = BeautifulSoup(data, "html.parser")
reviews = soup.find_all("div", {"class": "reviewText"})

for i in range(len(reviews)):
    print(reviews[i].get_text())

但是这样,我只能从第一页得到评论。在

有人说我可以使用相同的requests模块来实现这一点。我找到了https://api.traveloka.com/v1/hotel/hotelReviewAggregate的api,但我无法读取参数,因为我不知道如何使用使用request payload方式的api。在

所以我希望有一个代码可以使用python或api的参数来获得所有的评论,从而在所有或特定的页面中获得对特定酒店的评论。在


Tags: 代码httpsimportcomapidataget评论
1条回答
网友
1楼 · 发布于 2024-04-19 22:57:30

查看network选项卡上的请求负载。有一部分是skip:8top:8,当您单击右箭头以获得下一页评论时,您将看到这些数字以8递增。在

您可以复制该请求并以相同的方式获取结果

编辑:

用chrome打开你的页面并点击f12。转到Network选项卡,在页面底部向下滚动,在那里可以前进到下一批评论。一旦您点击右箭头,网络选项卡将被填充。找到第二个hotelReviewAggregate,然后单击它。在headers选项卡下,您将找到Request Payload。打开datadict并找到skip和{}。推进下一批评论,看看这些数字是如何变化的。您可以模拟此行为以访问其他页面。在

然后,您需要做的是准备有效负载,在这里您可以增加值并发出GET请求,并使用response objects来用beautifulGroup刮取数据。在

请求here

教程中的快速示例:

payload = {'key1': 'value1', 'key2': 'value2'} r = requests.get('http://httpbin.org/get', params=payload)

我不知道为什么人们不加解释就把我的答案给否定了。但是,如果你觉得这个有用并且回答了你的问题,请接受它。在

相关问题 更多 >