13

ファイル名を取得する可能性はありますか

e.g. xyz.com/blafoo/showall.html

urllib または httplib を使用している場合は?

サーバー上のファイル名でファイルを保存できるようにするには?

のようなサイトに行くと

xyz.com/blafoo/ 

ファイル名が見えません。

ありがとうございました

4

4 に答える 4

28

応答httpヘッダーからファイル名を取得するには:

import cgi

response = urllib2.urlopen(URL)
_, params = cgi.parse_header(response.headers.get('Content-Disposition', ''))
filename = params['filename']

URLからファイル名を取得するには:

import posixpath
import urlparse 

path = urlparse.urlsplit(URL).path
filename = posixpath.basename(path)
于 2012-08-02T18:09:32.023 に答える
1

あなたが何を求めているのかあまり意味がありません。あなたが持っている唯一のものはURLです。URLから最後の部分を抽出するか、HTTP応答で次のようなものを確認できます。

content-disposition: attachment;filename="foo.bar"

このヘッダーは、ファイル名がfoo.barであることを示すためにサーバーによって設定できます。これは通常、ファイルのダウンロードなどに使用されます。

于 2012-08-02T18:09:25.957 に答える
0

私はグーグルであなたの質問を検索しました、そして私が信じる前にそれがstackoverflowで答えられたのを見ました。

この投稿を見てみてください:

Pythonでurllib2を使用する。ダウンロードしているファイルの名前を取得するにはどうすればよいですか?

ファイル名は通常、content-dispositionヘッダーを介してサーバーに含まれます。

content-disposition: attachment; filename=foo.pdf

を介してヘッダーにアクセスできます

result = urllib2.urlopen(...)
result.info() <- contains the headers


i>>> import urllib2
ur>>> result = urllib2.urlopen('http://zopyx.com')
>>> print result
<addinfourl at 4302289808 whose fp = <socket._fileobject object at 0x1006dd5d0>>
>>> result.info()
<httplib.HTTPMessage instance at 0x1006fbab8>
>>> result.info().headers
['Date: Mon, 04 Apr 2011 02:08:28 GMT\r\n', 'Server: Zope/(unreleased version, python 2.4.6, linux2) ZServer/1.1

Plone / 3.3.4 \ r \ n'、' Content-Length:15321 \ r \ n'、' Content-Type:text / html; charset = utf-8 \ r \ n'、'経由:1.1 www.zopyx.com \ r \ n'、' Cache-Control:max-age = 3600 \ r \ n'、'有効期限:2011年4月4日月曜日03:08:28 GMT \ r \ n'、'接続:閉じる\ r \ n']

見る

http://docs.python.org/library/urllib2.html

于 2012-08-02T18:09:53.867 に答える