Извлечь данные из указанной c ячейки в таблице с помощью BeautifulSoup? - PullRequest
1 голос
/ 09 мая 2020

Я пытаюсь извлечь время ожидания сортировки для конкретной c больницы, чтобы использовать ее в других приложениях. Данные из ВСЕХ местных больниц доступны по следующему адресу: https://www.health.wa.gov.au/emergencyactivity/EDdata/edsv/

Вот прогресс, которого я добился до сих пор:

import requests
from bs4 import BeautifulSoup

URL = 'https://www.health.wa.gov.au/emergencyactivity/EDdata/edsv/'

headers = {
    "User-Agent": 'Mozilla/5.0 (X11; Linux x86_64; rv:76.0) Gecko/20100101 Firefox/76.0'
}

page = requests.get(URL, headers=headers)

soup = BeautifulSoup(page.content, 'html.parser')

table_rows = soup.find_all('tr')

for tr in table_rows:
    td = tr.find_all('td')
    row = [i.text for i in td]
    print(row)

Я хочу извлечь только сортировку время для госпиталя сэра Чарльза Гэрднера, но понятия не имею, как это сделать. Любая помощь будет принята с благодарностью!

1 Ответ

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

Вы почти у цели. Попробуйте что-то вроде этого:

from bs4 import Tag

table_rows = soup.select('tr td')
for tr in table_rows:
    if tr.text ==  'Sir Charles Gairdner Hospital':
            for ns in tr.next_siblings:            
                if isinstance(ns,Tag):
                    print(ns.text)    

Другая альтернатива:

table = soup.select('table')[0]
for row in table:
        if isinstance(row,Tag):
            tds = row.select('td')
            if len(tds)>0 and tds[0].text=='Sir Charles Gairdner Hospital':
                    for td in tds: 
                        print(td.text)

Вывод:

73
5
36

Изменить: чтобы распечатать только время ожидания сортировки для этого места, использовать:

for tr in table_rows:
    if tr.text ==  'Sir Charles Gairdner Hospital':
            print(tr.next_sibling.text) #note: it's "next_sibling", not "siblings" this time
...