gpt4 book ai didi

python - 用 Beautiful Soup 解析 XML

转载 作者:太空宇宙 更新时间:2023-11-03 14:57:39 25 4
gpt4 key购买 nike

编辑:已解决。我想我应该在底部添加我的答案......

注意:所需的输出是一堆像

的行
US D0591026

我的 XML 数据如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE us-patent-grant SYSTEM "us-patent-grant-v42-2006-08-23.dtd" [ ]>
<us-patent-grant lang="EN" dtd-version="v4.2 2006-08-23" file="USD0591026-20090428.XML" status="PRODUCTION" id="us-patent-grant" country="US" date-produced="20090414" date-publ="20090428">
<us-bibliographic-data-grant>
<publication-reference>
<document-id>
<country>US</country>
<doc-number>D0591026</doc-number>
<kind>S1</kind>
<date>20090428</date>
</document-id>
</publication-reference>
<application-reference appl-type="design">
<document-id>
<country>US</country>
<doc-number>29303426</doc-number>
<date>20080208</date>
</document-id>
</application-reference>
<us-application-series-code>29</us-application-series-code>
<priority-claims>
<priority-claim sequence="01" kind="national">
<country>CA</country>
<doc-number>122078</doc-number>
<date>20070830</date>
</priority-claim>
</priority-claims>
<us-term-of-grant>
<length-of-grant>14</length-of-grant>
</us-term-of-grant>
<classification-locarno>
<edition>9</edition>
<main-classification>0101</main-classification>
</classification-locarno>
<classification-national>
<country>US</country>
<main-classification>D 1106</main-classification>
</classification-national>
<invention-title id="d0e71">Edible fruit product in the shape of a rocketship</invention-title>
<references-cited>

我正在尝试提取国家/地区和文件编号。我已经到了这一点:

import os
import io
from bs4 import BeautifulSoup
import csv
import requests

directory_in_str = 'C:/Users/somedirectory'
directory = os.fsencode(directory_in_str)

for file in os.listdir(directory):
filename = os.fsdecode(file)
full_name = directory_in_str + filename
handler = open(full_name).read()
soup = BeautifulSoup(handler, 'lxml')
patents=soup.find_all('us-patent-grant')
pub_ref=soup.find_all('publication-reference')
country=soup.find_all('country')
doc_num=soup.find_all('doc-number')
for patent in pub_ref:
for doc_num in patent:
print(doc_num)

continue

我可以打印出一个包含这些元素的漂亮 block (上面的代码的作用),但是我尝试获取这两个特定元素(然后连接它们)的所有尝试都失败了。我已经能够通过字符串操作来完成此操作,但数据集的格式不够好(稍后我将拉出没有标准长度的文本字段),因此我有信心可以基于拼接字符串执行整个分析。

有什么想法可以深入研究这些进一步的标签并仅返回这两个元素吗?

好的,所以我做了一些更改,并将我的代码更改为:

import os
import io
from bs4 import BeautifulSoup
import csv
import requests

directory_in_str = 'C:/somedir'

directory = os.fsencode(directory_in_str)

for file in os.listdir(directory):
filename = os.fsdecode(file)
full_name = directory_in_str + filename
handler = open(full_name).read()
soup = BeautifulSoup(handler, 'lxml')
patents=soup.find_all('us-patent-grant')
pub_ref=soup.find_all('publication-reference')
for patent in pub_ref:
country = patent.find_all('country')
doc_num = patent.find_all('doc-number')
print(country + doc_num)

continue

这给了我大部分我想要的东西。我得到这个:

[<country>US</country>, <doc-number>D0591026</doc-number>]

但我想要的只是:

US D0591026

我知道对象的类型是bs4结果集,但我不太熟悉如何只返回标签中的内容。最终,这将是一个 csv,所以我不想在那里有这些标签。

我将 soup 对象转换为字符串并使用正则表达式来获得所需的输出

...
import re
...
...
country = patent.find_all('country')
doc_num = patent.find_all('doc-number')
country_str = str(country)
doc_num_str = str(doc_num)
country_str2 = re.search('>(.*)<', country_str)
doc_num_str2 = re.search('>(.*)<', doc_num_str)
print(country_str2.group(1) + doc_num_str2.group(1))

最佳答案

要使用列表理解和 zip 获取包含 doc-number 及其相关的 country 的列表,一个简单的单行代码如下:

>>> [(country.text,number.text) for country, number in zip(soup.findAll("country"), soup.findAll("doc-number"))]
[('US', 'D0591026'), ('US', '29303426'), ('CA', '122078')]

或者如果您不习惯列出推导式,也许是一种更易读的方式:

>>> lst = []
>>> for country, number in zip(soup.findAll("country"), soup.findAll("doc-number")):
print(country.text, number.text)
lst.append((country.text, number.text))


US D0591026
US 29303426
CA 122078
>>> lst
[('US', 'D0591026'), ('US', '29303426'), ('CA', '122078')]

关于python - 用 Beautiful Soup 解析 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45395811/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com