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