【发布时间】:2012-05-07 17:35:47
【问题描述】:
我对使用 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) 的响应,它返回一个类似对象的文件,因此我可以读取()。据我了解,我还可以使用 urllib2.build_opener(),它可以接收处理程序(可以处理 cookie、重定向、身份验证等)并使用 .addheaders("User-Agent", "") 添加标头。我希望最终能够完成(并理解)所有这些事情,但是,首先,我只想提交一个表单。 在我与 Python 交互会话的上述代码中,我是否遵循了正确的程序? (我试图在stackoverflow首页的搜索字段中输入搜索“foo”。)
【问题讨论】:
-
什么特别不适合你?你有错误吗?