Tripadvisor上的餐厅网址已编码,因此无法抓取

时间:2019-11-02 16:40:02

标签: python beautifulsoup python-requests

因此,我试图在TripAdvisor上抓取餐厅网址。问题是,当我在任何餐厅的HTML中找到链接时,它看起来都已编码。例如在这家餐厅:

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

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

data-encoded-url="UEJDX2h0dHA6Ly93d3cuYW1ydXRoYS5jby51ay9fdkoz"

如何获得实际的网站?

2 个答案:

答案 0 :(得分:2)

您可以执行以下操作:

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

您可能想摆脱前缀PBC_和后缀_vJ3

答案 1 :(得分: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)找到两个标签。在第一个中,汤[0],网站链接被存储。因为不仅只有一个链接,所以没有更多的Tripadvisor网站链接,我使用了正则表达式,如上图所示,它只找到需要的一个,即指向酒店网站的链接。因为正则表达式返回“ website”:“ http://www.amrutha.co.uk”,所以我用link [0] [11:-1]对其进行了切片,它仅返回http://www.amrutha.co.uk