我正在處理 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]
我有以下問題
- 如何選擇作者ID?
- 要選擇文本,我應該使用“div”還是“ab”?
- 如何選擇文本的標題?
非常感謝您的幫助!
你是正文
<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>
uj5u.com熱心網友回復:
你可以這樣做。
既然需要
author_id,選擇<div>. 作為author_id標簽的一個屬性,你可以像這樣提取它d = soup.find('div') author_id = d['author_id']對于標題,選擇
<title>標簽使用.find()并列印它的文本
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: Πω?σ α?φορι?σαι δει? και? ποι?οισ τη?ν υ?πε?ρ τω?ν πρω?των θεωρι?αν; η? γα?ρ δη? τη?σ φυ?σεωσ πολυ‐ χουστε?ρα, και? ω??σ γε δη? τινε?σ φασιν, α?τακτοτε?ρα,
uj5u.com熱心網友回復:
像下面這樣的東西
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://www.uj5u.com/yidong/359833.html
上一篇:如何使用代碼關閉列印預覽頁面
