鱼C论坛

 找回密码
 立即注册
查看: 1976|回复: 15

[已解决]保存本地的html文件如何提取纯文本

[复制链接]
发表于 2023-7-20 14:19:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 ssqchina 于 2023-7-20 14:21 编辑

这是提取网址的,本地的html文件该如何修改

import requests
from bs4 import BeautifulSoup

url = "https://www.baidu.com/"
soup = BeautifulSoup(requests.get(url).content, 'html.parser')

# kill all script and style elements
for script in soup(["script", "style"]):
    script.extract()    # rip it out

# get text
text = soup.get_text()

# break into lines and remove leading and trailing space on each
lines = (line.strip() for line in text.splitlines())
# break multi-headlines into a line each
chunks = (phrase.strip() for line in lines for phrase in line.split("  "))
# drop blank lines
text = '\n'.join(chunk for chunk in chunks if chunk)

print(text)
最佳答案
2023-7-20 14:37:55
ssqchina 发表于 2023-7-20 14:35
from bs4 import BeautifulSoup
with open("f:\\456.html", "r") as f:
    content = f.read()
from bs4 import BeautifulSoup
with open("f:\\456.html", "r", encoding="utf-8") as f:
    content = f.read()
soup = BeautifulSoup(content, "html.parser")
print(soup.text)
sorry,没考虑编码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-20 14:19:31 | 显示全部楼层
本帖最后由 歌者文明清理员 于 2023-7-20 14:20 编辑

