Парсинг HTML-данных в Python

Допустим, у меня есть следующий веб-сайт:

https://www.atcc.org/Products/All/CRL-2528.aspx#culturemethod

Когда вы заходите на этот сайт, он отображает кучу информации. В моем случае мне просто нужна температура из раздела «Условия культивирования».

когда вы прокрутите страницу вниз, вы увидите раздел под названием «Условия культивирования»

Atmosphere: air, 95%; carbon dioxide (CO2), 5%
Temperature: 37°C

используя библиотеку запросов, я могу получить доступ к HTML-коду страницы. когда я сохраняю HTML и ищу в нем свои данные, он внизу

в этой форме

                                    Culture Conditions

                                </th>

    <td>



                                            <div><strong>Atmosphere: </strong>air, 95%; carbon dioxide (CO<sub>2</sub>), 5%</div><div><strong>Temperature: </strong>37&deg;C</div>

Я не знаю, что делать после этого. Я попытался использовать BeautifulSoup для анализа HTML, но мне это не удалось.

это весь код, который у меня есть.

import requests

url='https://www.atcc.org/Products/All/CRL-2528.aspx#culturemethod'

page = requests.get(url)
textPage = str(page.text)

file = open('test2', 'w')
file.write(textPage)
file.close()
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
185
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Я сделал регулярное выражение, которое ищет строку, начинающуюся с <div><strong>Atmosphere:, и берет все до конца строки. Затем я удалил из результата все нежелательные строки. И вуаля!

import re
textPage = re.search(r"<div><strong>Atmosphere: .*", textPage).group(0)
wrongString = ['<div>','</div>','<strong>','</strong>','<sub>','</sub>']
for ws in wrongString:
    textPage = re.sub(ws, "", textPage)
file = open('test2', 'w')
file.write(textPage)
file.close()
import requests
from bs4 import BeautifulSoup

url = 'https://www.atcc.org/Products/All/CRL-2528.aspx#culturemethod'

r = requests.get(url)
soup = BeautifulSoup(r.text, 'lxml')

cc = soup.select('#layoutcontent_2_middlecontent_0_productdetailcontent_0_maincontent_2_rptTabContent_rptFields_2_fieldRow_3 td div')

for c in cc:
    print(c.text.strip())

Выход:

Atmosphere: air, 95%; carbon dioxide (CO2), 5%
Temperature: 37°C

Чтобы просто узнать температуру:

cc = soup.select('#layoutcontent_2_middlecontent_0_productdetailcontent_0_maincontent_2_rptTabContent_rptFields_2_fieldRow_3 td div')[-1]
cc = cc.text.split(':')[-1].strip()
print(cc)

Выход:

37°C

Другой способ, который может оказаться полезным, - это примерно так:

import requests
from bs4 import BeautifulSoup

url = 'https://www.atcc.org/Products/All/CRL-2528.aspx#culturemethod'

page = requests.get(url)
soup = BeautifulSoup(page.text,"lxml")
for items in soup.find_all("strong"):
    if "Atmosphere:" in items.text:
        atmos = items.find_parent().text
        temp = items.find_parent().find_next_sibling().text
        print(f'{atmos}\n{temp}')

Выход:

Atmosphere: air, 95%; carbon dioxide (CO2), 5%
Temperature: 37°C

Другие вопросы по теме