【问题标题】:Python 3: Trying to get JSON code from requestPython 3:尝试从请求中获取 JSON 代码
【发布时间】:2018-02-18 23:46:54
【问题描述】:

我正在尝试从关注 Twitter 的 urllib.request 对象中提取 JSON 代码。我这样做是出于好奇,也因为我试图确定使用 Scrappy 请求什么,以便编写绕过 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

我已经尝试将'utf-8' 明确传递到解码和其他一些方法中,但到目前为止还没有任何东西可以让我绕过这个错误。我做错了什么,我该如何解决?

【问题讨论】:

  • data 是 HTML 文档,而不是 JSON 对象。您不能将其传递给json.loads()。
  • 奇怪,我看到其他人在堆栈交换中提出了完全相同的代码块:stackoverflow.com/questions/12965203/… 那我应该怎么做呢?
  • 如果该页面中有任何JSON,您必须从页面中提取它,然后调用json.loads()。
  • 知道了,那你建议如何提取它?

标签: python json twitter request


【解决方案1】:

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

请参阅此处,Twitter Dev API 可能会帮助您从 Twitter 中提取信息。但为此,您必须将自己的身份验证为 Twitter user。确保您首先创建一个 Twitter 应用程序并获取您的 OAuth 密钥。这将是您对 Twitter API 的访问权限。

Twitter API 使用基于令牌的身份验证。您将从 API 调用中收到的作为响应的令牌将是您作为 user 的身份。

【讨论】:

  • Twitter API 只能让我提取超过 3000 条推文,我正在玩弄直接网络抓取,看看我是否可以提取用户的所有推文。
  • 这个Twitter Scraper,可能会解决你的问题。
  • 我大部分时间都在这样做,所以我可以更好地了解使用 scrapy 进行网络抓取的工作原理,边做边学,而不是需要拉一堆推文。他们还使用 selenium 而不是 scrapy。
  • 他们正在使用 selenium 通过使用 CSS 选择器(即 li.js-stream-item)自动浏览器从 Twitter 获取数据来获取推文。它只会在两个日期之间获得推文。
  • 如果您试图抓取 Twitter 网站,则您违反了 Twitter 的服务条款和开发者协议。你的 IP 地址可能会被 Twitter 屏蔽。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-02
  • 1970-01-01
相关资源
最近更新 更多