首页 > 解决方案 > 从html中提取一些文本

问题描述

我有如下的html“页面”:

<p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Times New Roman","serif"'>&nbsp;</span></p>

<p class=MsoNormal><span style='font-size:11.0pt'>ヤブツバキクラス(常緑広葉樹林)</span><span
style='font-size:11.0pt;font-family:"Times New Roman","serif"'> <span
lang=EN-US>Camellietea japonicae</span><span lang=EN-US> Miyawaki <i>et</i>
Ohba 1963<br>
</span></span><span style='font-size:11.0pt'> リュウキュウガキ-クスノハガシワオーダー&lt;/span><span
style='font-size:11.0pt;font-family:"Times New Roman","serif"'> <span
lang=EN-US>Diospyro maritimae-Mallotetalia philippensis</span><span lang=EN-US>
Fujiwara 1981<br>
</span></span><span style='font-size:11.0pt'>  ナガミボチョウジ-リュウキュウガキ群団&lt;/span><span
style='font-size:11.0pt;font-family:"Times New Roman","serif"'> <span
lang=EN-US>Psychotrio manilensis-Diospyrion maritimae</span><span lang=EN-US>
Niiro <i>et al.</i> 1974<br>

我需要提取如下:

ヤブツバキクラス(常绿広叶树林),Camellietea japonicae

リュウキュウガキ-クスノハガシワオーダー,Diospyro maritimae-Mallotetalia philippensis

ナガミボチョウジ-リュウキュウガキ群団, Psychotrio manilensis-Diospyrion maritimae

我试过:

soup = BeautifulSoup(page, features="lxml")

rows = soup.find_all('span')
for row in rows:
        print (row.text.strip().split(' ')[0])

但是,它提取如下:

ヤブツバキクラス(常緑広葉樹林)
Camellietea
Camellietea
Miyawaki
リュウキュウガキ−クスノハガシワオーダー
Diospyro
Diospyro
Fujiwara
ナガミボチョウジ−リュウキュウガキ群団
Psychotrio
Psychotrio
Niiro

标签: pythonhtmlweb-scrapingbeautifulsoup

解决方案


逐步检查结果并获取每四个跨度中的前两个:

for i in range(1, len(rows), 4):
    print(rows[i].string.strip(), 
          list(rows[i+1].children)[1].string.strip())

#ヤブツバキクラス(常緑広葉樹林)Camellietea japonicae
#リュウキュウガキ-クスノハガシワオーダー Diospyro maritimae-Mallotetalia philippensis
#ナガミボチョウジ-リュウキュウガキ群団 Psychotrio manilensis-Diospyrion maritimae

推荐阅读