AttributeError: 'NoneType' 对象没有属性 'findNext',检索推文时出现错误

1 投票
1 回答
718 浏览
提问于 2025-04-18 07:15

我有一个文件,里面包含了一些用户ID和推文ID。我想用这些信息来获取推文。
但是当我尝试获取推文时遇到了问题。我的Python脚本在遇到被Twitter暂停的账号时崩溃了。我收到的错误信息是:

AttributeError: 'NoneType' object has no attribute 'findNext'

因为我在Python方面还很新,所以不太确定该如何处理这个问题。我希望脚本能够继续获取推文,即使它遇到任何被暂停的账号。

一个被暂停的账号的例子是 这个

而成功获取的推文的例子是 这个

我用来获取推文的代码如下:

def get_tweet(user_id, tweet_id):  
"""fetch the tweet from given user_id and tweet_id  
   returns tweet text  if found, otherwise returns Not Found
"""
url = TWITTER_URL + user_id + "/status/" + tweet_id
url = url.replace("\n", "")
print(url);
tweet = 'Not Found'
try:
    response = urllib2.urlopen(url)
    html = response.read()
    soup = BeautifulSoup(html)
    #extrat the paragraph that contains the tweet


    tweet_paragrapgh = soup.find("div", 'original-tweet',{"data-user-id": user_id, "data-tweet-id": tweet_id}).findNext('p','js-tweet-text')
                                                                                                #strip off the html tag and get the tweet text
    #print(tweet_paragrapgh);
    tweet = tweet_paragrapgh.text
    print (tweet);
except urllib2.HTTPError as e:
    print
    print "HTTP ERROR response code ", e.code, " for user id: ", user_id, " tweet id: ", tweet_id
    return tweet
except urllib2.URLError as e:
    print
    print'Error reaching to server for ', "user id: ", user_id, " tweet id: ", tweet_id
    print 'Reason: ', e.reason
    return tweet
return tweet

提前谢谢你

1 个回答

1

urllib2BeautifulSoup 来解析推特页面真的很麻烦,因为页面里有很多动态的 JavaScript 逻辑,还有 AJAX 调用,这些都会影响页面的构建。

具体来说,你用 urllib2 获取的页面并不包含 original-tweet,也没有带有 data-tweet-id 属性的元素,所有的 data-user-id 属性都是空的。

与其重新发明轮子,不如直接使用 Twitter API

有很多 Python 的推特 API 客户端可以选择:

希望这些信息对你有帮助。

撰写回答