当扩展的url不够时,用Tweepy完成url(与urllib2集成?)

2024-04-18 05:21:25 发布

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

我最近开始用粗呢,尤其是api.user_时间线. 我的脚本从用户那里下载一系列tweets,并将Tweepy状态调用中提供的大多数不同细节打印到文本文件中。我的问题是从twitter中撤销这些微小的url。我在这个网站上读到了一个答案,正确的解决方法是在Twitter实体中使用“扩展的url”命令,这就是我所做的。这是我的代码:

import tweepy
import codecs


auth = tweepy.OAuthHandler("xxx", "xxx")
auth.set_access_token("yyy", "yyy")

with codecs.open("file.txt", encoding='utf-8', mode='w+') as f:
   api = tweepy.API(auth)
   for status in tweepy.Cursor(api.user_timeline, "xxx", include_entities=True).items():
    ...
    # Extracting info from the entities
       for hashtag in status.entities['hashtags']:
           f.write(format(hashtag['text']))


       for url in status.entities['urls']:
           f.write(format(url['expanded_url']))

问题是这些扩展的url并不总是我需要的完整url。例如,tweet的相关代码给出的结果是“http://goo.gl/sOH17n”,它仍然隐藏了文章的真正来源。我有一段代码,它提供了带有urllib2的完整url,但是当我把它们放在一起时,我得到了一个'HTTPError:HTTPError 403:Forbidden'。这是我的试用版,但不起作用(它总是与部件集成在一起,所以不通过身份验证不是问题)

^{pr2}$

所以,我的问题是,有没有办法在Tweepy中找到真正完整的url?如果没有,为什么与urllib2的集成不起作用?如果这个问题看起来微不足道,我很抱歉,但我似乎找不到解决这个问题的方法,tweepy的文档也很粗略。在

提前感谢您的回答!在


Tags: 方法代码inimportauthapiurlfor
2条回答

多亏了swstephe,我把注意力集中在head请求上,这样就避免了打开页面,我发现模块请求非常好用。在

所以我找到了一个解决方案:

   import requests
   for url in status.entities['urls']:
        expanded_url=url['expanded_url']
        r= requests.head(expanded_url)
        if r.status_code in range (200,300):
            f.write(format(r.url))
        elif r.status_code in range (300,400):
            f.write(format(r.headers['location']))
        else:
            f.write(format(r.status_code))

我还是不明白为什么urllib2不能工作。我想从现在开始我会使用请求。谢谢你的帮助。我真的很感激。在

这个网址来自谷歌,所以我不认为Tweepy存储的是如果你点击这个链接,谷歌会给你指示的地方。您可以使用httplib找到这一点,(这样您就可以获得HEAD,而不必获取它将加载的页面的完整获取):

import httplib
from urlparse import urlparse

url = urlparse('http://goo.gl/sOH17n')    # split URL into components
conn = httplib.HTTPConnection(url.hostname, url.port)
conn.request('HEAD', url.path)            # just look at the headers
rsp = conn.getresponse()
if rsp.status in (301,401):               # resource moved (permanent|temporary)
    print rsp.getheader('location')
else:
    print url
conn.close()

当我运行它时,我得到一个URL,而不是403错误。这个错误通常表示您没有权限查看该页面,所以我猜您给出的URL不是您发布的那个。在

相关问题 更多 >