17

IP アドレスしか持っていない場合、ファイルとフォルダーを一覧表示するにはどうすればよいですか?

urllib などでは、ファイルの内容しか表示できませんindex.html。しかし、ルートにあるファイルも確認したい場合はどうすればよいでしょうか?

必要に応じてユーザー名とパスワードを実装する方法を示す例を探しています。(ほとんどの場合、index.html は公開されていますが、他のファイルは公開されていない場合もあります)。

4

5 に答える 5

37

requestsページのコンテンツを取得BeautifulSoupし、結果を解析するために使用します。
たとえば、次の場所にあるすべてのisoファイルを検索するとしhttp://cdimage.debian.org/debian-cd/8.2.0-live/i386/iso-hybrid/ます。

from bs4 import BeautifulSoup
import requests

url = 'http://cdimage.debian.org/debian-cd/8.2.0-live/i386/iso-hybrid/'
ext = 'iso'

def listFD(url, ext=''):
    page = requests.get(url).text
    print page
    soup = BeautifulSoup(page, 'html.parser')
    return [url + '/' + node.get('href') for node in soup.find_all('a') if node.get('href').endswith(ext)]

for file in listFD(url, ext):
    print file
于 2016-01-11T10:12:07.537 に答える
13

別の回答が言うように、HTTP 経由で直接ディレクトリ リストを取得することはできません。何を提供するかを「決定」するのは HTTP サーバーです。「ディレクトリ」内のすべてのファイルへのリンクを表示する HTML ページを表示するものもあれば、何らかのページ (index.html) を表示するものもあれば、「ディレクトリ」を 1 つとして解釈しないものもあります。

たとえば、「http://localhost/user-login/」へのリンクがあるとします。これは、サーバーのドキュメント ルートに user-login というディレクトリがあることを意味するものではありません。サーバーはそれを何らかのページへの「リンク」として解釈します。

さて、あなたが望むものを達成するには、HTTP以外のものを使用するか(アクセスしたい「IPアドレス」上のFTPサーバーが仕事をします)、そのマシンにそれぞれを提供するHTTPサーバーをセットアップする必要がありますパス (http://192.168.2.100/directory) 内のファイルのリスト (任意の形式) を Python で解析します。

サーバーが「/bla/bla のインデックス」の種類のページ (Apache サーバーが行うディレクトリ リストなど) を提供する場合、HTML 出力を解析して、ファイルとディレクトリの名前を見つけることができます。そうでない場合 (たとえば、カスタム index.html、またはサーバーが提供することを決定したもの)、運が悪い:(、それを行うことはできません。

于 2012-06-13T22:16:26.707 に答える
4

HTTPは「ファイル」と「ディレクトリ」では機能しません。別のプロトコルを選択してください。

于 2012-06-13T21:29:36.100 に答える
3

次のスクリプトを使用して、HTTP サーバーのサブディレクトリとディレクトリ内のすべてのファイルの名前を取得できます。ファイルライターを使用してダウンロードできます。

from urllib.request import Request, urlopen, urlretrieve
from bs4 import BeautifulSoup
def read_url(url):
    url = url.replace(" ","%20")
    req = Request(url)
    a = urlopen(req).read()
    soup = BeautifulSoup(a, 'html.parser')
    x = (soup.find_all('a'))
    for i in x:
        file_name = i.extract().get_text()
        url_new = url + file_name
        url_new = url_new.replace(" ","%20")
        if(file_name[-1]=='/' and file_name[0]!='.'):
            read_url(url_new)
        print(url_new)

read_url("www.example.com")
于 2016-11-17T17:34:06.443 に答える