正在解析 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°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
假设我有以下网站:
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°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