AttributeError:'NoneType'对象没有'find'属性
我有一组网址,这些网址放在一个叫做列表的地方,比如说有一个网址是 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_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
不存在,这个查找就会返回一个空的结果。