Извлечение данных из <span>раздела веб-страницы - PullRequest
0 голосов
/ 04 ноября 2018

Я пытаюсь использовать Python и Beautiful soup, чтобы открыть ссылку и извлечь данные, встроенные в тег. Я пытался сделать это, но исчерпал свои знания.

Вот части моего кода и как выглядит текст, который я пытаюсь получить из

sauce = urllib.request.urlopen(link).read() #link is the url
soup = BeautifulSoup(sauce,'lxml')

yy = soup.select('span[id^=ctl00_ContentPlaceHolder1_Label1]')
y = yy[0]
print(y)

print (y) приводит к следующим данным:

        '<span id="ctl00_ContentPlaceHolder1_Label1"><div style="width:100%;clear:both;overflow:hidden;">\
        <div style="width:17%;float:left;margin-right:10px;"><span style="font-size:16px;font-weight:bold;"> \
        Licensee:</span></div><div style="float:left;"><span style="font-size:14px;font-weight:bold;">Company, INC.</span></div></div><div \
        style="width:100%;clear:both;overflow: hidden;"><div style="width:17%;float:left;margin-right:10px;"> \
        <span style="font-size:16px;font-weight:bold;">Facility:</span></div><div style="float:left;"> \
        <span style="font-size:14px;font-weight:bold;">Joes Shop</span></div></div><br/><b>Status:</b> \
        Licensed<br/><b>JOE SMITH - Director</b><br/><b>Phone:</b> (555)555-5555<br/> <span style="font-size:8pt"><table \
        border="1" style="padding:1px 1px 5px 1px;border:1px solid #999999;width:497px;border-collapse:collapse;"><tr><td \
        width="50%"><b>Daytime Hours:</b>  07:30 AM - 03:30 PM</td><td width="50%"><b>Nighttime Hours:</b>   \
        N/A - N/A</td></tr><tr><td width="50%"><b>Daytime Ages:</b>  4 YRS Through 5 YRS</td><td width="50%"><b> \
        Nighttime Ages:</b>  N/A</td></tr></table></span><br/><span style="font-size:12px;font-weight:bold;"> \
        Mailing Address:</span><br/><span style="font-size:12px;">1909 CENTRAL PARK</span><br/> \
        <span style="font-size:12px;">NEW YORK</span>, <span style="font-size:12px;">NY</span> \
        <span style="font-size:12px;">58756</span><br/><br/><span style="font-size:12px;font-weight:bold;"> \
        Street Address:</span><br/><span style="font-size:12px;">3996 Rhode Ave</span><br/> \
        <span style="font-size:12px;">Cleveland</span>, <span style="font-size:12px;">OH</span> <span style="font-size:12px;">58475</span></span>'

Я пробовал:

ystring = y.getText(separator=u' ')

Но из-за этого у меня остались только текст и заголовки, и все, что мне нужно, - это настоящее имя, номер телефона, адрес и т. Д.

В частности, я пытаюсь извлечь из этого следующее: Лицензиат (Компания, Inc), Учреждение (Магазин Joes), Статус (Лицензия), Директор (Джо Смит), Телефон ((555) 555-5555), Дневные часы (07:30 - 15:30), Ночные часы (N / A - N / A), Дневной возраст (от 4 YRS до 5 YRS), Ночной возраст (N / A), Почтовый адрес (Central Park, Нью-Йорк, 1909, Нью-Йорк, 58756 (отдельная улица, город, штат, почтовый индекс) через запятую и по адресу (3996 Rhode Ave, Cleveland, OH 58475))

Любые мысли или предложения приветствуются.

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Я думаю, что вы можете извлечь данные из y и перегруппировать их.

import re
html = "..."
print([ele.strip() for ele in re.findall("(?<=>).*?(?=<)",html) if ele.strip() not in ["",","]])

выход

['Licensee:', 'Company, INC.', 'Facility:', 'Joes Shop', 'Status:', 'Licensed',
 'JOE SMITH - Director', 'Phone:', '(555)555-5555',
 'Daytime Hours:', '07:30 AM - 03:30 PM',
 'Nighttime Hours:', 'N/A - N/A', 'Daytime Ages:', '4 YRS Through 5 YRS',
 'Nighttime Ages:', 'N/A', 'Mailing Address:', '1909 CENTRAL PARK',
 'NEW YORK', 'NY', '58756', 'Street Address:', '3996 Rhode Ave', 'Cleveland', 'OH', '58475']
0 голосов
/ 04 ноября 2018

.descendants дает вам всех детей тега, включая детей детей. Вы можете использовать это для поиска всех типов NavigableString (и удалить пустые). Ниже приведен фрагмент кода.

Оттуда это зависит от того, что вы хотите сделать: возможно, используйте регулярные выражения для поиска в списке и форматирования частей в соответствии с вашими спецификациями, осуществите некоторое статическое извлечение, если анализируемые страницы выглядят одинаково и индексы списков будут идентичные или попробуйте какое-нибудь машинное обучение для разбора контента.

sauce = urllib.request.urlopen(link).read() #link is the url
soup = BeautifulSoup(sauce,'lxml')
span = soup('span', attrs={'id': 'ctl00_ContentPlaceHolder1_Label1'})

[c.strip() for c in soup.span.descendants if type(c) == NavigableString and len(c.strip()) > 0]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...