Pypi packagesのようなファイルツリーを表示するURLの場合は、URLツリーを表示してls -lR
のようにリストする小さなソリッドモジュールがありますか? ですか?
は私が集まる(私を修正)ので、シフト砂の上に固体URLtreeモジュールを構築
属性<A
HTMLで...ファイル属性、 リンクの種類、サイズ、日付の標準的なエンコーディングがないという厳しいです。
確かにこのホイール(Unix file tree -> html -> treewalk API -> ls -lR or find
) が完成しましたか?
(そこにはいくつかのスパイダー/ウェブクローラー/スクレーパーがあるようですが、これは解析のためにBeautifulSoupにもかかわらず、これまでのところ醜いものに見えます)。PythonのURLツリーウォーカーですか?
3
A
答えて
3
Apacheサーバーは非常に一般的で、比較的標準的な方法でファイルディレクトリを一覧表示します。
ここでは、あなたが望むことを実行するのに十分な簡単なスクリプトがあります。あなたが望むようにすることができるはずです。
使用法:pythonのlist_apache_dir.py
import sys
import urllib
import re
parse_re = re.compile('href="([^"]*)".*(..-...-.... ..:..).*?(\d+[^\s<]*|-)')
# look for a link + a timestamp + a size ('-' for dir)
def list_apache_dir(url):
try:
html = urllib.urlopen(url).read()
except IOError, e:
print 'error fetching %s: %s' % (url, e)
return
if not url.endswith('/'):
url += '/'
files = parse_re.findall(html)
dirs = []
print url + ' :'
print '%4d file' % len(files) + 's' * (len(files) != 1)
for name, date, size in files:
if size.strip() == '-':
size = 'dir'
if name.endswith('/'):
dirs += [name]
print '%5s %s %s' % (size, date, name)
for dir in dirs:
print
list_apache_dir(url + dir)
for url in sys.argv[1:]:
print
list_apache_dir(url)
0
は、これらのようなBeautifulSoupワンライナーは、Pythonに<表>行を回すことができることが判明 - sysrqbの1行の正規表現と比較すると
from BeautifulSoup import BeautifulSoup
def trow_cols(trow):
""" soup.table("tr") -> <td> strings like
[None, u'Name', u'Last modified', u'Size', u'Description']
"""
return [td.next.string for td in trow("td")]
def trow_headers(trow):
""" soup.table("tr") -> <th> table header strings like
[None, u'Achoo-1.0-py2.5.egg', u'11-Aug-2008 07:40 ', u'8.9K']
"""
return [th.next.string for th in trow("th")]
if __name__ == "__main__":
...
soup = BeautifulSoup(html)
if soup.table:
trows = soup.table("tr")
print "headers:", trow_headers(trows[0])
for row in trows[1:]:
print trow_cols(row)
上記、これは...長いです。
「あなたは、HTMLの一部 のすべての時間、またはHTMLのすべて のいくつかの時間を解析することはできませんが、...」
1
その他BeautifulSoupを推奨していると述べた しかし、lxmlを使用するほうがはるかに優れています。その名前にもかかわらず、HTMLの解析とスクラップ用です。それは、BeautifulSoupよりはるかに高速です。 lxml APIを習得したくない場合は、BeautifulSoup用の互換APIもあります。
Google App Engineや純粋にPython以外のものがない限り、BeautifulSoupを使用する理由はありません。
CSSセレクタもありますので、この種のことは簡単です。
関連する問題
- 1. PythonのURLレコーダー
- 2. pythonのregexでURLを解析する
- 3. PythonでデータベースURLに接続します.jdbcのURLは
- 4. Python urlparse.parse_qs unicode url
- 5. PythonアンエスケープURL
- 6. フラスコでJSONを返すpython別のURLからブラウザにフェッチしたpython?
- 7. Python 2.6のURLからwmvをダウンロード
- 8. HTML内部のPythonでのURL再マップライブラリ
- 9. PythonのURLタイトルの問題
- 10. pythonでリソースURLから完全なURLを取得する方法
- 11. 非同期のURLオープナー(Python)
- 12. 開梱PythonのURLリクエスト
- 13. Python URLリダイレクトの問題
- 14. PythonとBeautifulSoup URLの解析
- 15. Gunzipping URLの内容 - Python
- 16. pythonでurllibでURLを開く3
- 17. bash/pythonでveehd urlを取得しますか?
- 18. URLのパラメータを管理する(Python Flask)
- 19. URLをPythonのリストに分割する
- 20. URL経由でpython-scriptを実行
- 21. PythonでノンブロッキングURLフェッチを行う方法
- 22. 変数からのURLパスパラメータへの入力を渡す - Python
- 23. Python GTKドラッグアンドドロップ - URLを取得
- 24. Python、Caliber、Open exe from URL Link
- 25. os.pathはPythonのWeb URLに相当しますか?
- 26. PythonのURLからutm_ *パラメータを削除します
- 27. pythonのwindows-1251へのURLデコード方法
- 28. URLにオブジェクトIDを渡すDjango Python
- 29. URLはPythonで値以外のペアをエンコードします
- 30. 複数のURLをPython/BeautifulSoupで繰り返す
sysrqbさん、ありがとうございました。誰がこれをどこで学んだでしょうか? また、サーバー上で$(unzip -l remote.zip)を実行し、ローカルファイルにパイプして大きなリモートファイルを一覧表示する方法はありますか? – denis
実際、このことを読んだ人のために[この正規の答えはXML/HTMLを正規表現で解析する](http://stackoverflow.com/q/1732454)を覚えておいてください。また、数百人もの人々。この特定の状況では、apacheディレクトリのリスト形式は変わることはありませんが、ソフトウェアでは(特にUIに関係する)「何を意味すべきでない」べきかを知っています... –
実際のパーサはより弾力的な解決策ですリスト形式への変更は、単純なパターンマッチングや適切な文法に基づいていても、スクレイパーを壊す傾向があります。 – rmmh