2014-09-17 5 views
0

저는 파이썬 프로그램의 초보자입니다. Google 트렌드로 인기 주제를 얻고 싶습니다. 나는 현재 구글 동향입니다 코드Python의 Curl 요청

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 

그러나 예상 반환하지 않습니다 값, 다음 파이썬

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

나는 노력을 어떻게해야합니까. 도움이 될 것입니다. 감사합니다. .

답변

4

curl 명령 줄에서 data 요소를 잘못 해석하고 있습니다. 즉 은 키로 다시 포장하고 다시 인코딩하는 동안 POST 본문으로 인코딩되었습니다.

어느 단지 값을 사용하여 (다시 인코딩되지 않음) 또는 사전에 각각의 요소를 넣고 그를 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'] 
0

가장 쉬운 라이브러리는 requests입니다. 파이썬. 다음은 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