Как получить атрибуты HTML во вложенных тегах с помощью Mechanize в Python? - PullRequest
4 голосов
/ 06 декабря 2011

все. У меня проблемы с получением ссылок во вложенном HTML с помощью Mechanize в Python. Вот мой текущий код (я перепробовал все; это просто последняя копия, которая не работает правильно) (и простите мои имена переменных (вещи, вещи)):

soup = BeautifulSoup(resultsPage)

if not soup.find(attrs={'class' : 'paging'}):
    print "Only one producted listed!"
else:   
    stuff = soup.find('div', attrs={'class' : 'paging'}).ul.li
    for thing in stuff:
        print thing

Вот HTML-код, на который я смотрю:

<div class="paging">
<ul>
    <li><
    </li>
    <li class='on'>
        1-10
    </li>
    <li  class=''>
        <a id="ctl00_SPWebPartManager1_g_83a79912_01d8_4726_8a95_2953baaad0ec_ctl01_ucProductInfoPageNavigatorGroupTop_rptPageNavigators_ctl01_hlPage" href="http://www.kraftrecipes.com/products/pages/productinfosearchresults.aspx?catalogtype=1&amp;brandid=22&amp;searchtext=jell-o&amp;pageno=2">11-20</a>
    </li>
    <li  class=''>
        <a id="ctl00_SPWebPartManager1_g_83a79912_01d8_4726_8a95_2953baaad0ec_ctl01_ucProductInfoPageNavigatorGroupTop_rptPageNavigators_ctl02_hlPage" href="http://www.kraftrecipes.com/products/pages/productinfosearchresults.aspx?catalogtype=1&amp;brandid=22&amp;searchtext=jell-o&amp;pageno=3">21-30</a>
    </li>
    <li  class=''>
        <a id="ctl00_SPWebPartManager1_g_83a79912_01d8_4726_8a95_2953baaad0ec_ctl01_ucProductInfoPageNavigatorGroupTop_rptPageNavigators_ctl03_hlPage" href="http://www.kraftrecipes.com/products/pages/productinfosearchresults.aspx?catalogtype=1&amp;brandid=22&amp;searchtext=jell-o&amp;pageno=4">31-40</a>
    </li>
    <li  class=''>
        <a id="ctl00_SPWebPartManager1_g_83a79912_01d8_4726_8a95_2953baaad0ec_ctl01_ucProductInfoPageNavigatorGroupTop_rptPageNavigators_ctl04_hlPage" href="http://www.kraftrecipes.com/products/pages/productinfosearchresults.aspx?catalogtype=1&amp;brandid=22&amp;searchtext=jell-o&amp;pageno=5">41-50</a>
    </li>
    <li  class=''>
        <a id="ctl00_SPWebPartManager1_g_83a79912_01d8_4726_8a95_2953baaad0ec_ctl01_ucProductInfoPageNavigatorGroupTop_rptPageNavigators_ctl05_hlPage" href="http://www.kraftrecipes.com/products/pages/productinfosearchresults.aspx?catalogtype=1&amp;brandid=22&amp;searchtext=jell-o&amp;pageno=6">51-60</a>
    </li>
    <li>
        <a id="ctl00_SPWebPartManager1_g_83a79912_01d8_4726_8a95_2953baaad0ec_ctl01_ucProductInfoPageNavigatorGroupTop_lnkNext" href="http://www.kraftrecipes.com/products/pages/productinfosearchresults.aspx?catalogtype=1&amp;brandid=22&amp;searchtext=jell-o&amp;pageno=7">>></a>
    </li>
</ul>

Мне нужно определить, есть ли <li> теги с гиперссылками в них; если есть, мне нужно сохранить их для последующего нажатия. Это страница, с которой пришёл код, на случай, если вам интересно: http://www.kraftrecipes.com/Products/ProductInfoSearchResults.aspx?CatalogType=1&BrandId=22&SearchText=Jell-O&PageNo=1 Я работаю над тем, чтобы почистить сайты о продуктах питания для получения информации о продукте, и мне нужно иметь возможность перемещаться по результатам поиска.

У меня есть еще один быстрый вопрос. Разве плохо связывать вместе теги и поиски, как этот?

ingredients = soup.find(attrs={'class' : "TitleAndDescription"}).div.find(text=re.compile("Ingredients")).next

Я только изучаю Python, но это, кажется, немного глупо, и я хотел бы знать, что вы, ребята, думаете. Вот пример HTML-кода, который я собираю:

<table>
    <tr>
        <td>
            <div id="contHeader" class="TitleAndDescription">
                <h1>JELL-O - GELATIN DESSERT - RASPBERRY</h1>
                <div class="textArea">
                    <strong>Ingredients:</strong> SUGAR, GELATIN, ADIPIC ACID (FOR TARTNESS), CONTAINS LESS THAN 2% OF ARTIFICIAL FLAVOR, DISODIUM PHOSPHATE AND SODIUM CITRATE (CONTROL ACIDITY), FUMARIC ACID (FOR TARTNESS), RED 40.<br/>
                    <strong>Size:</strong> 6 OZ<br/><strong>Upc:</strong> 4300020052<br/>
                    <br/>
                    <!--<br/>-->
                    <br/>
                </div>
            </div>
            ...
        </td>
        ...
    </tr>
    ...
</table>

Извините за стену текста. Дайте мне знать, если вам нужна дополнительная информация.

Спасибо.

Ответы [ 2 ]

1 голос
/ 08 мая 2012

Модуль Python «HTMLParser» может быть одним из решений проблемы.Найти более подробную информацию можно по адресу http://docs.python.org/library/htmlparser.html

0 голосов
/ 12 декабря 2011

Если я правильно понял, вы хотите получить список всех тегов li, которые содержат любой тег a (независимо от того, как глубоко в дереве DOM).Если это правильно, то вы можете сделать что-то вроде этого:

from BeautifulSoup import BeautifulSoup

soup = BeautifulSoup(resultsPage)
list_items = [list_item for list_item in soup.findAll('li')
              if list_item.findAll('a')]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...