Python を使用して特定のタスクを自動化することに興味があります。具体的には、Python を使用して Web サイトと対話し、ページから特定の情報を取得する、要求を行う (POST データと応答を読み取る)、ファイルのダウンロードとアップロードなどのタスクを実行したいと考えています。これまでのところ、urllib2 を使用してページから HTML を取得するために Python を使用することしかできませんでした。次に試したのは、ページにリクエストを送信することでした。何度か試みましたが、すべて失敗しました。
>>> 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(theUrlRecomingTheRequest, data, headers) を使用してリクエストを作成する必要があります。これは、URL が指定されている場合は GET のみですが、データが指定されている場合は POST し、プログラムを偽装できるヘッダーを指定できます。 Firefox や IE などの一般的なブラウザ。次に、オブジェクトのようなファイルを返す urllib2.urlopen(request) で応答を取得し、その結果、read() を実行できます。私が理解しているように、ハンドラー (Cookie、リダイレクト、認証などを処理できる) を受け取り、.addheaders("User-Agent", "") を使用してヘッダーを追加できる urllib2.build_opener() を使用することもできます。最終的にはこれらすべてを実行できるようになりたい (そして理解できるようになりたい) のですが、まず、フォームを送信してもらいたいだけです。Python との対話型セッションからの上記のコードで、正しい手順に従ったでしょうか? (スタックオーバーフローのフロントページの検索フィールドに「foo」の検索を入力しようとしていました。)