我是python的新手,但想使用urllib下载推文,我正在按照教程说明进行操作,但每次都会出现同样的错误,我打印出来:
import urllib
import json
response = urllib.urlopen("https://twitter.com/search?q=Microsoft&src=tyah")
print json.load(response)
但每次我收到错误:
Traceback (most recent call last):
File "C:\Python27\print.py", line 4, in <module>
print json.load(response)
File "C:\Python27\Lib\json\__init__.py", line 278, in load
**kw)
File "C:\Python27\Lib\json\__init__.py", line 326, in loads
return _default_decoder.decode(s)
File "C:\Python27\Lib\json\decoder.py", line 366, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:\Python27\Lib\json\decoder.py", line 384, in raw_decode
raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
答案 0 :(得分:1)
如评论中所述,答案是:您的代码本身没有任何问题。
问题是当json.load
查看response
时,它找不到JSON - 它正在查找HTML。
您需要将包含JSON的类文件对象传递到json.load
函数中,否则会引发您在此处看到的异常。
要从Twitter获取JSON,您需要调用提供JSON响应的URL。我现在可以告诉你,没有任何Web界面URL直接执行此操作。您应该使用Twitter API。
但是,纯粹为了演示,如果您在现在调用的URL上解构页面,您会发现要加载推文数据,该页面会发出以下请求:
此URL确实会返回JSON作为响应,这对您当前的代码可以正常工作。
当然,我很确定这样做违反了某种Twitter的TOS,所以如果你这样做会有各种潜在的负面影响需要考虑。再加上它不是很好的体育精神。 :)