我正在创建一个抓取器,用于抓取 URL 页面中的所有评论,并将文本保存在 txt 文件中(1 条评论 = 1 txt)。 现在,当评论文本中有一些表情符号时,我遇到了问题。事实上,程序停止并显示“UnicodeEncodeError:‘charmap’编解码器无法对字符进行编码”。我怎样才能解决这个问题? (我用的是bs4)
代码结构是这样的:
q=requests.get(url)
soup=BeautifulSoup(q.content, "html.parser")
x=soup.find("a", {"class":"comments"})
y=x.find_all("div", {"class":"blabla"})
i=0
for item in y:
name=str(i)
comment=item.find_all("p")
out_file=open('%s.txt'%CreatorName, "w")
out_file.write(str(comment)
out_file.close
i=i+1
谢谢大家。
错误“UnicodeEncodeError:‘charmap’编解码器无法对字符进行编码”是由于在尝试使用默认编码(很可能是 ASCII)将包含表情符号(其为 Unicode 字符)的文本写入文件时出现的。
以下是如何在 Python 中使用 Beautiful Soup 解决此问题的步骤,并附带代码示例以及解释:
import requests
from bs4 import BeautifulSoup
def scrape_comments(url):
"""从给定的 URL 中抓取评论并将其保存到单独的文本文件中。"""
response = requests.get(url)
response.raise_for_status() # 检查请求是否成功
soup = BeautifulSoup(response.content, "html.parser")
comment_containers = soup.find_all("div", {"class": "blabla"})
for i, comment_container in enumerate(comment_containers):
comment_elements = comment_container.find_all("p")
comment_text = "\n".join(p.text for p in comment_elements)
# 使用 'utf-8' 编码保存评论
filename = f"comment_{i}.txt"
with open(filename, "w", encoding="utf-8") as file:
file.write(comment_text)
# 用的实际 URL 替换此 URL
url = "https://example.com/page-with-comments"
scrape_comments(url)
代码说明:
-
导入必要的库:
导入
requests
用于获取网站内容,导入BeautifulSoup
用于解析 HTML。 -
获取网站内容:
使用
requests.get(url)
获取给定 URL 的 HTML 内容。 -
使用 BeautifulSoup 解析 HTML:
使用
BeautifulSoup(response.content, "html.parser")
创建一个 BeautifulSoup 对象。 这使可以像导航 XML 或 JSON 一样导航 HTML 结构。 -
查找包含评论的元素:
使用
soup.find_all("div", {"class": "blabla"})
找到包含所有评论的 div 元素。请根据的网站的实际 HTML 结构调整选择器。 - 循环遍历评论并提取文本:
- 循环遍历每个找到的评论容器。
-
找到评论容器内的所有
<p>
标签,这些标签很可能包含实际的评论文本。 -
使用列表推导从找到的
<p>
标签中提取文本,并使用"\n".join(...)
将其连接成一个字符串,以在每个段落之间添加换行符。 -
使用
utf-8
编码保存评论: -
打开一个文件以写入,并指定
encoding="utf-8"
。这确保以可以表示表情符号和其他 Unicode 字符的方式保存文本。 - 将提取的评论文本写入文件。
关键变化:
-
使用
encoding="utf-8"
: 更改的关键在于在打开要写入的文件时指定encoding="utf-8"
。这可以确保将文本保存为 UTF-8,UTF-8 可以处理表情符号和其他 Unicode 字符,而不会出现任何问题。
通过进行此更改,的代码现在应该可以正确处理表情符号,并且可以成功地从网站中抓取并保存评论,而不会遇到“UnicodeEncodeError”。
标签:python,beautifulsoup,emoji From: 47473037