1

target="_blank"Python スクリプトを実行して HTML ファイルを解析し、属性を持つすべてのリンクのリストを収集したいと考えています。

次のことを試しましたが、bs4から何も得られません。SoupStrainer は、ドキュメントで、findAll などと同じ方法で引数を取ると述べていますが、これは機能するはずですか? ばかげたエラーがありませんか?

import os
import sys

from bs4 import BeautifulSoup, SoupStrainer
from unipath import Path

def main():

    ROOT = Path(os.path.realpath(__file__)).ancestor(3)
    src = ROOT.child("src")
    templatedir = src.child("templates")

    for (dirpath, dirs, files) in os.walk(templatedir):
        for path in (Path(dirpath, f) for f in files):
            if path.endswith(".html"):
                for link in BeautifulSoup(path, parse_only=SoupStrainer(target="_blank")):
                    print link

if __name__ == "__main__":
    sys.exit(main())
4

2 に答える 2

2

使用法BeautifulSoupは問題ありませんが、html ファイルのパスだけでなく、html 文字列を渡す必要があります。BeautifulSoupファイルパスではなく、html 文字列を引数として受け入れます。それを開いてコンテンツを自動的に読み取ることはありません。あなたはそれを自分でやるべきです。を渡すとa.html、スープは になります<html><body><p>a.html</p></body></html>。これはファイルの内容ではありません。確かにリンクはありません。を使用する必要がありますBeautifulSoup(open(path).read(), ...)

edit:
ファイル記述子も受け入れます。BeautifulSoup(open(path), ...)で十分です。

于 2013-07-10T15:11:33.543 に答える