#python #xml #beautifulsoup
#python #xml #beautifulsoup
Вопрос:
Моя цель — получить все данные из XML-файла. Итак, я попытался проанализировать XML с помощью BeautifulSoup и попытался извлечь все это в один CSV-файл.
Мой XML выглядит следующим образом:
<?xml version="1.0" encoding="ISO-8859-1"?>
<jobs>
<job>
<title>
<![CDATA[Personal Shopper]]>
</title>
<date>
<![CDATA[Sat, 05 Dec 2020 12:25:52 UTC]]>
</date>
<referencenumber>
<![CDATA[12312414141]]>
</referencenumber>
<city>
<![CDATA[Powell]]>
</city>
<state>
<![CDATA[Washington]]>
</state>
<country>
<![CDATA[US]]>
</country>
<postalcode>
<![CDATA[98388]]>
</postalcode>
<salary>
<![CDATA[]]>
</salary>
<description>
<![CDATA[Sample of description]]>
</description>
</job>
<job>
<title>
<![CDATA[CEO]]>
</title>
<date>
<![CDATA[Sat, 28 Nov 2020 00:54:32 UTC]]>
</date>
<referencenumber>
<![CDATA[1231314211241412]]>
</referencenumber>
<city>
<![CDATA[peanut]]>
</city> <country>
<![CDATA[US]]>
</country>
<postalcode>
<![CDATA[01961]]>
</postalcode>
<description>
<![CDATA[sample of description]]>
</description>
<source>
<![CDATA[Get me a job]]>
</source>
<cpc>0.36</cpc>
</job>
Я использовал это .приведенные ниже коды py, которые должны выводить все ссылочные номера из XML в файл csv, однако он извлек только 1 ссылочный номер из моего XML-файла? Может кто-нибудь указать, какую часть я сделал неправильно?
from bs4 import BeautifulSoup
fd = open('/users/minion/downloads/goodnight.xml')
xml_file = fd.read()
output_csv = "output.csv"
soup = BeautifulSoup(xml_file,'html.parser')
with open(output_csv, 'w') as fout:
#print header
header="idx,reference_number"
fout.write("{}n".format(header))
for idx,tag in enumerate(soup.findAll("referencenumber")):
data_row="{},{}".format(idx,tag)
fout.write("{}n".format(data_row))
fd.close()
Комментарии:
1. вы заглядывали в
xmlns
библиотеку?2. Во-первых, для анализа XML-файлов вам, вероятно, лучше использовать lxml, который поддерживает xpath 1.0. Во-вторых, какими вы ожидаете значения
data_row
?3. Спасибо, ребята, отредактировали нижеприведенную часть, и она сработала как шарм!! для idx тег в enumerate(soup.findAll(«referencenumber»)): data_row=»{},{}».format(idx,тег)