Извлечение данных из XML в файл csv с помощью BeautifulSoup

#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,тег)