我正在处理XML文件,我希望能够访问这个文件的作者id和文本。我实现了以下代码,但不确定某些行。
for filepath in dataset_filepaths:
with open(filepath) as f:
soup = BeautifulSoup(f, "lxml")
body = soup.body
# To choose the author id !!! Is not working
author = body.select('author_id')[0].get_text().strip()
# To choose the text
soup_text = body.select('div')[0]
我有以下问题
非常感谢你的帮助!
这是你的文本
<div author_id="0093" work_id="006" work_short="Metaph">
<ab l0="0093" l1="006" l2="Metaph" l8="4a" l9="1t">
<lb n="1t"/>
<title>ΘΕΟΦΡΑΣΤΟΥ ΤΩΝ ΜΕΤΑ ΤΑ ΦΥΣΙΚΑ</title>
<lb n="2"/>
Πῶσ ἀφορίσαι δεῖ καὶ ποίοισ τὴν ὑπὲρ τῶν
<lb n="3"/>
πρώτων θεωρίαν; ἡ γὰρ δὴ τῆσ φύσεωσ πολυ‐
<lb n="4"/>
χουστέρα, καὶ ὥσ γε δή τινέσ φασιν, ἀτακτοτέρα,
<lb n="5"/>
下面是一个有效的XML
<?xml version="1.0" encoding="UTF-8"?>
<div author_id="0093" work_id="006" work_short="Metaph">
<ab l0="0093" l1="006" l2="Metaph" l8="4a" l9="1t">
<lb n="1t" />
<title>ΘΕΟΦΡΑΣΤΟΥ ΤΩΝ ΜΕΤΑ ΤΑ ΦΥΣΙΚΑ</title>
<lb n="2" />
Πῶσ ἀφορίσαι δεῖ καὶ ποίοισ τὴν ὑπὲρ τῶν
<lb n="3" />
πρώτων θεωρίαν; ἡ γὰρ δὴ τῆσ φύσεωσ πολυ‐
<lb n="4" />
χουστέρα, καὶ ὥσ γε δή τινέσ φασιν, ἀτακτοτέρα,
<lb n="5" />
</ab>
</div>
发布于 2021-11-17 12:55:08
你可以这样做。
author_id
,所以选择<div>
。由于author_id
是标记的属性,所以可以这样提取它D= soup.find('div') author_id =d‘’author_id‘
.find()
的<title>
标记并打印它的文本from bs4 import BeautifulSoup
s = """<?xml version="1.0" encoding="UTF-8"?>
<div author_id="0093" work_id="006" work_short="Metaph">
<ab l0="0093" l1="006" l2="Metaph" l8="4a" l9="1t">
<lb n="1t" />
<title>ΘΕΟΦΡΑΣΤΟΥ ΤΩΝ ΜΕΤΑ ΤΑ ΦΥΣΙΚΑ</title>
<lb n="2" />
Πῶσ ἀφορίσαι δεῖ καὶ ποίοισ τὴν ὑπὲρ τῶν
<lb n="3" />
πρώτων θεωρίαν; ἡ γὰρ δὴ τῆσ φύσεωσ πολυ‐
<lb n="4" />
χουστέρα, καὶ ὥσ γε δή τινέσ φασιν, ἀτακτοτέρα,
<lb n="5" />
</ab>
</div>"""
soup = BeautifulSoup(s, 'xml')
d = soup.find('div')
author_id = d['author_id']
title = d.find('title').text
txt = ' '.join(list(d.ab.stripped_strings)[1:])
print(f'Author_ID: {author_id}\nTitle: {title}\nText: {txt}')
Author_ID: 0093
Title: ΘΕΟΦΡΑΣΤΟΥ ΤΩΝ ΜΕΤΑ ΤΑ ΦΥΣΙΚΑ
Text: Πῶσ ἀφορίσαι δεῖ καὶ ποίοισ τὴν ὑπὲρ τῶν πρώτων θεωρίαν; ἡ γὰρ δὴ τῆσ φύσεωσ πολυ‐ χουστέρα, καὶ ὥσ γε δή τινέσ φασιν, ἀτακτοτέρα,
发布于 2021-11-17 11:37:21
如下所示
from bs4 import BeautifulSoup
from bs4.element import NavigableString
html = '''<div author_id="0093" work_id="006" work_short="Metaph">
<ab l0="0093" l1="006" l2="Metaph" l8="4a" l9="1t">
<lb n="1t"/>
<title>ΘΕΟΦΡΑΣΤΟΥ ΤΩΝ ΜΕΤΑ ΤΑ ΦΥΣΙΚΑ</title>
<lb n="2"/>
Πῶσ ἀφορίσαι δεῖ καὶ ποίοισ τὴν ὑπὲρ τῶν
<lb n="3"/>
πρώτων θεωρίαν; ἡ γὰρ δὴ τῆσ φύσεωσ πολυ‐
<lb n="4"/>
χουστέρα, καὶ ὥσ γε δή τινέσ φασιν, ἀτακτοτέρα,
<lb n="5"/>'''
soup = BeautifulSoup(html, 'html.parser')
author_id = soup.div.attrs['author_id']
print('------------------')
print(f'author_id: {author_id}')
print('------------------')
title = soup.div.title.text
print(f'title: {title}')
print('------------------')
text = []
for child in soup.div.ab.children:
if isinstance(child,NavigableString):
if child.text.strip():
text.append(child.text.strip())
print(f'text: {text}')
输出
------------------
author_id: 0093
------------------
title: ΘΕΟΦΡΑΣΤΟΥ ΤΩΝ ΜΕΤΑ ΤΑ ΦΥΣΙΚΑ
------------------
text: ['Πῶσ ἀφορίσαι δεῖ καὶ ποίοισ τὴν ὑπὲρ τῶν', 'πρώτων θεωρίαν; ἡ γὰρ δὴ τῆσ φύσεωσ πολυ‐', 'χουστέρα, καὶ ὥσ γε δή τινέσ φασιν, ἀτακτοτέρα,']
https://stackoverflow.com/questions/70002688
复制相似问题