Python3:尝试从请求中获取JSON代码

Python3:尝试从请求中获取JSON代码,python,json,twitter,request,Python,Json,Twitter,Request,我试图从关注twitter的urllib.request对象中提取JSON代码。我之所以这么做是出于好奇,也是因为我试图通过scrasty来确定要请求什么,以便编写绕过twitter无限滚动的代码,并允许我从用户的时间线中提取所有推文 (我知道有些软件包已经做到了这一点,但我想自己设置它,在实践中学习:) 我一直在使用urllib包来获取请求数据,但在尝试时遇到了令人沮丧的错误: import json import urllib with urllib.request.urlopen("ht

我试图从关注twitter的
urllib.request
对象中提取JSON代码。我之所以这么做是出于好奇,也是因为我试图通过
scrasty
来确定要请求什么,以便编写绕过twitter无限滚动的代码,并允许我从用户的时间线中提取所有推文

(我知道有些软件包已经做到了这一点,但我想自己设置它,在实践中学习:)

我一直在使用
urllib
包来获取请求数据,但在尝试时遇到了令人沮丧的错误:

import json
import urllib

with urllib.request.urlopen("https://twitter.com/vonkraush") as url:
    data = url.read().decode()

print(json.loads(data))

Traceback (most recent call last):

  File "<ipython-input-30-208336effb36>", line 1, in <module>
    json.loads(data)

  File "C:\Users\Josh\Anaconda3\lib\json\__init__.py", line 354, in loads
    return _default_decoder.decode(s)

  File "C:\Users\Josh\Anaconda3\lib\json\decoder.py", line 339, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())

  File "C:\Users\Josh\Anaconda3\lib\json\decoder.py", line 357, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None

JSONDecodeError: Expecting value
导入json
导入URL库
使用urllib.request.urlopen(“https://twitter.com/vonkraush)作为网址:
data=url.read().decode()
打印(json.loads(数据))
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
加载(数据)
文件“C:\Users\Josh\Anaconda3\lib\json\\uuuuu init\uuuuu.py”,第354行,加载
返回\u默认\u解码器。解码
文件“C:\Users\Josh\Anaconda3\lib\json\decoder.py”,第339行,在decode中
obj,end=self.raw\u decode(s,idx=\u w(s,0.end())
文件“C:\Users\Josh\Anaconda3\lib\json\decoder.py”,第357行,原始解码
从None引发JSONDecodeError(“预期值”,s,err.value)
JSONDecodeError:应为值

我已经尝试过将
'utf-8'
明确地传递到解码和其他一些方法中,但到目前为止,没有任何方法允许我绕过这个错误。我做错了什么?我怎样才能纠正它?

你做错了。此URL将始终返回一个HTML页面。要从
Twitter
获取
user
数据,请使用
Twitter开发API

请看这里,可能会帮助您从Twitter中提取信息。但要做到这一点,你必须验证自己是Twitter
用户。确保首先创建Twitter应用程序并获取OAuth密钥。这将是您访问Twitter API的途径


TwitterAPI使用基于令牌的身份验证。作为API调用的响应,您将收到的令牌将是您作为
用户的身份

数据
是HTML文档,而不是JSON对象。您无法将其传递给
json.loads()
。奇怪的是,我看到其他人在stack exchange上建议使用完全相同的代码块:那么我应该怎么做?如果该页面中有任何json,您必须从页面中提取它,然后调用
json.loads()
。明白了,你会建议如何提取它呢?Twitter API只允许我提取3000多条推文,我正在玩弄直接网络抓取,看看是否可以提取用户的所有推文。这可能会解决你的问题。我主要是这样做,以便更好地处理使用scrapy进行网络抓取的工作方式,通过实践学习,而不是需要拉一堆推特。他们也使用selenium而不是scrapy。他们使用selenium来获取推文,通过CSS选择器(即
li.js流项目
)自动化浏览器从推文中获取数据。它只会在两个日期之间收到推特。如果你试图刮取推特网站,你就违反了推特的服务条款和开发者协议。您的IP地址可能被Twitter阻止。