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
我正在尝试在 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