繁体   English   中英

将urllib.urlopen结果传递给json.load时出错

[英]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数据,页面会发出以下请求:

https://twitter.com/i/search/timeline?q=Microsoft&src=tyah&composed_count=0&include_available_features=1&include_entities=1

并且此URL确实返回JSON作为响应,这将与您当前的代码配合使用。

当然,我敢肯定这样做违反了某种Twitter TOS,因此,如果您这样做,则有各种潜在的负面影响要考虑。 另外,这不是很好的体育精神。 :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM