Извлечение данных из html [закрыто]Python

Программы на Python
Ответить
Anonymous
 Извлечение данных из html [закрыто]

Сообщение Anonymous »


Я написал этот код для извлечения информации из HTML, а именно:

КРОВОТЕЧЕНИЕ из глаз: Acon., aloe., am-c., am-caust., arn., bell., оба ., расч., камф., carb-v., cham., кор-р., Crot-h. , диг., эпс., euphr., kali-chl., Lach., nit-ac., Nux-v., < b>Phos., plb., раф., рута., сульф.

сморкание, на: Nit-ac.

горение с помощью : Carb-v.

кашель, от: Carb-v., cham., nux-v.

Кровоизлияние в сетчатку: Arn., bell., crot-h., glon., ham., Lach., merc-c., phos. , чернослив-с., сульф.

коклюш, в: Nux-v.

веки: Arn., bell., hep., nat-m., nux-v., Sulph.
и я хочу извлечь симптом КРОВОТЕЧЕНИЯ из глаз в этом случае, и он должен содержать синие лекарства: arn., Calc., Cham., Kali-Ch., сульф., красные лекарства Both., Crot-h., Lach., Nux-v., Phos. черные лекарства Acon., aloe., am-c., am-caust., bell., camph., cor-r., dig., elaps., eupr., nit-ac., plb., raph., ruta .,
Для достижения этой цели я написал код Python, и это -

из импорта bs4 BeautifulSoup html = """ КРОВОТЕЧЕНИЕ из глаз : Acon., алоэ., am-c., am-caust., arn., bell., Оба., расчет., камф., carb-v., cham., cor-r., Крот-ч., диг., истеч., евфр., кали-хл., Lach., nit-ac., Nux-v., Фос., плб., раф., рута., сульф.

сморкается, на: Nit-ac.

горение с помощью : Carb-v.

кашель, от: Carb-v., cham., nux-v.

Кровоизлияние в сетчатку: Arn., bell., crot-h., глон., ветчина., Lach., merc-c., фос., чернослив., сульф.

коклюш, в: Nux-v.

веки: Арн., колокол., геп., нат-м., nux-v., Сульф.
""" суп = BeautifulSoup(html, "html.parser") результаты = [] симптом = нет суб_симптом = Нет абзацы = суп.find_all('p') за абзац в абзацах: текст = параграф.get_text().strip() # проверяем, написано ли первое слово с заглавной буквы или нет, если да, то это симптом если текст и текст[0].isupper(): если симптом: результаты.append(симптом) симптом = { 'имя': текст, 'blue_medicines': [], 'red_medicines': [], 'black_medicines': [], 'sub_symptoms': [] } суб_симптом = Нет # найдите все синие лекарства, соответствующие данному симптому elif параграф.find_all('font', {'color': '#0000ff'}): blue_medicines = [medicine.get_text() для лекарства в параграфе.find_all('font', {'color': '#0000ff'})] если симптом: симптом['blue_medicines'].extend(blue_medicines) #найди все красные лекарства elif параграф.find_all('font', {'color': '#ff0000'}): red_medicines = [medicine.get_text() для лекарства в параграфе.find_all('font', {'color': '#ff0000'})] если симптом: симптом['red_medicines'].extend(red_medicines) #найди все черные лекарства еще: black_medicines = [medicine.strip() для лекарств в text.split(':')[-1].split(',')] если симптом: симптом['black_medicines'].extend(black_medicines) если симптом и ':' в тексте: суб_симптом = { 'имя': text.split(':')[0].strip(), 'blue_medicines': [], 'red_medicines': [], 'black_medicines': [] } симптом['sub_symptoms'].append(sub_symptom) если под_симптом: # найдите все синие лекарства, относящиеся к подсимптому if параграф.find_all('font', {'color': '#0000ff'}): blue_medicines = [medicine.get_text() для лекарства в параграфе.find_all('font', {'color': '#0000ff'})] sub_symptom['blue_medicines'].extend(blue_medicines) #найди все красные лекарства elif параграф.find_all('font', {'color': '#ff0000'}): red_medicines = [medicine.get_text() для лекарства в параграфе.find_all('font', {'color': '#ff0000'})] sub_symptom['red_medicines'].extend(red_medicines) #найди все черные лекарства еще: black_medicines = [medicine.strip() для лекарств в text.split(':')[-1].split(',')] sub_symptom['black_medicines'].extend(black_medicines) если симптом: результаты.append(симптом) для элемента в результатах: print(f"Симптом: {item['name']}") print(f"Синие лекарства: {', '.join(item['blue_medicines'])}") print(f"Красные лекарства: {', '.join(item['red_medicines'])}") print(f"Черные лекарства: {', '.join(item['black_medicines'])}") для sub_symptom в элементе['sub_symptoms']: print(f"Подсимптом: {sub_symptom['name']}") print(f"Синие лекарства: {', '.join(sub_symptom['blue_medicines'])}") print(f"Красные лекарства: {', '.join(sub_symptom['red_medicines'])}") print(f"Черные лекарства: {', '.join(sub_symptom['black_medicines'])}") печать("-" * 20)
введите здесь и я хотел симптом КРОВОТЕЧЕНИЯ из глаз синие лекарства — арн., кальк., чам., кали-ч., сульф. red_medicines: Both., Crot-h., lach., Nux-v., Phos. black_medicines: Acon., aloc., am-c., am-caust., bell., camph., cor-r., dig., elaps., eupr., nit-ac., plb., raph., ruta . а затем подсимптом синее лекарство = все, что в нем есть черная медицина = красное лекарство с которым у меня все в порядке в случае подсимптома, но почему-то я не нахожу те лекарства, которые написаны в той же строке, что и симптом
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»