Python“NoneType”对象不可调用(初学者)

2024-10-02 10:26:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在写一个脚本用美丽的汤,从他们各自的维基百科页面上,把1999-2003年温布尔登网球锦标赛的开始和结束日期都从他们各自的维基百科页面中划出。在

我想将日期范围作为可选对象的列表,并编写了一个脚本来实现这一点:

from bs4 import BeautifulSoup
import requests
import re 
import os 

year = 1999 
url = "https://en.wikipedia.org/wiki/{tourneyYear}_Wimbledon_Championships"
range = [1, 2, 3, 4, 5,]

for number in range:

    response = requests.get(url.format(tourneyYear=year))
    text = response.text
    soup = BeautifulSoup(text, "html.parser")

    overviewTable = soup.find('table', attrs ={'class':"infobox vevent"})

    date = overviewTable.find('th', attrs={"scope":"row"}).parent
    specialResult = date.find('td')
    for sentence in specialResult:
    words = sentence.split()

    print(words)

    year += 1

循环遍历网页(‘year’每增加1次,插入我定义的URL结构—顺便说一下,这个部分工作得很好),它应该在最后打印列表。在

对于循环的前两次迭代(对于1999年和2000年的温布尔登页面),列表打印得很好。但在第三次迭代时,它返回以下错误:

^{pr2}$

每个网页的相关部分的HTML结构是相同的(据我所知),并且循环只在2001年的迭代中失败(我知道这一点,因为如果我将循环设置为在不包括2001年的任何五年范围内迭代,它就可以正常工作了)。在

我的代码中有错误吗,或者那个特定的网页在某些方面有什么不同,我没有注意到?我为这件事绞尽脑汁已经好几天了,但是没有结果!在


Tags: textinimport脚本url网页列表for
1条回答
网友
1楼 · 发布于 2024-10-02 10:26:27

TL;DR:您需要删除for-循环并使用^{}来获得每个元素的文本,然后split()它:

date = overviewTable.find('th', attrs={"scope":"row"}).parent
words = date.find('th').get_text().split()

说明:

^{}不返回字符串列表,它返回单个^{}对象。因此,specialResult中的是一个Tag对象。在

迭代标记对象时,可以获得两种类型的项:字符串(用于文本)和其他标记对象(用于内部元素)。您的代码失败,因为specialResult不仅包含文本,还包含子元素:

^{pr2}$

这里的sup元素不是字符串,它是一个标记对象,它没有split()方法,这就是为什么会出现异常。在

相关问题 更多 >

    热门问题