使用python提交到web表单

使用python提交到web表单,python,post,request,urllib2,urllib,Python,Post,Request,Urllib2,Urllib,像这样的问题我已经问过很多次了,但是没有一个是有用的 我正在尝试将数据提交到web上的表单。我尝试了一些请求,但urllib和none都没有成功 例如,下面的代码应该搜索SO上的[python]标记: import urllib import urllib2 url = 'http://stackoverflow.com/' # Prepare the data values = {'q' : '[python]'} data = urllib.urlencode(values) # Se

像这样的问题我已经问过很多次了,但是没有一个是有用的

我正在尝试将数据提交到web上的表单。我尝试了一些请求,但urllib和none都没有成功

例如,下面的代码应该搜索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
然而,当我运行它时,我得到了主页的html资源

以下是使用请求的示例:

import requests

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

print r.text
同样的结果!我不明白为什么这些方法不起作用,我在不同的网站上尝试过,但都没有成功,所以如果有人成功地做到了这一点,请告诉我怎么做


非常感谢

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

这将要求,这不是你正在寻找的

您确实想
发布到表单中。试试这个:

r = requests.post('https://stackoverflow.com/search', data=data)
这与
GET
-ting基本相同,但我想你会从中得到灵感

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()

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

python中的Mechanize库也很好,它甚至允许您提交表单。可以使用以下代码创建浏览器对象和创建请求

import mechanize,re
br = mechanize.Browser()
br.set_handle_robots(False)   # ignore robots
br.set_handle_refresh(False)  # can sometimes hang without this
br.addheaders = [('User-agent', 'Firefox')]             
br.open( "http://google.com" )
br.select_form( 'f' )
br.form[ 'q' ] = 'foo'
br.submit()
resp = None

for link in br.links():
    siteMatch = re.compile( 'www.foofighters.com' ).search( link.url )

    if siteMatch:
        resp = br.follow_link( link )
        break

content = resp.get_data()
print content

听起来像是一份工作!是的,我会检查一下,但我仍然想知道为什么这些不起作用!?Php似乎更简单、更直观哇,这确实有效我试了很多次,但我不知道为什么我不能得到它谢谢!为我工作。谢谢
import mechanize,re
br = mechanize.Browser()
br.set_handle_robots(False)   # ignore robots
br.set_handle_refresh(False)  # can sometimes hang without this
br.addheaders = [('User-agent', 'Firefox')]             
br.open( "http://google.com" )
br.select_form( 'f' )
br.form[ 'q' ] = 'foo'
br.submit()
resp = None

for link in br.links():
    siteMatch = re.compile( 'www.foofighters.com' ).search( link.url )

    if siteMatch:
        resp = br.follow_link( link )
        break

content = resp.get_data()
print content