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. DOMツリーウォーカーをエクササイズする[JS]
- 2. PythonのURLレコーダー
- 3. PythonのURLリクエスト
- 4. PythonでBlob URLからファイルをダウンロード
- 5. URLからPythonで.csvファイルを取得
- 6. PythonでurlからJavascriptコードを取得
- 7. pythonのregexでURLを解析する
- 8. Pythonのurllib2のURL
- 9. PythonでデータベースURLに接続します.jdbcのURLは
- 10. PythonのURLをトリガーする
- 11. PythonのキャプチャURLエラーコード
- 12. Python URLの比較
- 13. ダウンロードリクエストでPythonでファイルをダウンロードするurl
- 14. ブラウザにURLをPythonからロードする
- 15. どのようにPythonでテキストファイルからURLを抽出するのですか?
- 16. フラスコでJSONを返すpython別のURLからブラウザにフェッチしたpython?
- 17. Python 2.6のURLからwmvをダウンロード
- 18. Python urlparse.parse_qs unicode url
- 19. PythonアンエスケープURL
- 20. python URLパースタイプ
- 21. は、Python URL
- 22. pythonでリソースURLから完全なURLを取得する方法
- 23. 次のページのURLをPythonで取得
- 24. Python URLコーポレートプロキシの下でのリクエスト
- 25. HTML内部のPythonでのURL再マップライブラリ
- 26. Python ZeepでサービスURLを変更する
- 27. Python 3でURLエンコードする方法は?
- 28. Python(2.7)パーサーコードでURLを準備する
- 29. PythonでURLを確認する
- 30. (フラスコ)のpython - のmysql - URL
sysrqbさん、ありがとうございました。誰がこれをどこで学んだでしょうか? また、サーバー上で$(unzip -l remote.zip)を実行し、ローカルファイルにパイプして大きなリモートファイルを一覧表示する方法はありますか? – denis
実際、このことを読んだ人のために[この正規の答えはXML/HTMLを正規表現で解析する](http://stackoverflow.com/q/1732454)を覚えておいてください。また、数百人もの人々。この特定の状況では、apacheディレクトリのリスト形式は変わることはありませんが、ソフトウェアでは(特にUIに関係する)「何を意味すべきでない」べきかを知っています... –
実際のパーサはより弾力的な解決策ですリスト形式への変更は、単純なパターンマッチングや適切な文法に基づいていても、スクレイパーを壊す傾向があります。 – rmmh