使用 Python 从 reCAPTCHA protecred 网站抓取数据

Scraping data with Python from reCAPTCHA protecred website

我一直在尝试从网站上抓取一些信息供个人使用。它运行良好,没有错误,但我发现它无法从网站的后半部分看到电子邮件地址。我使用的代码:

import requests
from bs4 import BeautifulSoup

page = requests.get('https://rejestradwokatow.pl/adwokat/abramowicz-joanna-49486')
soup = BeautifulSoup(page.content, "html.parser")

kancelaria = [x.strip() for x in soup.find(
    'div', class_='mb_tab_content special_one').find_all('div')[::2][0].text.split('\n') if x != ''][1:]

结果:

>>> kancelaria
['Kancelaria Adwokacka', 'Chlebnicka 48/51', '80-830 Gdańsk', '', 'Stacjonarny/Fax: 583054010', 'Email: [email\xa0protected]']

请注意最后一个元素:'Email: [email\xa0protected]'。我相信这与网站中实施的 reCAPTCHA 机制有关,但我不知道如何绕过它。有趣 - 来自网站前半部分的电子邮件对于我的程序是可见的并且可以被抓取。 Anh 想法?

编辑: 我正在参考页面的下半部分:

要仅获取电子邮件,请输入以下内容:

email_1st_part = soup.find('div', class_="address_e").get('data-ea')
email_2nd_part = soup.find('div', class_="address_e").get('data-eb')
email = email_1st_part + '@'+ email_2nd_part

完整代码:

import requests
from bs4 import BeautifulSoup

page = requests.get('https://rejestradwokatow.pl/adwokat/abramowicz-joanna-49486')
soup = BeautifulSoup(page.content, "html.parser")


email_1st_part = soup.find('div', class_="address_e").get('data-ea')
email_2nd_part = soup.find('div', class_="address_e").get('data-eb')
email = email_1st_part + '@'+ email_2nd_part

结果:

print(email)
'abramowicz@pro.onet.pl'

电子邮件是用 CSS 生成的。您必须提取 div data-eadata-eb 中的属性值并加入 @

name = soup.find('div', class_="address_e").get('data-ea')
domain = soup.find('div', class_="address_e").get('data-eb')
email = f'{name}@{domain}'

我要为此添加另一个答案: 那个是由 Javascript 创建的,您可以使用 Selenium 对其进行测试。代码如下。

from selenium import webdriver
import chromedriver_autoinstaller

# auto install chromedriver
chromedriver = chromedriver_autoinstaller.install()

# driver define and lunch
driver = webdriver.Chrome(chromedriver)
driver.maximize_window()

# Go to website and get email
url = 'https://rejestradwokatow.pl/adwokat/artymiak-grzegorz-46439'
driver.get(url)
email_text = driver.find_element_by_xpath('//div[@class="mb_tab_content special_one"]/div[@class="line_list_K"]').text.split('Email: ')
email = email_text[-1]

print(email)
gartymiak@protonmail.com