AttributeError: 'NoneType' 对象没有属性 'findNext',检索推文时出现错误
我有一个文件,里面包含了一些用户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
用 urllib2
和 BeautifulSoup
来解析推特页面真的很麻烦,因为页面里有很多动态的 JavaScript 逻辑,还有 AJAX
调用,这些都会影响页面的构建。
具体来说,你用 urllib2
获取的页面并不包含 original-tweet
,也没有带有 data-tweet-id
属性的元素,所有的 data-user-id
属性都是空的。
与其重新发明轮子,不如直接使用 Twitter API
。
有很多 Python 的推特 API 客户端可以选择:
希望这些信息对你有帮助。