Выбор n-го ребенка с помощью BeautifulSoup Python3 - PullRequest
0 голосов
/ 11 мая 2018

Я использую Python3 Beautiful Soup, чтобы удалить сайт.Это данные XML, которые я получаю.

<?xml version="1.0" encoding="utf-8"?>
        <title type="text">MATERIALSET('R100100100')</title>
        <updated>2018-05-11T04:28:47Z</updated>
        <category term="ZPOC_BOT_PUR_GRP_SRV.MATERIAL" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme"/>
        <link href="MATERIALSET('R100100100')" rel="self" title="MATERIAL"/>
        <content type="application/xml">
            <m:properties>
                <d:MATNR>R100100100</d:MATNR>
                <d:WERKS>Z100</d:WERKS>
                <d:MENGE>       1.000</d:MENGE>
                <d:EEIND>29.06.2018</d:EEIND>
                <d:BANFN>5000000041</d:BANFN>
            </m:properties>
        </content>
    </entry>

Я просто хочу извлечь данные в d: BANFN.Если я непосредственно пишу soup.select ('d: BANFN "), это показывает ошибку' nth_child_of_type '. Некоторые вопросы в Stackoverflow я рассмотрел по ссылкам - Получение n-го элемента с использованием BeautifulSoup и выбор второго ребенка в красивом супе с soup.select? Но ничего не помогает. Пожалуйста, помогите.

1 Ответ

0 голосов
/ 11 мая 2018

В xml-файле должен быть начальный тег для атрибута entry, тогда только вы сможете проанализировать xml-файл:

<!-- Sample.xml contains following data: -->
<?xml version="1.0" encoding="utf-8"?>
    <entry>
        <title type="text">MATERIALSET('R100100100')</title>
        <updated>2018-05-11T04:28:47Z</updated>
        <category term="ZPOC_BOT_PUR_GRP_SRV.MATERIAL" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme"/>
        <link href="MATERIALSET('R100100100')" rel="self" title="MATERIAL"/>
        <content type="application/xml">
            <m:properties>
                <d:MATNR>R100100100</d:MATNR>
                <d:WERKS>Z100</d:WERKS>
                <d:MENGE>       1.000</d:MENGE>
                <d:EEIND>29.06.2018</d:EEIND>
                <d:BANFN>5000000041</d:BANFN>
            </m:properties>
        </content>
    </entry>

from bs4 import BeautifulSoup
with open("sample.xml", "r") as f: # opening xml file
    content = f.read() # xml content stored in this variable and decode to utf-8

soup = BeautifulSoup(content, 'lxml') #parse content to BeautifulSoup Module

print("BANFN value : {}".format([ item.text for item in soup.find_all("d:banfn")][0])) #required result

#output:
BANFN value : 5000000041
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...