python - 如何使用 BeautifulSoup4 从网页中正确提取 utf8 文本(日文符号)

标签 python utf-8 beautifulsoup

我使用 wget 下载网页。现在我正试图从这些页面中提取一些我需要的数据。问题在于此数据中包含的日语单词。英文单词提取完美。

当我尝试提取日语单词并在另一个应用程序中使用它们时,它们看起来是乱码。在测试不同的方法时,有一个解决方案只修复了一半的日语单词。

我试过的:我试过

from_encoding="utf-8" 

没有效果。我还尝试了多种方法从 html 代码中提取文本,例如

section.get_text(strip=True) 
section.text.strip()

和其他人,我也尝试使用不起作用的 URLencoding 对生成的文本进行编码,我还尝试使用我在 stackoverflow 上找到的所有代码

一种奇怪的方法(但不完全)是将字符串保存在字典中,然后将其保存到 JSON 中,然后从另一个脚本调用 JSON。仅仅使用字典是行不通的。我必须使用 JSON 作为两个脚本之间的中间人。奇怪的。 (不是所有的词都有效)

我的问题可能看起来像是另一个问题的重复。但另一个问题是从互联网上抓取。而我正在尝试做的是从离线源中提取。

这是一个解释主要问题的简单脚本

from bs4 import BeautifulSoup

page = BeautifulSoup(open("page1.html"), 'html.parser', from_encoding="utf-8")
word = page.find('span', {'class' : "radical-icon"})
wordtxt = word.get_text(strip=True)
  
#then save the word to a file
    
with open("text.txt", "w", encoding="utf8") as text_file:
    text_file.write(wordtxt)

打开文件时出现乱码

这是 BeautifulSoup 搜索的 html 部分:

<span class="radical-icon" lang="ja">亠</span>

预期的结果是得到文本文件里面的符号。或以任何方式正确保存它们。

是否有更好的网络抓取器可用于正确获取 utf8?

PS:抱歉英语不好

最佳答案

我想我找到了答案,只需卸载 beautifulsoup4。我不需要它。

python 有一个内置的方法来搜索字符串,我试过这样的方法:

import codecs
import re

with codecs.open("page1.html", 'r', 'utf-8') as myfile:
    for line in myfile:
        if line.find('<span class="radical-icon"') > -1:
            result = re.search('<span class="radical-icon" lang="ja">(.*)</span>', line)
            s = result.group(1)

with codecs.open("text.txt", 'w', 'utf-8') as textfile:
    textfile.write(s)

这是一种过于复杂且非 pythonic 的实现方式。但有效的方法有效。

关于python - 如何使用 BeautifulSoup4 从网页中正确提取 utf8 文本(日文符号),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58276115/

相关文章:

python - 当将 python 脚本作为 cron 选项卡运行时,如何启用本地模块?

python - 如何使用 bs4 打印第一个 google 搜索结果链接?

Python - 扩展 API 客户端类或传递实例

python - 在python中使用相同的文件名将mp4转换为wav

c - 按代码打印 Unicode 字符

java - 为什么随机访问文件在我的 UTF-8 文本文件中读取“ï”作为第一个字符?

javascript - 带有 python 和 beatifulsoup4 的 selelenium 是否允许像 jsoup 中那样显式地从 DOM 加载隐藏元素?

python - GAE 中的格式化文本

Python:numpy:检测到解释器更改 - 每个进程只能将此模块加载到一个解释器中

php - UTF-8贯穿始终