Мой список if, else оператор возвращает только оператор if - PullRequest
1 голос
/ 17 апреля 2020

Из URL я хочу извлечь информацию о профиле этого дома по уходу: Информация представлена ​​в следующем формате на веб-сайте: https://www.carehome.co.uk/carehome.cfm/searchazref/10001005FITA

Группа: Excelcare Holdings

Ответственное лицо : Дениз Маркс (зарегистрированный менеджер)

Местные органы власти / Социальные службы: Лондонский районный совет Tower Hamlets (нажмите для получения контактной информации)

et c

Моя функция get_deets выводит только первые элементы в их соответствующих списках "tag" и "sibling". Мне нужен полный список текста тега и соответствующей информации, а также.

SCRIPT

import numpy as np
import pandas as pd
from bs4 import BeautifulSoup as soup
from selenium import webdriver

driver = webdriver.Chrome(executable_path=r'C:\Users\Main\Documents\Work\Projects\chromedriver')

my_url = "https://www.carehome.co.uk/carehome.cfm/searchazref/10001005FITA"

def make_soup(url):
  driver.get(url)
  m_soup = soup(driver.page_source, features='html.parser')
  return m_soup 

main_page = make_soup(my_url)

strongs = main_page.select(".blue")

def get_deets(strongs):
    tag = []
    sibling = []
    for strong_tag in strongs:
     if strong_tag.next_sibling == '\n':
        tag.append(strong_tag.text), sibling.append(strong_tag.next_sibling.next_sibling.text)
     else:
        tag.append(strong_tag.text), sibling.append(strong_tag.next_sibling.strip())
     return tag, sibling

Мой текущий выход:

get_deets(strongs)

    (['Group:'], ['Excelcare Holdings'])

Желаемый вывод

tag

['Group:','Person in charge:', 'Local Authority / Social Services:'] 

sibling

['Excelcare Holdings',  'Denise Marks (Registered Manager)','London Borough of Tower Hamlets Council (click for contact details)' ]

Использование этого HTML:

<div class="profile-group-description col-xs-12 col-sm-8">

    <p><strong class="blue">Group:</strong>

        <a href="https://www.carehome.co.uk/care_search_results.cfm/searchgroup/36151505EXCA">Excelcare Holdings</a>
    </p>

    <p><strong class="blue">Person in charge:</strong>

      Denise Marks (Registered Manager)</p>

    <p><strong class="blue">Local Authority / Social Services:</strong> 
      London Borough of Tower Hamlets Council (<a href="https://www.carehome.co.uk/local-authorities/profile.cfm/id/Tower-Hamlets">click for contact details</a>)</p>

    <p>
        <strong class="blue">Type of Service:</strong>
      Care Home only (Residential Care) – Privately Owned , Registered for a maximum of 44 Service Users
    </p>

    <p>
        <strong class="blue">Registered Care Categories*:</strong> 
      Dementia • Learning Disability • Mental Health Condition • Old Age
    </p>

1 Ответ

0 голосов
/ 17 апреля 2020

Учитывая HTML в вашем вопросе, возможно, его можно немного упростить:

care = """[your HTML]"""

from bs4 import BeautifulSoup as bs
soup = bs(care, 'lxml')

headers = []
rows = []
tags = soup.select('p')
for tag in tags:
    items = tag.text.replace('\n','').split('\n')[0].split(':')
    headers.append(items[0].strip())
    rows.append(items[1].strip())
for h,r in zip(headers,rows):
    print(h,': ',r)

Вывод:

Group :  Excelcare Holdings
Person in charge :  Denise Marks (Registered Manager)
Local Authority / Social Services :  London Borough of Tower Hamlets Council (click for contact details)
Type of Service :  Care Home only (Residential Care) – Privately Owned , Registered for a maximum of 44 Service Users
Registered Care Categories* :  Dementia • Learning Disability • Mental Health Condition • Old Age
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...