我想运行一个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())
答案 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