парсинг данных HTML в python - PullRequest
       17

парсинг данных HTML в python

0 голосов
/ 27 сентября 2018

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

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()

Ответы [ 3 ]

0 голосов
/ 27 сентября 2018
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
0 голосов
/ 27 сентября 2018

Еще один способ, который вам может пригодиться, представлен ниже:

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
0 голосов
/ 27 сентября 2018

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

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()
...