-4

所以我想在 TripAdvisor 上抓取一个餐厅的网址。问题是,当我在任何餐厅的 HTML 中找到链接时,它看起来像是经过编码的。例如在这家餐厅:

https://www.tripadvisor.co.uk/Restaurant_Review-g186338-d13544747-Reviews-Amrutha_Lounge-London_England.html

您可以直接访问网站的元素在 HTML 中显示以下内容。

data-encoded-url="UEJDX2h0dHA6Ly93d3cuYW1ydXRoYS5jby51ay9fdkoz"

我怎样才能得到实际的网站?

4

2 回答 2

2

您可以执行以下操作:

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

你可能想去掉前缀PBC_和后缀_vJ3

于 2019-11-02T18:12:29.620 回答
0

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

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 网站链接也很少,我使用正则表达式,如上所示,只找到一个需要的链接,链接到酒店网站。因为正则表达式返回“网站”:“ http://www.amrutha.co.uk ”,所以我用链接 [0][11:-1] 对其进行切片,它只返回http://www.amrutha.co.uk .

于 2019-11-02T19:04:30.427 回答