[英]Error when passing urllib.urlopen result to json.load
我是python的新手,但想使用urllib下载tweets,我正在按照教程中的说明进行操作,但每次打印时都遇到相同的错误:
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
如评论中所述,答案是:代码本身没有什么问题。
问题在于,当json.load
查看response
,它在那里找不到json.load
它正在找到HTML。
您需要将包含JSON的类似文件的对象传递给json.load
函数,否则它将引发您在此处看到的异常。
要从Twitter获取JSON,您需要调用一个给出JSON响应的URL。 现在,我可以告诉您,没有一个Web界面URL可以直接执行此操作。 您应该使用Twitter API。
但是,纯粹出于演示的目的,如果您在当前调用的URL上解构页面,则会发现要加载tweet数据,页面会发出以下请求:
并且此URL确实返回JSON作为响应,这将与您当前的代码配合使用。
当然,我敢肯定这样做违反了某种Twitter TOS,因此,如果您这样做,则有各种潜在的负面影响要考虑。 另外,这不是很好的体育精神。 :)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.