Как извлечь электронную почту, телефон, номер факса и адрес из множества различных ссылок html, написав сценарий python? - PullRequest
0 голосов
/ 26 мая 2020

Я пробовал этот код, но он работает некорректно (не извлекается со всех сайтов и т. Д. c и многие другие проблемы с этим). Нужна помощь!

from bs4 import BeautifulSoup

import re

import requests

allsite = ["https://www.ionixxtech.com/", "https://sumatosoft.com", "https://4irelabs.com/", "https://www.leewayhertz.com/",
           "https://stackoverflow.com", "https://www.vardot.com/en", "http://www.clickjordan.net/", "https://vtechbd.com/"]

emails = []

tels = []

for l in allsite:

    r = requests.get(l)
    soup = BeautifulSoup(r.content, "html.parser")
    for link in soup.findAll('a', attrs={'href': re.compile("^mailto:")}):
        emails.append(link.get('href'))
    for tel in soup.findAll('a', attrs={'href': re.compile("^tel:")}):
        tels.append(tel.get('href'))

print(emails)

print(tels)

1 Ответ

0 голосов
/ 27 мая 2020

это не проблема регулярного выражения и не проблема синтаксического анализа html. распечатайте r.content , и вы заметите (например, для https://vtechbd.com/), что фактический источник html, который вы анализируете, не совпадает с тем, который отображается вашим браузером когда вы заходите на сайт.

    <!-- Contact Page -->
<section class="content hide" id="contact">
    <h1>Contact</h1>
    <h5>Get in touch.</h5>
    <p>Email: <a href="/cdn-cgi/l/email-protection#44642d2a222b04323021272c26206a272b29"><span class="__cf_email__" data-cfemail="2e474048416e585a4b4d464c4a004d4143">[email&#160;protected]</span></a><br />

поэтому я предполагаю, что интересующая вас информация загружается динамически некоторыми javascript. Библиотека запросов python - это http-клиент, а не веб-парсер.

... также не круто просить людей отладить ваш код, потому что сейчас 17:00, вы хотите выйти из офиса и надеюсь, что кто-нибудь решит вашу проблему к завтрашнему утру ... Я могу ошибаться, но то, как задан ваш вопрос, оставляет у меня впечатление, что вы потратили 2 минуты на вставку исходного кода в ...

...