【问题标题】:Python error: 'NoneType' object has no attribute 'find_all'Python 错误:“NoneType”对象没有属性“find_all”
【发布时间】:2014-06-04 20:57:56
【问题描述】:

我正在调整来自http://danielfrg.com/blog/2013/04/01/nba-scraping-data/#disqus_thread 的网络抓取程序,以将 ESPN 的棒球数据抓取到 CSV 中。但是,当我运行第二段代码来编写游戏的 csv 时,我从以下代码部分得到“NoneType”对象没有属性“find_all”错误

for index, row in teams.iterrows():
    _team, url = row['team'], row['url']
    r = requests.get(BASE_URL.format(row['prefix_1'], year, row['prefix_2']))
    table = BeautifulSoup(r.text).table
    for row in table.find_all("tr")[1:]: # Remove header
        columns = row.find_all('td')
        try:
            _home = True if columns[1].li.text == 'vs' else False
            _other_team = columns[1].find_all('a')[1].text
            _score = columns[2].a.text.split(' ')[0].split('-')
            _won = True if columns[2].span.text == 'W' else False

            match_id.append(columns[2].a['href'].split('?id=')[1])
            home_team.append(_team if _home else _other_team)
            visit_team.append(_team if not _home else _other_team)
            d = datetime.strptime(columns[0].text, '%a, %b %d')
            dates.append(date(year, d.month, d.day))

我可以发布整个程序,但这是编译器读取错误的那段代码。

完整的错误文本是

Traceback (most recent call last):
  File "C:\Python27\Project Files\Game Parser.py", line 23, in <module>
    for row in table.find_all("tr")[1:]: # Remove header
AttributeError: 'NoneType' object has no attribute 'find_all'

任何有关如何运行此代码的帮助将不胜感激。

【问题讨论】:

  • tableNone...阅读错误...了解它。

标签: python object attributeerror nonetype


【解决方案1】:

错误表示您正在构建的table 变量:

table = BeautifulSoup(r.text).table

正在返回None。而None 上的for row in table.find_all("tr")[1:]: 则抛出错误。

您可以检查有问题的url 是否有您尝试访问它的表。您可以通过打印出此语句构造的url 来做到这一点:

BASE_URL.format(row['prefix_1'], year, row['prefix_2'])

然后在您的浏览器中访问此 url 以检查它是否有您感兴趣的表格。

【讨论】:

    猜你喜欢
    • 2018-05-02
    • 2022-01-12
    • 2021-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    相关资源
    最近更新 更多