将 'list of lists' Wiki 页面组织成 table
Organising a 'list of lists' Wiki page into a table
我想将 https://en.wikipedia.org/wiki/List_of_trees_and_shrubs_by_taxonomic_family
列表列表维基百科页面中的数据解析为 table
我想创建一个 table 将每个包含 'family' 的副标题的第一个词链接到每个主要要点的第一个词,所以我对文本的大部分内容不感兴趣.
例如,我想要这样的输出:
Araucariaceae Agathis
Araucariaceae Araucaria
Cupressaceae Athrotaxis
对于这样的页面:[抱歉,我有足够的声誉 post Maths StackExchange 中的图片,但这里没有]
Gymnosperms
Conifers
Araucariaceae: monkey-puzzle family
Agathis – kauri conifers
Agathis australis – kauri pine; dammar
Agathis lanceolata – red kauri
Agathis robusta – Dundathu pine; Queensland kauri; smooth bark kauri
Araucaria – monkey puzzle trees
Araucaria angustifolia – Paraná pine
Araucaria araucana – monkey-puzzle tree
Araucaria bidwillii – bunya-bunya
Araucaria columnaris – Cook pine
Araucaria cunninghamii – Moreton Bay pine; hoop pine
Araucaria heterophylla – Norfolk Island pine
Araucaria hunsteinii – klinki
Cupressaceae: cypress family
Athrotaxis – Tasmanian cedars
Athrotaxis cupressoides – pencil pine
Athrotaxis selaginoides – King Billy pine
我查找了 wikipediaAPI 包,但没有找到任何具体内容。有没有类似的功能?
此外,我认为我无法使用 str 包以简洁的方式处理这么多原始文本。
有什么建议吗?
一种可靠的方法是使用页面源(通过编辑)并使用格式信息来解析它:
def do_it(epl):
for line in epl:
if ":" in line:
top = line.split(":")[0][6:].strip("[]")
elif line.startswith("*'''''"):
print top, line.split()[0][8:].strip("[]'")
- 家谱包含 semi-colon 并以
====[[
开头
- 下面是
*'''''
开头的
- 去除所有多余的格式字符
取页面编辑文字:
====[[Podocarpaceae]]: podocarp family====
----
*'''''[[Afrocarpus]]''''' '''– African podocarps'''
**''[[Afrocarpus gracilior]]'' – musengera; zigba
*'''''[[Dacrycarpus]]'''''
**''[[Dacrycarpus dacrydioides]]'' – kahikatea
*'''''[[Dacrydium]]'''''
**''[[Dacrydium cupressinum]]'' – rimu
*'''''[[Podocarpus]]''''' '''– Australasian podocarps'''
**''[[Podocarpus gracilior]]'' – fern pine
**''[[Podocarpus henkelii]]'' – long-leafed yellowwood
**''[[Podocarpus macrophyllus]]'' – kusamaki; inumaki
**''[[Podocarpus neriifolius]]'' – oleander-leaf podocarp
并输出
Podocarpaceae Afrocarpus
Podocarpaceae Dacrycarpus
Podocarpaceae Dacrydium
Podocarpaceae Podocarpus
这里是美汤的做法:
首先我们将我们想要的文本拉入列表
url='https://en.wikipedia.org/wiki/List_of_trees_and_shrubs_by_taxonomic_family'
r = requests.get(url).text
soup = BeautifulSoup(r, 'html.parser')
tree = []
for text in soup.find_all(['h4', 'b']):
tree.append(text.text)
然后我们做一些基本的 df 操作,按照我们想要的方式清理它。
df = pd.DataFrame(tree)
df = df[~df[0].str.contains('–')]
df[1] = df.loc[df[0].str.contains('edit')]
df[1] = df[1].ffill()
df = df[df[0]!=df[1]].reset_index(drop = True).copy()
df[1] = df[1].str.replace(":.*","", regex = True)
df.head()
0 1
0 Agathis Araucariaceae
1 Araucaria Araucariaceae
2 Athrotaxis Cupressaceae
3 Callitris Cupressaceae
4 Calocedrus Cupressaceae
我想将 https://en.wikipedia.org/wiki/List_of_trees_and_shrubs_by_taxonomic_family
列表列表维基百科页面中的数据解析为 table我想创建一个 table 将每个包含 'family' 的副标题的第一个词链接到每个主要要点的第一个词,所以我对文本的大部分内容不感兴趣.
例如,我想要这样的输出:
Araucariaceae Agathis
Araucariaceae Araucaria
Cupressaceae Athrotaxis
对于这样的页面:[抱歉,我有足够的声誉 post Maths StackExchange 中的图片,但这里没有]
Gymnosperms
Conifers
Araucariaceae: monkey-puzzle family
Agathis – kauri conifers
Agathis australis – kauri pine; dammar
Agathis lanceolata – red kauri
Agathis robusta – Dundathu pine; Queensland kauri; smooth bark kauri
Araucaria – monkey puzzle trees
Araucaria angustifolia – Paraná pine
Araucaria araucana – monkey-puzzle tree
Araucaria bidwillii – bunya-bunya
Araucaria columnaris – Cook pine
Araucaria cunninghamii – Moreton Bay pine; hoop pine
Araucaria heterophylla – Norfolk Island pine
Araucaria hunsteinii – klinki
Cupressaceae: cypress family
Athrotaxis – Tasmanian cedars
Athrotaxis cupressoides – pencil pine
Athrotaxis selaginoides – King Billy pine
我查找了 wikipediaAPI 包,但没有找到任何具体内容。有没有类似的功能? 此外,我认为我无法使用 str 包以简洁的方式处理这么多原始文本。
有什么建议吗?
一种可靠的方法是使用页面源(通过编辑)并使用格式信息来解析它:
def do_it(epl):
for line in epl:
if ":" in line:
top = line.split(":")[0][6:].strip("[]")
elif line.startswith("*'''''"):
print top, line.split()[0][8:].strip("[]'")
- 家谱包含 semi-colon 并以
====[[
开头
- 下面是
*'''''
开头的
- 去除所有多余的格式字符
取页面编辑文字:
====[[Podocarpaceae]]: podocarp family====
----
*'''''[[Afrocarpus]]''''' '''– African podocarps'''
**''[[Afrocarpus gracilior]]'' – musengera; zigba
*'''''[[Dacrycarpus]]'''''
**''[[Dacrycarpus dacrydioides]]'' – kahikatea
*'''''[[Dacrydium]]'''''
**''[[Dacrydium cupressinum]]'' – rimu
*'''''[[Podocarpus]]''''' '''– Australasian podocarps'''
**''[[Podocarpus gracilior]]'' – fern pine
**''[[Podocarpus henkelii]]'' – long-leafed yellowwood
**''[[Podocarpus macrophyllus]]'' – kusamaki; inumaki
**''[[Podocarpus neriifolius]]'' – oleander-leaf podocarp
并输出
Podocarpaceae Afrocarpus
Podocarpaceae Dacrycarpus
Podocarpaceae Dacrydium
Podocarpaceae Podocarpus
这里是美汤的做法:
首先我们将我们想要的文本拉入列表
url='https://en.wikipedia.org/wiki/List_of_trees_and_shrubs_by_taxonomic_family'
r = requests.get(url).text
soup = BeautifulSoup(r, 'html.parser')
tree = []
for text in soup.find_all(['h4', 'b']):
tree.append(text.text)
然后我们做一些基本的 df 操作,按照我们想要的方式清理它。
df = pd.DataFrame(tree)
df = df[~df[0].str.contains('–')]
df[1] = df.loc[df[0].str.contains('edit')]
df[1] = df[1].ffill()
df = df[df[0]!=df[1]].reset_index(drop = True).copy()
df[1] = df[1].str.replace(":.*","", regex = True)
df.head()
0 1
0 Agathis Araucariaceae
1 Araucaria Araucariaceae
2 Athrotaxis Cupressaceae
3 Callitris Cupressaceae
4 Calocedrus Cupressaceae