0

私はpythonプログラムの初心者です。Google トレンドでトレンド トピックを取得したい。Pythonからこのcurlリクエストを作成するにはどうすればよいですか

curl --data "ajax=1&htd=20131111&pn=p1&htv=l" http://www.google.com/trends/hottrends/hotItems

次のコードを試しました

param = {"data" :"ajax=1&htd=20131111&pn=p1&htv=l"} 
value = urllib.urlencode(param)

req = urllib2.Request("https://www.google.co.in/trends/hottrends/hotItems", value)
response = urllib2.urlopen(req)
result = response.read()
print result

しかし、現在の Google の傾向である期待値を返していません。どんな助けでも大歓迎です。ありがとう。

4

2 に答える 2

4

コマンドラインのdata要素を誤解しています。curlこれは、別のキーでラップして再度エンコードしている間に、既にエンコードされた POST 本文です。data

値のみを使用する(再度エンコードしない) か、個々の要素を辞書に入れ、次のように urlencode します。

value = "ajax=1&htd=20131111&pn=p1&htv=l"
req = urllib2.Request("https://www.google.co.in/trends/hottrends/hotItems", value)

また

param = {'ajax': '1', 'htd': '20131111', 'pn': 'p1', 'htv': 'l'}
value = urllib.urlencode(param)
req = urllib2.Request("https://www.google.co.in/trends/hottrends/hotItems", value)

デモ:

>>> import json
>>> import urllib, urllib2
>>> value = "ajax=1&htd=20131111&pn=p1&htv=l"
>>> req = urllib2.Request("https://www.google.co.in/trends/hottrends/hotItems", value)
>>> response = urllib2.urlopen(req)
>>> json.load(response).keys()
[u'trendsByDateList', u'lastPage', u'summaryMessage', u'oldestVisibleDate', u'dataUpdateTime']
>>> param = {'ajax': '1', 'htd': '20131111', 'pn': 'p1', 'htv': 'l'}
>>> value = urllib.urlencode(param)
>>> value
'htv=l&ajax=1&htd=20131111&pn=p1'
>>> req = urllib2.Request("https://www.google.co.in/trends/hottrends/hotItems", value)
>>> response = urllib2.urlopen(req)
>>> json.load(response).keys()
[u'trendsByDateList', u'lastPage', u'summaryMessage', u'oldestVisibleDate', u'dataUpdateTime']
于 2014-09-17T15:52:58.410 に答える
0

requestsPython でライブラリを使用するのが最も簡単です。Python 2.7 を使用した例を次に示します。

import requests
import json

payload = {'ajax': 1, 'htd': '20131111', 'pn':'p1', 'htv':'l'}
req = requests.post('http://www.google.com/trends/hottrends/hotItems', data=payload)

print req.status_code # Prints out status code
print json.loads(req.text) # Prints out json data
于 2015-08-05T16:36:05.420 に答える