Bash Python 库函数 - 在 shell 中使用 Beautiful Soup for HTML-纯文本

Bash Python Library Function - Using Beautiful Soup in shell for HTML-plaintext

我正在尝试在 venv 中使用 bash 脚本将给定目录中的一堆 HTML 文件转换为纯文本。

示例:file1.html、file2.html -> file1.txt、file2.txt,其中每个 .txt 文件都是来自相应 HTML 个文件的纯文本。

我正在使用 Beautiful Soup 库(具体来说,get_text() 函数),但我无法理解如何调用在每个 .html 文件上运行。

以下是我目前使用的:

for i in *; do python -c 'import bs4; print(bs4.BeautifulSoup("'$i'").get_text())' > "$i".txt; done

... 其中 $i 指的是目录中的当前文件,因为我正在逐个迭代。

这目前只将文件名写入 .txt 文件,而不是 Beautiful Soup'd HTML code-into-plaintext:

$ cat file.txt
poop.html

它还会产生以下警告:"file.html" 看起来像文件名,而不是标记。您可能应该打开此文件并将文件句柄传递给 Beautiful Soup。

有人可以帮忙吗?在此先感谢您的帮助。

BeautifulSoup 构造函数需要 html 文件的内容而不是文件名。您必须打开文件并将其传递给 BeautifulSoup。将您的行更改为

for i in *; do python -c 'import bs4; with open("'$i'") as f: print(bs4.BeautifulSoup(f).get_text())' > "$i".txt; done

You should probably open this file and pass the filehandle into Beautiful Soup.

所以打开crresponding文件并将文件对象传递给BeautifuSoup构造函数。

for i in *; do python3 -c 'import bs4;m = open("'$i'"); print(bs4.BeautifulSoup(m).get_text()); m.close()' > "$i".txt; done

您应该将文件句柄作为参数提供给 BeautifulSoup 而不是文件名本身。

bs4.BeautifulSoup(open("'$i'")).get_text()

正如我所建议的,您应该编写一个单独的 python 脚本。这是我的做法:

beautifulsoup.py 文件内容:

# -*- coding: utf-8 -*-

import sys
import os
from bs4 import BeautifulSoup
import codecs

if sys.stdout.encoding is None:
    os.putenv("PYTHONIOENCODING", 'UTF-8')
    os.execv(sys.executable, ['python']+sys.argv)

html_file = sys.argv[1]
htmlf = codecs.open(html_file, 'r', encoding='utf-8')
text = BeautifulSoup(htmlf).get_text()
htmlf.close()

print text

并像这样调用 beautiful.py 脚本:

for i in *; do python beautifulsoup.py "$i" > "$i".txt; done