Извлеките почтовый адрес с веб-сайта, используя Python - PullRequest
0 голосов
/ 10 июля 2020

community,

Недавно я начал писать код и сейчас работаю над своим первым проектом, используя Python3, urllib, BeautifulSoup, RegEx и SQLite. Моя цель - собрать базу данных о стартапах, включая их имена, URL-адреса веб-сайтов, отрасль и почтовые адреса.

До сих пор мой подход заключался в том, что я вставляю ссылку на страницу портфолио V C извлеките ссылку на компании, получите html отпечатка сайта компании и сохраните все это в базе данных SQLite. Большинство из них работает (кроме некоторых крайних случаев). Моя проблема заключается в получении почтовых адресов из HTML. Я пробовал несколько подходов к регулярным выражениям, но на самом деле ничего не работало, так как форматирование на разных веб-сайтах настолько разнообразно. Кроме того, этот пост заставил меня почувствовать, что я нахожусь на неправильном пути, пытаясь в первую очередь использовать регулярное выражение для HTML.

Есть какие-нибудь предложения о том, как выполнить эту работу?

(Я знаю, что есть несколько существующих баз данных (crunchbase, ...), которые я мог бы использовать, но я бы предпочел использовать эту возможность, чтобы попрактиковаться в парсинге) Ура, март c

import sqlite3
import urllib.error
import ssl
import re
from urllib.request import urlopen
from bs4 import BeautifulSoup

conn = sqlite3.connect('startupmap.sqlite')
cur = conn.cursor()
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE

document = urlopen('https://about.eslgaming.com/imprint/',context=ctx)
html = document.read()

print('Type html:' , type(html))
soup = BeautifulSoup(html,'html.parser')
html_text = soup.get_text()
print(html_text)
print('Type html_text:' , type(html_text))

print(soup.prettify())
address = re.findall('\s[0-9]{5}\s+[a-zA-ZäöüÄÖÜ]+',html_text)
print('Address:' ,address)

И это часть информации (выделена желтым), которую я пытаюсь получить:

Адрес компании со страницы выходных данных

Некоторые из форматов, с которыми я сталкивался, и их гораздо больше:

  • Street, Nr., Zip, City в одной строке внутри абзаца с другой информацией (https://n26.com/en-de/imprint )
  • Название компании, улица + номер, почтовый индекс + город, страна на отдельных строках в блоке div (https://www.getyourguide.com/legal)
  • Заголовок «Адрес компании» , улица + номер, почтовый индекс + город, страна на отдельных строках внутри абзаца (https://www.wirecard.com/de/impressum)
* 10 38 * Отдельные страницы различаются с точки зрения предоставляемой информации (юридическое название компании, улица + номер, почтовый индекс, город, страна, юридические идентификационные номера, такие как налоговый идентификатор или другая информация), стиля (в тексте, в одной строке, на отдельные строки), и в каком типе контейнера они находятся (div, paragraph, ...)

Иногда адреса предоставляются в том же xpath, что и h1 или h2 с текстом «Imprint» или Контакты ». К сожалению, это далеко не стандарт.

...