Python中的URL树行者?
对于显示文件树的URL,例如, 是否有一个小的实体模块来遍历URL树并像Python中的URL树行者?,python,tree,beautifulsoup,directory-walk,Python,Tree,Beautifulsoup,Directory Walk,对于显示文件树的URL,例如, 是否有一个小的实体模块来遍历URL树并像ls-lR那样列出它? 我推断(纠正我)没有标准的文件属性编码, 链接类型、大小、日期。。。在htmlhtml->treewalkapi->ls-lR或find中 已经完成了吗? (那里似乎有几个爬行器/网络爬虫器/刮板器,但到目前为止,它们看起来很难看,而且很特别,尽管在解析方面很漂亮)。Apache服务器非常常见,并且它们有一种相对标准的列示文件目录的方法 这里有一个足够简单的脚本,可以做你想做的事情,你应该能够让它做你
ls-lR
那样列出它?我推断(纠正我)没有标准的文件属性编码, 链接类型、大小、日期。。。在html
html->treewalkapi->ls-lR或find中
已经完成了吗?
(那里似乎有几个爬行器/网络爬虫器/刮板器,但到目前为止,它们看起来很难看,而且很特别,尽管在解析方面很漂亮)。Apache服务器非常常见,并且它们有一种相对标准的列示文件目录的方法
这里有一个足够简单的脚本,可以做你想做的事情,你应该能够让它做你想做的事情
用法:pythonlist\u apache\u 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)
导入系统
导入URL库
进口稀土
parse_re=re.compile('href=“([^”]*)”*(…-…-…:)*?(\d+[^\s结果表明,像这样的漂亮的单行程序可以将行转换为Python--
从美化组导入美化组
def trow_cols(trow):
“”“soup.table”(“tr”)->字符串类似
[无,u'Name',u'Last modified',u'Size',u'Description']
"""
返回[td.next.string for td in trow(“td”)]
def trow_收割台(trow):
“”“soup.table(“tr”)->表头字符串,如
[无,u'Achoo-1.0-py2.5.egg',u'11-Aug-2008 07:40',u'8.9K']
"""
返回[th.next.string for th in trow(“th”)]
如果名称=“\uuuuu main\uuuuuuuu”:
...
soup=BeautifulSoup(html)
如果是soup.table:
trows=汤表(“tr”)
打印“标题:”,trow_标题(trows[0])
对于trows[1:]中的行:
打印trow_cols(行)
与上面sysrqb的一行regexp相比,这是…更长;
谁说的
“您可以解析所有html文件中的一些内容
时间,还是全部html的一些
时间,但不是……”
其他人建议使用BeautifulSoup,但它更好用。尽管它的名字叫BeautifulSoup,但它也用于解析和抓取HTML。它比BeautifulSoup快得多。如果你不想学习lxml API,它也有一个与BeautifulSoup兼容的API
没有理由再使用BeautifulSoup了,除非你使用的是Google App Engine或者其他不允许使用Python的东西
它也有CSS选择器,所以这类事情很简单。谢谢sysrqb,很好。从哪里学来的?还有,有没有办法运行$(unzip-l remote.zip)在服务器上,通过管道连接到本地文件,以列出大型远程文件?请记住,对于事后阅读此文件的任何人来说都很好。还有几百个其他文件。在这种特殊情况下,apache目录列表格式不应该更改,但我们都知道“不应该”在软件中的含义(特别是与UI相关的)…没错,一个真正的解析器将是一个更具弹性的解决方案,但对列表格式的任何更改都会打破刮刀——无论是基于简单的模式匹配还是正确的语法。
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 )