【问题标题】:urllib2.urlopen not getting all contenturllib2.urlopen 没有获取所有内容
【发布时间】:2013-06-06 14:08:06
【问题描述】:

我是 python 的初学者,从 reddit.com 提取一些数据 更准确地说,我正在尝试向 http:www.reddit.com/r/nba/.json 发送请求以获取页面的 JSON 内容,然后解析它以获取有关特定球队或球员的条目。

为了自动收集数据,我请求这样的页面:

import urllib2
FH = urllib2.urlopen("http://www.reddit.com/r/nba/.json")
rnba = FH.readlines()
rnba = str(rnba[0]) 
FH.close()

我也在脚本副本上提取这样的内容,以确保:

FH = requests.get("http://www.reddit.com/r/nba/.json",timeout=10)

rnba_json = FH.json()   
FH.close()

但是,我没有获得手动转到时显示的完整数据 http://www.reddit.com/r/nba/.json 使用任何一种方法,特别是当我打电话时

print len(rnba_json['data']['children']) # prints 20-something child stories

但是当我这样做时,像这样加载复制粘贴的 JSON 字符串:

import json
import urllib2
fh = r"""{"kind": "Listing", "data": {"modhash": ..."""# long JSON string 
r_nba = json.loads(fh)      #loads the json string from the site into json object
print len(r_nba['data']['children'])        #prints upwards of 100 stories

我得到了更多的故事链接。我知道 timeout 参数,但提供它并没有解决任何问题。

当我在浏览器中拉动页面时,我做错了什么或者我该怎么做才能获得所有呈现的内容?

【问题讨论】:

  • 我两种方法都做了,len(j['data']['children]) 得到了相同的结果:25 个故事
  • “两种”方式是指 Python 请求还是访问网站并复制粘贴?如果是这样,你的代码和我的不同吗?
  • 确实,我什至使用了 wget 并得到了相同的结果。我的代码来自解释器:x=urllib2.urlopen(dir).read();j=json.loads(x);len(j['data']['children']) >> 25
  • 你确定rnba = str(rnba[0]) ?编辑:刚刚测试过,它确实返回了一行
  • 好吧,我不知道该说什么,首页肯定有超过25个故事链接,我复制粘贴时大约有100个(就像普通的www.reddit.com/ r/nba 你能从首页获取所有这 100 个故事吗?

标签: python urllib2 python-requests


【解决方案1】:

要获得允许的最大值,您可以使用如下 API:http://www.reddit.com/r/nba/.json?limit=100

【讨论】:

  • 当您将其加载到 json 对象并获取 len(rnba_json['data']['children]) 时,它仍然给出 25。我认为问题在于 reddit api 限制了非浏览器请求默认为 25,但我不知道如何获得全部 100。link 并找到了这个:GET /subreddits/mine/where[.json | .xml ] 限制所需的最大项目数(默认:25,最大:100)如何使用它来获得全部 100?
  • 谢谢!是的,做到了!我应该做些什么来标记这个“已回答”或其他任何符合网站礼仪的事情​​吗?再次感谢!
  • 我将编辑我的答案以反映您的需求。你点击答案旁边的复选标记来标记它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-22
  • 2019-07-25
  • 2011-09-02
  • 2010-09-17
相关资源
最近更新 更多