美丽的汤:find()函数

时间:2018-04-04 20:26:28

标签: python beautifulsoup

url = url_stub % (stat_id, starting_year)
page = requests.get(url)
html = BeautifulSoup(page.text.replace('n', ''), 'html.parser')
stat = html.find("div", class_="parsys mainParsys section").find('h3').text

我正在尝试使用BeautifulSoup对象并使用find()函数,但我一直得到" AttributeError:' NoneType'对象没有属性'找到'"。我做错了什么?

4 个答案:

答案 0 :(得分:0)

@jasonharper是对的。您可以考虑使用异常处理或将该链断开为部分以检查是否有来自html.find("div", class_="parsys mainParsys section")

的对象

答案 1 :(得分:0)

要更好地排查问题,您需要修改代码。这将帮助您找到代码的哪些部分失败。但是,我还要考虑将html类缩小到单个html类进行测试,然后如果这是问题之一,找出如何向查找函数添加多个类名

先试试这个。如果失败,请尝试单个html类名。

url = url_stub % (stat_id, starting_year)
page = requests.get(url)
html = BeautifulSoup(page.text.replace('n', ''), 'html.parser')

print('before stat')
stat = html.find("div", class_="parsys mainParsys section")
print('stat worked')
print('before data')
data = stat.find('h3').text
print('after data')

编辑:同样,class_可能不会被称为class_,而只是类

答案 2 :(得分:0)

@jasonharper指出,那是因为第一个.find()找不到任何东西。为避免错误,您必须验证您的第一个和第二个查找是否找到了任何内容:

if html.find("div", class_="parsys mainParsys section"):
     if html.find("div", class_="parsys mainParsys section").find('h3'):
         stat = html.find("div", class_="parsys mainParsys section").find('h3').text
     else:
         stat=None
else:
    stat = None

答案 3 :(得分:0)

我偶然发现了您正在使用的相同功能和项目。您必须更改:

stat = html.find("div", class_="parsys mainParsys section").find('h3').text

stat = html.find("div", class_="parsys mainParsys").find('h3').text

此外,如果您使用的是3.6版本,则必须进行更新:

import urllib.request
urllib.request.urlretrieve(url, filename)