Ошибка атрибута: объект ‘NoneType’ не имеет атрибута ‘find’

#python #beautifulsoup

#python #beautifulsoup

Вопрос:

У меня есть набор URL-адресов, у меня есть эти URL-адреса в списке с именем list (например http://www.amazon.com/b/ref=s9_al_bw_brwse_a_v?_encoding=UTF8amp;node=9097393011amp;pf_rd_m=ATVPDKIKX0DERamp;pf_rd_s=center-4amp;pf_rd_r=10RXCP9TZPW3BP73EKHAamp;pf_rd_t=101amp;pf_rd_p=1818119462amp;pf_rd_i=2858778011 ). Внизу этой страницы URL-адресов указано количество страниц для каждой категории.

Существует элемент span, из которого я пытаюсь вернуть URL.Но он возвращает NoneType error

Код, который я пробовал до сих пор

 for links in full_links:
    mech=Browser()
    mech.set_handle_robots(False)
    mech.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
    url=links
    page=mech.open(url)
    html=page.read()
    soup=BeautifulSoup(html)
    no_pages = soup.find('div',id="pagn")
    a=no_pages.find('span',{'class':'pagnLink'})
    for aes in a:
        print aes.text
        for a in elm.findAll('a'):
            link='http://www.amazon.com' a['href']
            print link
  

Комментарии:

1. soup=BeautifulSoup(html)no_pages = soup.find('div',id="pagn") Чего вы пытаетесь достичь с помощью этой строки? Или вам не хватает новой строки

2. @TimCastelijns Получение содержимого внутри div #pagn

3. Когда я запускаю этот код, я не получаю NoneType error , я получаю SyntaxError soup=BeautifulSoup(html)no_pages = soup.find('div',id="pagn") . Пожалуйста, дважды проверьте, что этот код идентичен версии, которую вы используете. (подсказка: я повторяю вопрос Тима: «Вам не хватает новой строки?» вопрос)

4. @FazeelaAbuZohra: Тим имел в виду, что эта строка не является законным Python. Поскольку это вызвало бы другое исключение, я разделил два выражения на две строки для вас.

Ответ №1:

Вам не удалось включить полную обратную трассировку, но, предположительно soup.find('div') , это возвращенный вызов None . Для этой страницы элемент, который вы пытались найти, отсутствует.

Если элемент не найден, Element.find() возвращает None и последующая строка, которая пытается использовать это None значение, завершится неудачей. В этом случае no_pages есть None , поэтому no_pages.find() затем сбой.

Для подобных поисков элементов гораздо проще использовать селекторы CSS:

 for page_link in soup.select('div#pagn span.pagnLink a[href]'):
    link = 'http://www.amazon.com'   page_link['href']
    print link
  

Это позволит найти все ссылки в <div id="pagn"> <span class="pagnLink> дереве элементов ->, при условии, что у них есть href атрибут.

Этот поиск просто вернет пустой цикл, если либо div или span отсутствует.

Комментарии:

1. @FazeelaAbuZohra: для URL-адреса, который вы указали в своем сообщении, есть одно совпадение. Если вы ничего не видите для этого URL-адреса, возможно, у вас ошибка при загрузке страницы или вы lxml установили, но у вас проблема с libxml2 библиотекой (реже в наши дни), и синтаксический анализ по какой-то причине завершается неудачно.