使用python提交到Web表单

Ser*_*ial 25 python post urllib urllib2 request

我见过很多次这样的问题,但没有一个是有帮助的

我试图将数据提交到网上的表格我已经尝试过请求,并且urllib和没有工作

例如,这里是应该在SO上搜索[python]标签的代码:

import urllib
import urllib2

url = 'http://stackoverflow.com/'

# Prepare the data
values = {'q' : '[python]'}
data = urllib.urlencode(values)

# Send HTTP POST request
req = urllib2.Request(url, data)
response = urllib2.urlopen(req)

html = response.read()

# Print the result
print html
Run Code Online (Sandbox Code Playgroud)

但当我运行它时,我得到主页的html源

这是一个使用请求的示例:

import requests

data= {
    'q': '[python]'
    }
r = requests.get('http://stackoverflow.com', data=data)

print r.text
Run Code Online (Sandbox Code Playgroud)

同样的结果!我不明白为什么这些方法不起作用我已经在各种网站上尝试过但没有成功,所以如果有人成功完成了这个请告诉我如何!

非常感谢!

Joh*_*web 34

如果要q使用URL作为参数传递requests,请使用params参数,而不是data(请参阅在URL中传递参数):

r = requests.get('http://stackoverflow.com', params=data)
Run Code Online (Sandbox Code Playgroud)

这将请求https://stackoverflow.com/?q=%5Bpython%5D,这不是您要找的.

你真的想要POST一个表格.试试这个:

r = requests.post('https://stackoverflow.com/search', data=data)
Run Code Online (Sandbox Code Playgroud)

这与GET-tttp : //stackoverflow.com/questions/tagged/python 基本相同,但我想你会从中得到这个想法.

  • 哇,实际上工作,我尝试了很多我不知道为什么我不能得到它谢谢! (2认同)

小智 11

import urllib
import urllib2

url = 'http://www.someserver.com/cgi-bin/register.cgi'
values = {'name' : 'Michael Foord',
      'location' : 'Northampton',
      'language' : 'Python' }

data = urllib.urlencode(values)
req = urllib2.Request(url, data)
response = urllib2.urlopen(req) 
the_page = response.read()
Run Code Online (Sandbox Code Playgroud)

这将使用值中指定的数据发出POST请求.我们需要urllib来编码url然后urllib2来发送请求.