正在解析 python 中的 HTML 数据

parsing HTML data in python

假设我有以下网站:

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

当你访问这个网站时,它会显示一堆信息。 在我的例子中,我只想从 Culture Culture Conditions 部分获取温度。

当你向下滚动网页时,你会看到 名为 "Culture Conditions"

的部分
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()

我做了一个正则表达式来搜索以 <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