AttributeError:'NoneType'对象没有'find'属性

0 投票
1 回答
10142 浏览
提问于 2025-04-18 10:12

我有一组网址,这些网址放在一个叫做列表的地方,比如说有一个网址是 http://www.amazon.com/b/ref=s9_al_bw_brwse_a_v?_encoding=UTF8&node=9097393011&pf_rd_m=ATVPDKIKX0DER&pf_rd_s=center-4&pf_rd_r=10RXCP9TZPW3BP73EKHA&pf_rd_t=101&pf_rd_p=1818119462&pf_rd_i=2858778011。在这个网址页面的底部,有每个类别的页数。

我想从一个叫做span的元素中获取一个网址,但它却返回了 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 个回答

2

你没有提供完整的错误信息,但可以推测是因为 soup.find('div') 这个调用返回了 None。对于 那个页面 来说,你想找的元素 并不存在

如果找不到某个元素,Element.find() 就会返回 None,接下来如果有代码试图使用这个 None 的值,就会出错。在这个例子中,no_pagesNone,所以 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 不存在,这个查找就会返回一个空的结果。

撰写回答