这段代码使用Python爬取指定网页(https://www.baidu.com/)的内容,并保存为纯文本格式。
首先,通过requests库发送HTTP请求获取网页的HTML源代码。然后,使用BeautifulSoup库解析HTML,并移除其中的脚本和样式元素。
接下来,从解析后的HTML中提取文本内容。将文本按行分割,并去除每行首尾的空白字符。然后,将多行文本拆分为单行,并去除每行首尾的空白字符。最后,将非空的行连接起来,并打印输出。
若你想将文本保存到本地文件,可以添加以下代码:
with open('output.txt', 'w', encoding='utf-8') as f:
    f.write(text)
注意,需要确保代码所在的目录下可写入文件。


为什么不给我设置一个最佳答案呢?点它 ->

                               
登录/注册后可看大图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-20 14:19:35 | 显示全部楼层
你好!根据你提供的代码,你想要从百度网页中获取文本内容并保存为本地的HTML文件。以下是修改后的代码示例:
import requestsfrom bs4 import BeautifulSoupurl = "https://www.baidu.com/"response = requests.get(url)soup = BeautifulSoup(response.content, 'html.parser')# 保存html文件with open("baidu.html", "w", encoding="utf-8") as file:    file.write(str(soup))print("保存成功!")
这段代码使用requests库获取网页内容,然后使用BeautifulSoup库解析网页。最后,将解析后的内容写入名为"baidu.html"的本地文件中。

希望能帮到你!如果还有其他问题,请随时提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-20 14:19:43 | 显示全部楼层
问题分析:

根据提供的代码,您想要通过请求百度网址并将网页内容保存为纯文本。然而,在代码中存在一些排版和处理文本的问题。

1. 去除 scriptstyle 标签:代码通过遍历 soup 对象中的 scriptstyle 标签,并使用 extract() 方法删除这些标签。这是正确的做法。

2. 获取网页文本:代码通过 get_text() 方法获取网页的文本内容,这是正确的做法。

3. 处理文本:代码中使用了一系列操作来对文本进行处理。然而,其中的代码缩进似乎有问题,导致解析出来的文本可能会出现错误。

修正后的代码如下:
import requestsfrom bs4 import BeautifulSoupurl = "https://www.baidu.com/"soup = BeautifulSoup(requests.get(url).content, 'html.parser')# Kill all script and style elementsfor script in soup(["script", "style"]):    script.extract()  # Rip it out# Get texttext = soup.get_text()# Remove leading and trailing spaces on each linelines = (line.strip() for line in text.splitlines())# Break multi-headlines into a line eachchunks = (phrase.strip() for line in lines for phrase in line.split("  "))# Drop blank linestext = '\n'.join(chunk for chunk in chunks if chunk)print(text)
请注意,以上代码修正了排版问题,并确保文本处理的逻辑正确。您可以在本地运行修正后的代码,验证文本内容是否符合预期。

此外,在保存文本之前,您可能希望对文本进行进一步的处理,例如去除多余的空行、特殊字符等。根据您的需求,可以根据文本处理的目标进行相应的修改。

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-20 14:19:46 | 显示全部楼层
您的代码看起来可以成功地从HTML中提取文本。但是,如果你想保存HTML而不是仅仅提取文本,你可以按照以下方式进行:
import requestsurl = "https://www.baidu.com/"response = requests.get(url)# 确保请求成功response.raise_for_status()# 打开一个文件用来写入HTML内容with open("baidu.html", "w", encoding="utf-8") as f:    f.write(response.text)
这段代码会将百度主页的HTML内容保存到"baidu.html"这个文件中。具体流程如下:

1. 我们首先导入 requests 模块,这是Python中用于发送HTTP请求的模块。
2. 然后,我们使用 requests.get(url) 方法向指定的URL发送GET请求。这会返回一个 Response 对象,其中包含了服务器对我们请求的响应。
3. 接着,我们使用 Response 对象的 raise_for_status() 方法检查请求是否成功。如果请求失败(例如,服务器返回了404 Not Found状态码),那么这个方法会引发一个异常。
4. 最后,我们创建一个名为"baidu.html"的文件,并以写入模式打开它。我们将响应的文本内容(即HTML)写入这个文件。

需要注意的是,这个过程中并没有使用BeautifulSoup进行解析HTML。因为如果你的目标是保存整个HTML文件,而不是解析或者操作HTML内容,那么就无需使用BeautifulSoup。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-20 14:20:52 | 显示全部楼层
陶远航 发表于 2023-7-20 14:19
你好!根据你提供的代码,你想要从百度网页中获取文本内容并保存为本地的HTML文件。以下是修改后的代码示例 ...

我比你快!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-20 14:21:27 | 显示全部楼层


你占楼,你牛逼,你selenium
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-20 14:24:50 | 显示全部楼层
歌者文明清理员 发表于 2023-7-20 14:19
这段代码使用Python爬取指定网页(https://www.baidu.com/)的内容,并保存为纯文本格式。
首先,通过requ ...

这是提取网址的,本地的html文件该如何修改
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-20 14:25:09 | 显示全部楼层
陶远航 发表于 2023-7-20 14:19
你好!根据你提供的代码,你想要从百度网页中获取文本内容并保存为本地的HTML文件。以下是修改后的代码示例 ...

这是提取网址的,本地的html文件该如何修改!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-20 14:25:48 | 显示全部楼层
Mike_python小 发表于 2023-7-20 14:19
问题分析:

根据提供的代码,您想要通过请求百度网址并将网页内容保存为纯文本。然而,在代码中存在一些排 ...

这是提取网址的,本地的html文件该如何修改!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-20 14:26:24 | 显示全部楼层
isdkz 发表于 2023-7-20 14:19
您的代码看起来可以成功地从HTML中提取文本。但是,如果你想保存HTML而不是仅仅提取文本,你可以按照以下方 ...

这是提取网址的,本地的html文件该如何修改!!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-20 14:27:48 | 显示全部楼层
ssqchina 发表于 2023-7-20 14:24
这是提取网址的,本地的html文件该如何修改
from bs4 import BeautifulSoup
with open("your_file.html", "r") as f:
    content = f.read()
soup = BeautifulSoup(content, "html.parser")
print(soup.text)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-20 14:35:11 | 显示全部楼层

from bs4 import BeautifulSoup
with open("f:\\456.html", "r") as f:
    content = f.read()
soup = BeautifulSoup(content, "html.parser")
print(soup.text)
错误信息
Traceback (most recent call last):
  File "D:\Python\111.py", line 3, in <module>
    content = f.read()
UnicodeDecodeError: 'gbk' codec can't decode byte 0xa5 in position 60: illegal multibyte sequence
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-20 14:37:55 | 显示全部楼层    本楼为最佳答案   
ssqchina 发表于 2023-7-20 14:35
from bs4 import BeautifulSoup
with open("f:\\456.html", "r") as f:
    content = f.read()
from bs4 import BeautifulSoup
with open("f:\\456.html", "r", encoding="utf-8") as f:
    content = f.read()
soup = BeautifulSoup(content, "html.parser")
print(soup.text)
sorry,没考虑编码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-20 15:52:17 | 显示全部楼层
歌者文明清理员 发表于 2023-7-20 14:19
这段代码使用Python爬取指定网页(https://www.baidu.com/)的内容,并保存为纯文本格式。
首先,通过requ ...

《反对自己》
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-20 17:48:10 | 显示全部楼层

wc
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-22 09:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表