尝试使用BeautifulSoup从本地文件收集数据

时间:2013-07-10 15:01:45

标签: python beautifulsoup

我想运行一个python脚本来解析html文件并收集一个包含target="_blank"属性的所有链接的列表。

我尝试了以下但是没有从bs4获得任何东西。 SoupStrainer在文档中说它会以与findAll等相同的方式使用args,这应该有效吗?我错过了一些愚蠢的错误吗?

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())

2 个答案:

答案 0 :(得分:2)

使用BeautifulSoup没问题,但你应该传入html字符串,而不仅仅是html文件的路径。 BeautifulSoup接受html字符串作为参数,而不是文件路径。它不会打开它然后自动读取内容。你应该自己做。如果你传入a.html,汤将是<html><body><p>a.html</p></body></html>。这不是文件的内容。当然没有联系。您应该使用BeautifulSoup(open(path).read(), ...)

编辑
它还接受文件描述符。 BeautifulSoup(open(path), ...)就足够了。

答案 1 :(得分:2)

我认为你需要这样的东西

if path.endswith(".html"):
    htmlfile = open(dirpath)
    for link in BeautifulSoup(htmlfile,parse_only=SoupStrainer(target="_blank")):
        print link