我必须访问一些网站内容,但在使用美丽的汤刮它我发现此错误无类型
#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'
答案 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>