当前位置: 首页 > 知识库问答 >
问题:

想知道如何在tripadvisor上爬行吗

翟嘉年
2023-03-14

我正在尝试获取新加坡餐馆的所有url链接,但我的代码不起作用

data = requests.get("https://www.tripadvisor.com.sg/Restaurants-g294265-Singapore.html").text

soup = BeautifulSoup(data, "html.parser")

for link in soup.find_all('a', {'property_title'}):
    print('https://www.tripadvisor.com/Restaurant_Review-g294265-' + link.get('href'))
    print(link.string)

它在代码soup=beautifulsou(数据,“html.parser”)

我不知道为什么会发生这种情况,即使这对其他网站很有效。

这是因为行车顾问程序块爬行还是代码错误?

共有1个答案

锺离飞尘
2023-03-14

它不断地加载,再加载

要获得响应,请添加用户代理标题

headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
}

data = requests.get(
    "https://www.tripadvisor.com.sg/Restaurants-g294265-Singapore.html", headers=headers
).text

但是数据是动态加载的,请求不支持动态加载页面。但是,网站上提供了JSON格式的文件(不清楚您想要刮取什么)。要获取所有数据,您可以使用json/re模块:

import json
...

data = requests.get(
    "https://www.tripadvisor.com.sg/Restaurants-g294265-Singapore.html", headers=headers
).text

json_data = re.search(r"window\.__WEB_CONTEXT__=({.*});", data, flags=re.MULTILINE).group(1)

print(
    # Prints all the data, you can use `json.loads` instead to access  the data instead
    json.dumps(json_data, indent=4)
)

要获取所有链接,请执行以下操作:

import re
import requests


headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
}

data = requests.get(
    "https://www.tripadvisor.com.sg/Restaurants-g294265-Singapore.html", headers=headers
).text

for link in re.findall(r'"detailPageUrl":"(.*?)"', data):
    print("https://www.tripadvisor.com.sg/" + link)

输出(截断):

https://www.tripadvisor.com.sg//Restaurant_Review-g294265-d1145149-Reviews-Grand_Shanghai_Restaurant-Singapore.html
https://www.tripadvisor.com.sg//Restaurant_Review-g294265-d1193730-Reviews-Entre_Nous_creperie-Singapore.html
https://www.tripadvisor.com.sg//Restaurant_Review-g294265-d1173583-Reviews-The_Courtyard-Singapore.html
https://www.tripadvisor.com.sg//Restaurant_Review-g294265-d4611806-Reviews-NOX_Dine_in_the_Dark-Singapore.html
https://www.tripadvisor.com.sg//Restaurant_Review-g294265-d13152787-Reviews-Positano_Risto-Singapore.html
 类似资料:
  • 问题内容: 只是问我是否有正确的理解 系统是打包出来的,是类println()是方法 如果这是错误的,请告诉我正确的答案是什么。 问题答案: 没有, 是类,它驻留在包中(这就是为什么您不需要导入它的原因)。 是class 的静态变量。它是 public ,因此您可以从外部访问它,并且它是 静态的, 因此它与类声明关联,而不与它的任何实例关联。 确实是一种方法。它是一个变量方法,它是一个实例。

  • 只是问我是否有正确的理解

  • 我试着阅读关于JS和React的书籍和观看视频,但我仍然没有更好地理解React道具

  • 我正在运行一些应用程序,其中应用程序必须知道它在PODMAN内部运行,没有任何额外的env变量,但容器中的PODMAN配置必须提供细节,而没有任何用户交互。 现在,我正在使用cat容器内部开始使用podman检查进程是否在容器内部。 有没有更好的方法来处理同样的问题?

  • 我想知道如何解析一个json对象,该对象将上载到我的服务器,以从中检索admob ad ID。 例子: 将发送到 任何帮助都将不胜感激! 编辑: 厌倦了这个: 我的Json文件:

  • 当我第一次在iphone上安装whatsapp时,当我打开它时,第一个屏幕已经知道我的sim卡位置并显示国家代码。whatsapp是怎么知道的?因为苹果拒绝所有以编程方式使用sim卡信息的应用程序。