对于显示文件树的 URL,例如Pypi 包,是否有一个小的实体模块来遍历 URL 树并列出它ls -lR
?
我收集(纠正我)在 html<A
属性中没有文件属性、链接类型、大小、日期......的标准编码,
因此在流沙上构建一个可靠的 URLtree 模块很困难。
但是这个轮子( )肯定Unix file tree -> html -> treewalk API -> ls -lR or find
已经完成了吗?
(那里似乎有几个蜘蛛/网络爬虫/刮板,但到目前为止它们看起来很丑陋和临时,尽管使用 BeautifulSoup 进行解析)。
Denis
问问题
4626 次
3 回答
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)
于 2009-03-26T19:21:33.507 回答
1
其他人推荐 BeautifulSoup,但使用lxml更好。尽管它的名字,它也用于解析和抓取 HTML。它比 BeautifulSoup 快得多。如果您不想学习 lxml API,它也有适用于 BeautifulSoup 的兼容性 API。
没有理由再使用 BeautifulSoup,除非您使用的是 Google App Engine 或其他任何不纯 Python 的东西。
它也有 CSS 选择器,所以这种事情是微不足道的。
于 2009-08-03T15:37:12.480 回答
0
事实证明,像这样的 BeautifulSoup 单行程序可以将 <table> 行转换为 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,但不能……”
于 2009-04-03T08:49:42.220 回答