使用Python的urllib2向网页发送请求

0 python urllib2

我有兴趣使用Python来自动执行某些任务.具体来说,我想使用Python与网站进行交互,以执行诸如从页面获取特定信息,发出请求(POST数据和阅读响应)以及下载和上载文件等任务.到目前为止,我只能使用Python从使用urllib2的页面获取HTML.我尝试的下一件事是向页面发送请求; 我做了几次尝试,但都失败了.

    >>> import urllib2
    >>> import urllib
    >>> url = "http://www.stackoverflow.com/"
    >>> values = {}
    >>> values["input"] = "foo"
    >>> data = urllib.urlencode(values)
    >>> request = urllib2.Request(url + "search/", data)
    >>> response = urllib2.urlopen(request)
    >>> html = response.read()
    >>> print html
Run Code Online (Sandbox Code Playgroud)

到目前为止我理解的方式是我需要创建一个包含字段和输入名称的字典,并使用urllib.urllencode(values)对其进行编码.然后我需要用urllib2.Request(theUrlReceivingTheRequest,data,headers)发出请求,如果只给出一个url只会GET,但是,如果给定数据,将POST,并且可以给出可以伪装程序的头文件常见的浏览器,如Firefox或IE.然后我用urllib2.urlopen(request)得到一个响应,它返回一个像object这样的文件,因此我可以读取().据我所知,我也可以使用urllib2.build_opener(),它可以接收处理程序(可以处理cookie,redirrections,身份验证等)并使用.addheaders("User-Agent","")添加标题.我希望能够最终做到(并理解)所有这些事情,但是,首先,我只想提交一份表格.在我与Python交互式会话的上述代码中,我是否遵循了正确的程序?(我试图在stackoverflow的首页上的搜索字段中输入"foo"搜索.)

mar*_*ges 6

如果您使用请求而不是urllib2,您的生活会更容易.以下是使用请求API的示例:

import requests
r=requests.post("http://www.stackoverflow.com/search/",data={'input':'foo'})
print r.text
Run Code Online (Sandbox Code Playgroud)