@sanglobalenus

Как вытащить email со страницы?

Добрый день!

Нужно спарсить контактную информацию с сайта https://www.malls.ru/rus/malls/?mainmenu.

Написал следующий парсер:

import requests
from bs4 import BeautifulSoup 
import pandas as pd
import re

t = []
links = []
for i in range(1,3):
    r = requests.get(f'https://www.malls.ru/rus/malls/?mainmenu=&nocdn=nocdn&PAGEN_1={i}')
    i_1 = re.findall(r'a href=(.+?) title', r.text)
    links.append(i_1)
    
linnks_itog = []
for u in links:
    t = u[1:16]
    linnks_itog.append(t)

linnks_itogs = []
for y in linnks_itog:
    for p in y:
        o = 'https://www.malls.ru' + p
        o = o.replace('"', '')
        linnks_itogs.append(o)

name_torg_center = []
telepfon = []
name_contact = []

for l in linnks_itogs:
    rt = requests.get(l)
    name_tc = re.findall(r'<h1 itemprop="name">(.+?)</h1>', rt.text)
    name_torg_center.append(name_tc)
 
    telepfon_tc = re.findall(r'<span itemprop="telephone">(.+?)</span>', rt.text)
    telepfon.append(telepfon_tc)
  
    name_contact_tc = re.findall(r'<div class="name">(.+?)</div>', rt.text)
    name_contact.append(name_contact_tc)


Дошел до e-mail и не пойму как достать его лучшим способом... Так как ответ requests выдает следующий

<a href="/cdn-cgi/l/email-protection#2d44585b6d414c404c035942405e46035f58" title="iuv@lama.tomsk.ru"><span itemprop="email"><span class="__cf_email__" data-cfemail="523b2724123e333f337c263d3f21397c2027">[email&#160;protected]</span>
  • Вопрос задан
  • 282 просмотра
Решения вопроса 2
@davGro
Шушуть люблю питон, по шушуть тыкаю где-то год.
Костыльное решение, но рабочее для вашего случая:

test_string = '<a href="/cdn-cgi/l/email-protection#2d44585b6d414c404c035942405e46035f58" title="iuv@lama.tomsk.ru"><span itemprop="email"><span class="__cf_email__" data-cfemail="523b2724123e333f337c263d3f21397c2027">[email&#160;protected]</span>'

email = test_string.split('title="')[1].split('"')[0]

Есть готовые регулярные выражения для нахождения e-mail адресов, от самых простых до очень больших и сложных.

По примеру этого решения можно сделать так:

>>> import re
>>> test_string = '<a href="/cdn-cgi/l/email-protection#2d44585b6d414c404c035942405e46035f58" title="iuv@lama.tomsk.ru"><span itemprop="email"><span class="__cf_email__" data-cfemail="523b2724123e333f337c263d3f21397c2027">[email&#160;protected]</span>'
>>> match = re.findall(r'[\w\.-]+@[\w\.-]+', test_string)
>>> match
['iuv@lama.tomsk.ru']


Надеюсь, мой ответ вам помог
Ответ написан
Комментировать
SoreMix
@SoreMix Куратор тега Python
yellow
Так же, как и обычный элемент. Через bs4 с помощью xpath либо других селекторов.
Ну или если нужен регекс, то

mail = re.search('title="(.+?)"><span itemprop="email"', html)
print(mail.group(1))
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
22 мая 2024, в 10:07
25000 руб./за проект
22 мая 2024, в 10:04
2000 руб./за проект
22 мая 2024, в 09:45
3000 руб./за проект