URL дерево ходок в Python? - PullRequest
       28

URL дерево ходок в Python?

3 голосов
/ 26 марта 2009

Для URL, которые показывают деревья файлов, такие как пакеты Pypi , Есть ли небольшой сплошной модуль для обхода дерева URL и перечисления его как ls -lR?
Я понимаю (поправьте меня), что нет стандартного кодирования атрибутов файла, типы ссылок, размер, дата ... в html <A атрибутах
поэтому создать твердотельный модуль URLtree на движущихся песках сложно.
Но наверняка это колесо (Unix file tree -> html -> treewalk API -> ls -lR or find) было сделано?
(Кажется, есть несколько пауков / веб-сканеров / скребков, но они пока выглядят уродливыми и специальными, несмотря на BeautifulSoup для разбора).

Ответы [ 3 ]

3 голосов
/ 26 марта 2009

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) 
1 голос
/ 03 августа 2009

Другие рекомендовали BeautifulSoup, но гораздо лучше использовать lxml . Несмотря на название, он также предназначен для анализа и очистки HTML. Это намного, намного быстрее, чем BeautifulSoup. Он также имеет API совместимости для BeautifulSoup, если вы не хотите изучать lxml API.

Ян Бликинг соглашается .

Больше нет причин использовать BeautifulSoup, если только вы не работаете в Google App Engine или где-то, где не чисто Python не разрешен.

У него также есть CSS-селекторы, так что подобные вещи тривиальны.

0 голосов
/ 03 апреля 2009

Оказывается, что такие однострочники BeautifulSoup могут превратить

...