从Tripadvisor网页上抓取电子邮件地址

时间:2020-07-15 16:51:35

标签: python beautifulsoup python-requests tripadvisor

我正在尝试使用Python-BS4请求从以下网页中抓取电子邮件地址,但是该电子邮件地址无法在源代码中访问。

https://www.tripadvisor.in/Attraction_Review-g189400-d2020955-Reviews-Chat_Tours-Athens_Attica.html

该电子邮件地址在我的邮件应用程序中打开,但是在页面源中找不到指向该地址的链接。 我知道可以通过观察“网络”标签并发出与网站相同的帖子请求来完成此操作,但是无法使其正常工作。

enter image description here

enter image description here

提前谢谢!

1 个答案:

答案 0 :(得分:1)

电子邮件是在页面上的Json变量内以Base64编码的。

您可以使用此示例获取在页面上找到的所有电子邮件:

import re
import json
import base64
import requests
from bs4 import BeautifulSoup


url = 'https://www.tripadvisor.in/Attraction_Review-g189400-d2020955-Reviews-Chat_Tours-Athens_Attica.html'

html_data = requests.get(url).text
data = re.search(r'window\.__WEB_CONTEXT__=(\{.*?\});', html_data).group(1)
data = json.loads(data.replace('pageManifest', '"pageManifest"'))

def get_emails(val):
    if isinstance(val, dict):
        for k, v in val.items():
            if k == 'email':
                if v:
                    yield v
            else:
                yield from get_emails(v)
    elif isinstance(val, list):
        for v in val:
            yield from get_emails(v)

for email in get_emails(data):
    email = base64.b64decode(email).decode('utf-8')
    email = re.search(r'mailto:(.*)_', email).group(1)

    print(email)

打印:

chat@chatours.gr