从不同标签获取ressult时出错

时间:2014-05-30 10:33:18

标签: python beautifulsoup

我必须访问一些网站内容,但在使用美丽的汤刮它我发现此错误无类型

#parsing the url
import urllib2, sys
from BeautifulSoup import BeautifulSoup

site= "http://www.doctoralia.com.au/healthpros"
hdr = {'User-Agent': 'Mozilla/5.0'}
req = urllib2.Request(site,headers=hdr)
page = urllib2.urlopen(req)
soup = BeautifulSoup(page)
last_page = soup.find('li', class_='last').a 

这是一个错误的回报

Traceback (most recent call last):
File "srapping1.py", line 10, in <module>
last_page = soup.find('li', class_='last').a
AttributeError: 'NoneType' object has no attribute 'a'

2 个答案:

答案 0 :(得分:0)

这是因为soup.find('li', class_='last')无法找到任何内容,因此它会返回None(只是尝试使用print soup.find('li', class_='last'),您会看到此结果)所以一个NoneObject不会#39; t有a方法,换句话说,find方法与任何条件都不匹配。

答案 1 :(得分:0)

您正在使用BeautifulSoup版本3,但尝试使用仅由BeautifulSoup 版本4 支持的语法。

您必须将类属性查询作为字典传递:

soup.find('li', {'class':'last'})

不是那样会返回一个寻呼机元素;你想先找ul.pager

last_page = soup.find('ul', {'class': 'pager'}).find('li', {'class': 'last'}).a

演示:

>>> from BeautifulSoup import BeautifulSoup
>>> soup = BeautifulSoup(r.content)
>>> soup.find('li', {'class':'last'})
<li class="last">Medical practice</li>
>>> soup.find('ul', {'class': 'pager'}).find('li', {'class': 'last'})
<li class="last"><a href="/healthpros/1563">1563</a></li>

你真的应该升级到BeautifulSoup 4但是,版本3在2年多的时间里还没有发布新版本。

更好的是,BeautifulSoup 4支持CSS selectors

last_page = soup.select('ul.pager li.last a')[0]

演示:

>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup(r.content)
>>> soup.select('ul.pager li.last a')[0]
<a href="/healthpros/1563">1563</a>