3

Pypi パッケージなどのファイル ツリーを表示する URLの場合、URL ツリーをたどって次のように一覧表示する小さな堅牢なモジュールはありますls -lRか?
私は、ファイル属性、リンクの種類、サイズ、日付などの標準エンコーディングが html<A属性にないことを収集します (訂正します)

でも、きっとこのホイール(Unix file tree -> html -> treewalk API -> ls -lR or find)はできているのでは?
(いくつかのスパイダー/Web クローラー/スクレーパーが存在するようですが、解析用の BeautifulSoup にもかかわらず、これまでのところ見苦しくアドホックに見えます)。

4

3 に答える 3

1

他の人は BeautifulSoup を推奨していますが、lxmlを使用する方がはるかに優れています。その名前にもかかわらず、HTML の解析とスクレイピングにも使用されます。BeautifulSoup よりもはるかに高速です。lxml API を学習したくない場合は、BeautifulSoup 用の互換 API もあります。

Ian Blicking も同意見です。

Google App Engine を使用している場合や、純粋な Python 以外が許可されていない場合を除き、BeautifulSoup を使用する理由はもうありません。

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 の 1 行の正規表現と比較すると、これは ... 長いです。誰が言ったの

「HTMLの一部を常に解析することも、時々すべてのhtmlを解析することもできますが、そうではありません...」

于 2009-04-03T08:49:42.220 に答える