Python tripadvisor上的餐厅url是经过编码的,所以我无法抓取它

Python tripadvisor上的餐厅url是经过编码的,所以我无法抓取它,python,beautifulsoup,python-requests,Python,Beautifulsoup,Python Requests,所以我想在TripAdvisor上搜索一个餐馆的url。问题是,当我在HTML中找到任何餐厅的链接时,它看起来都是经过编码的。例如,在本餐厅的网站上: https://www.tripadvisor.co.uk/Restaurant_Review-g186338-d13544747-Reviews-Amrutha_Lounge-London_England.html 可以直接访问网站的元素在HTML中显示以下内容 data-encoded-url="UEJDX2h0dHA6Ly93d3cuYW

所以我想在TripAdvisor上搜索一个餐馆的url。问题是,当我在HTML中找到任何餐厅的链接时,它看起来都是经过编码的。例如,在本餐厅的网站上:

https://www.tripadvisor.co.uk/Restaurant_Review-g186338-d13544747-Reviews-Amrutha_Lounge-London_England.html
可以直接访问网站的元素在HTML中显示以下内容

data-encoded-url="UEJDX2h0dHA6Ly93d3cuYW1ydXRoYS5jby51ay9fdkoz"

如何获取实际的网站?

您可以执行以下操作:

import base64
code = "UEJDX2h0dHA6Ly93d3cuYW1ydXRoYS5jby51ay9fdkoz"
decoded = base64.b64decode(code)
print(decoded.decode()) # prints PBC_http://www.amrutha.co.uk/_vJ3

你可能想去掉前缀PBC_uu和后缀vJ3。

塞缪尔的答案更好,它实际上是一个问题的解决方案,但谁知道也许你可以在其他情况下使用它。在这种特殊情况下,您还可以在脚本标记上使用正则表达式,它隐藏站点链接

import re, requests
from bs4 import BeautifulSoup as bs
url = 'https://www.tripadvisor.co.uk/Restaurant_Review-g186338-d13544747-Reviews-Amrutha_Lounge-London_England.html'

regex = re.compile(r'\"website\":\"http[s]?://www\.[\w]+\.[\w]+[\.]?[\w]+/\"')

response = requests.get(url)
bSoup = bs(response.text, 'html.parser')

soup = bSoup.find_all('script', text=regex)
link = regex.findall(str(soup[0]))
print(link[0][11:-1])
我编辑了这篇文章并做了一些解释。谢谢你的建议


好的,这段代码将找到一个网站链接,该链接使用BeautifulSoup和正则表达式存储在标记中。bSoup.find_all'script',text=regex查找两个标记。在第一个soup[0]中,存储了网站链接。因为不止一个链接,tripadvisor网站的链接也很少,所以我使用了上面显示的regex来查找所需的链接,即酒店网站的链接。因为regex返回的是website:,所以我用链接[0][11:-1]对它进行了切片,它只返回了

如果您稍微解释一下代码的作用,可能会有所帮助。它会找到一个网站链接,该链接使用BeautifulSoup和正则表达式存储在标记中。bSoup.find_all'script',text=regex查找两个标记。在第一个链接[0]中,存储了网站链接。因为不止一个链接,tripadvisor网站的链接也很少,所以我使用了上面显示的regex来查找所需的链接,即酒店网站的链接。因为regex返回的是网站:,所以我用链接[0][11:-1]将其切分,它只返回而已。对不起,我搞错了。第一个标记不是存储在链接[0]中,而是存储在汤[0]中。@您应该将此信息添加到您的答案中,而不是作为注释。您可以编辑您的答案:Ok。Thanx,我会: