【问题标题】:sending json requests in Python在 Python 中发送 json 请求
【发布时间】:2016-11-17 07:40:27
【问题描述】:

我正在尝试发送一些 json 请求来抓取像 link 这样的无限滚动框。它的json链接是:

http://www.marketwatch.com/news/headline/getheadlines?ticker=XOM&countryCode=US&dateTime=12%3A00+a.m.+Nov.+8%2C+2016&docId=&docType=2007&sequence=6e09aca3-7207-446e-bb8a-db1a4ea6545c&messageNumber=1826&count=10&channelName=%2Fnews%2Fpressrelease%2Fcompany%2Fus%2Fxom&topic=&_=1479366266513

有些参数不是必需的,我创建了一个有效参数字典。例如,参数 Count 是每次滚动显示的项目数。我的代码是:

import json
import requests

parameters = {'countryCode':'US','dateTime':'', 'docId':'','sequence':'6e09aca3-7207-446e-bb8a-db1a4ea6545c', 
         'messageNumber':'1826','count':'10','channelName':'', 'topic':'_:1479366266513' }
data = json.dumps(parameters)
firstUrl = "http://www.marketwatch.com/investing/stock/xom"
html = requests.post(firstUrl, params = data).text 

我的问题是我无法根据参数发送请求,当我删除所有参数时,我得到相同的页面(firstUrl 链接),就好像我包含了所有参数一样。您知道为什么会发生这种情况以及如何解决这个问题吗?

【问题讨论】:

  • 我猜,您想要废弃的内容无法通过单个请求接收(即使您指定count:1000),因为每次您再次滚动时,您的浏览器都会发送新的XHR 请求另一个(10 个条目)数据。
  • 谢谢安德森,我的问题是即使没有定义任何参数,我也会得到相同的结果,即主页而不是我感兴趣的容器(有 3 个不同的无限滚动框和我对其中一个感兴趣),我正在提供该特定元素的参数,但它无法检测到它。

标签: python-2.7 web-scraping python-requests getjson infinite-scroll


【解决方案1】:

我认为您使用的firstUrl 不正确。此外,您应该使用 requests.get 而不是 post。您应该发送与链接中相同的参数。

import json
import requests

parameters = {'ticker':'XOM', 'countryCode':'US','dateTime':'', 'docId':'','sequence':'6e09aca3-7207-446e-bb8a-db1a4ea6545c', 
         'messageNumber':'1826','count':'10','channelName':'', 'topic':'_:1479366266513' }
firstUrl = "http://www.marketwatch.com/news/headline/getheadlines"
html = requests.get(firstUrl, params = parameters)
print(json.loads(html.text)) # array of size 10

【讨论】:

  • @vtni :非常感谢,效果很好,非常感谢您的帮助。
【解决方案2】:

params 需要一个 Python 字典,而不是字符串,所以你应该直接传递 parameters

parameters = {'countryCode':'US','dateTime':'', 'docId':'','sequence':'6e09aca3-7207-446e-bb8a-db1a4ea6545c', 
         'messageNumber':'1826','count':'10','channelName':'', 'topic':'_:1479366266513' }

html = requests.post(firstUrl, parameters).text

另外,请确保您实际上应该使用post 而不是get

【讨论】:

  • @DeepSapce,非常感谢,我直接插入了参数,但并没有改变结果。当我将计数从 10 更改为 100 时,我希望得到 100 个项目,但它仍然是一样的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-31
  • 2018-02-16
  • 2018-02-07
  • 1970-01-01
  • 2014-08-29
  • 2017-04-02
  • 1970-01-01
相关资源
最近更新 更多