对于显示文件树的网址,例如Pypi packages,
是否有一个小的实体模块来遍历URL树并将其列为ls -lR
?
我收集(纠正我),没有文件属性的标准编码,
链接类型,大小,日期...在html <A
属性中
因此,在移动的沙子上构建一个可靠的URL树模块是很困难的
但肯定是这个轮子(Unix file tree -> html -> treewalk API -> ls -lR or find
)
已完成?
(似乎有几个蜘蛛/网络爬虫/刮刀,但到目前为止它们看起来很丑陋,尽管还有BeautifulSoup用于解析)。
答案 0 :(得分: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)
答案 1 :(得分:1)
其他人推荐使用BeautifulSoup,但使用lxml要好得多。尽管它的名字,它也用于解析和抓取HTML。它比BeautifulSoup快得多。如果您不想学习lxml API,它还有BeautifulSoup的兼容性API。
没有理由再使用BeautifulSoup了,除非您使用的是Google App Engine或其他不允许使用Python的东西。
它也有CSS选择器,所以这种事情是微不足道的。
答案 2 :(得分:0)
事实证明,像这样的BeautifulSoup单行可以转向&lt; table&gt;行到Python -
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 )
与上面的sysrqb的单行正则表达式相比,这更长; 谁说
“你可以解析一些所有的html 时间,或者所有的html 时间,但不是......“