2016-09-19 3 views
0

Я хотел бы, чтобы очистить содержимое вебов-сайт с аналогичной структурой вУплотненные Для контура с неравными субъектами

https://www.wellstar.org/locations/pages/default.aspx

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

WellStar Больницы

Wellstar АТЛАНТА МЕДИЦИНСКИЙ ЦЕНТР

WellStar Больницы

Wellstar АТЛАНТА медицинский центр ЮГ

...

WellStar Health Parks

PARK

Экуорт ЗДОРОВЬЕ

...

До сих пор я пытался вложенным цикл:

for type in soup.find_all("h3",class_="WebFont SpotBodyGreen"): 
    for name in soup.find_all("div",class_="PurpleBackgroundHeading"): 
     print(type.text, name.text) 

выше for loop возвращает дубликаты из-за каждое имя будучи сопряженным с каждым типом, независимо от представления на вебсайте. Любая помощь, будь то в виде кода и/или рекомендованных ресурсов для решения этой задачи, будет с большой благодарностью.

ответ

1

Вам нужен способ группировки местоположений по названию. Для этого мы выделим каждый блок, получить титул и место, собранный в словарь:

from pprint import pprint 

import requests 
from bs4 import BeautifulSoup 

url = "https://www.wellstar.org/locations/pages/default.aspx" 
response = requests.get(url) 
soup = BeautifulSoup(response.content, "html.parser") 

d = {} 
for row in soup.select(".WS_Content > .WS_LeftContent > table > tr"): 
    title = row.h3.get_text(strip=True) 

    d[title] = [item.get_text(strip=True) for item in row.select(".PurpleBackgroundHeading a")] 

pprint(d) 

распечатки (довольно-отпечатанные с pprint()):

{'WellStar Community Hospice': ['Tranquility at Cobb Hospital', 
           'Tranquility at Kennesaw Mountain'], 
'WellStar Health Parks': ['Acworth Health Park', 'East Cobb Health Park'], 
'WellStar Hospitals': ['WellStar Atlanta Medical Center', 
         'WellStar Atlanta Medical Center South', 
         'WellStar Cobb Hospital', 
         'WellStar Douglas Hospital', 
         'WellStar Kennestone Hospital', 
         'WellStar North Fulton Hospital', 
         'WellStar Paulding Hospital', 
         'WellStar Spalding Regional Hospital', 
         'WellStar Sylvan Grove Hospital', 
         'WellStar West Georgia Medical Center', 
         'WellStar Windy Hill Hospital'], 
'WellStar Urgent Care Centers': ['WellStar Urgent Care in Acworth', 
            'WellStar Urgent Care in Kennesaw', 
            'WellStar Urgent Care in Marietta - Delk ' 
            'Road', 
            'WellStar Urgent Care in Marietta - East ' 
            'Cobb', 
            'WellStar Urgent Care in Marietta - ' 
            'Kennestone', 
            'WellStar Urgent Care in Marietta - Sandy ' 
            'Plains Road', 
            'WellStar Urgent Care in Smyrna', 
            'WellStar Urgent Care in Woodstock']} 
+0

могли бы вы объяснить, что происходит в 'г [title] = [item.get_text (strip = True) для элемента в строке.select (". PurpleBackgroundHeading a")] 'line? Я подозреваю, что это то, где вы присоединяетесь к значению в ключе заголовка для словаря? Если да, то как я могу добавить другое значение для каждого ключа. Например, как я могу добавить адрес каждого местоположения в словарь? – Daniel

+0

@ Даниэль, пожалуйста, сформулируйте это в отдельный вопрос, если вам нужна дополнительная помощь! Спасибо. – alecxe

Смежные вопросы