Разбор / извлечение данных из API XML feed с Python и Beautiful Soup - PullRequest
0 голосов
/ 11 октября 2011

Python / xml новичок здесь играет с Python и BeautifulSoup, пытаясь научиться разбирать XML, особенно возиться с API Oodle.com, чтобы вывести список автомобильных объявлений. Я имел успех с простым XML и BS, но работая с этим, я не могу получить нужные данные, что бы я ни пытался. Я пытался часами читать документацию по Супу и не могу понять. XML структурирован как:

<?xml version="1.0" encoding="utf-8"?>
<oodle_response stat="ok">
    <current>
        ....
    </current>
    <listings>
        <element>
            <id>8453458345</id>
            <title>2009 Toyota Avalon XL Sedan 4D</title>
            <body>...</body>
            <url>...</url>
            <images>
                <element>...</element>
                <element>...</element>
            </images>
            <attributes>
                <features>...</features>
                <mileage>32637</mileage>
                <price>19999</price>
                <trim>XL</trim>
                <vin>9234234234234234</vin>
                <year>2009</year>
            </attributes>
        </element>      
        <element>.. Next car here ..</element>
        <element>..Aaaand next one here ..</element>    
    </listings>
    <meta>...</meta>
</oodle_response>

Сначала я делаю запрос с помощью urllib, чтобы получить фид и сохранить его в локальном файле. Тогда:

xml = open("temp.xml", "r")
from BeautifulSoup import BeautifulStoneSoup
soup = BeautifulStoneSoup(xml)

Тогда я не уверен, что. Я перепробовал много вещей, но все, кажется, отбрасывает больше мусора, чем я хочу, и это затрудняет поиск проблемы. Я пытаюсь просто получить идентификатор, название, пробег, цену, год, вин. Итак, как мне получить их и ускорить процесс с помощью цикла? В идеале я хотел цикл вроде:

for soup.listings.element in soup.listings:
    id = soup.listings.element.id
    ...

Я знаю, что это не работает, очевидно, но что-то, что получит информацию для списка, сохранит ее в списке, а затем перейдет к следующему объявлению. Цените помощь, ребята

1 Ответ

0 голосов
/ 12 октября 2011

Вы можете сделать что-то вроде этого:

for element in soup('element'):
    id = element.id.text
    mileage = element.attributes.mileage.text
    price = element.attributes.price.text
    year = element.attributes.year.text
    vin = element.attributes.vin.text
...