关于爬虫爬取网页时遇到的乱码问题的解决方案。

目录

  • 前言
  • 解决措施

前言

最近,我像爬取一下三国演义这本书籍的全部内容。
网站的网址为:https://www.shicimingju.com/book/sanguoyanyi.html
但是我爬取出来的结果是这样的

会遇到乱码。
经过我多方面的调试发现,就是网页的编码和我pycharm的编码不一致导致的。

网页的编码是ISO-8859-1,而pycharm的编码是‘utf-8’

解决措施

    # encode编码,将ISO-8859-1编成unicodepage_text = page_text.encode('ISO-8859-1')# decode解码,将unicode解码成utf-8page_text = page_text.decode('utf-8')

通过重新编码和解码来达到网页和编译器的编码一致。
修改前的代码:

# -*- coding: utf-8 -*-
# @Time        : 2024/1/24 20:16
# @File        : 04. bs4案例.py
# @Description : None
# ----------------------------------------------
# ☆ ☆ ☆ ☆ ☆ ☆ ☆ 
# >>> Author    : Kinght_123
# >>> Mail      : 1304662247@qq.com
# >>> Blog      : tim1304662247.blog.csdn.net
# ☆ ☆ ☆ ☆ ☆ ☆ ☆
import requests
from bs4 import BeautifulSoupif __name__ == "__main__":# 对首页的页面进行数据爬取headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'}url = 'https://www.shicimingju.com/book/sanguoyanyi.html'page_text = requests.get(url=url, headers=headers).text# 在首页中解析出章节的标题和详情页的url# 1. 实例化BeautifulSoup对象soup = BeautifulSoup(page_text, 'lxml')# 解析章节的标题和详情页的urlli_list = soup.select('.book-mulu > ul > li')fp = open('./sanguo.txt', 'w', encoding='utf-8')print(li_list)for li in li_list:title = li.a.stringdetail_url = 'https://www.shicimingju.com' + li.a['href']# 对详情页发起请求,解析出内容detail_page_text = requests.get(url=detail_url, headers=headers).textdetail_soup = BeautifulSoup(detail_page_text, 'lxml')div_tag = detail_soup.find('div', class_='chapter_content')# 解析到了章节的内容content = div_tag.textfp.write(title + ':' + content + '\n')print(title, '爬取成功!!!')

修改后的代码:

# -*- coding: utf-8 -*-
# @Time        : 2024/1/24 20:16
# @File        : 04. bs4案例.py
# @Description : None
# ----------------------------------------------
# ☆ ☆ ☆ ☆ ☆ ☆ ☆ 
# >>> Author    : Kinght_123
# >>> Mail      : 1304662247@qq.com
# >>> Blog      : tim1304662247.blog.csdn.net
# ☆ ☆ ☆ ☆ ☆ ☆ ☆
import requests
from bs4 import BeautifulSoupif __name__ == "__main__":# 对首页的页面进行数据爬取headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'}url = 'https://www.shicimingju.com/book/sanguoyanyi.html'page_text = requests.get(url=url, headers=headers).text# encode编码,将ISO-8859-1编成unicodepage_text = page_text.encode('ISO-8859-1')# decode解码,将unicode解码成utf-8page_text = page_text.decode('utf-8')# 在首页中解析出章节的标题和详情页的url# 1. 实例化BeautifulSoup对象soup = BeautifulSoup(page_text, 'lxml')# 解析章节的标题和详情页的urlli_list = soup.select('.book-mulu > ul > li')fp = open('./sanguo.txt', 'w', encoding='utf-8')for li in li_list:title = li.a.stringdetail_url = 'https://www.shicimingju.com' + li.a['href']# 对详情页发起请求,解析出内容detail_page_text = requests.get(url=detail_url, headers=headers).textdetail_soup = BeautifulSoup(detail_page_text, 'lxml')div_tag = detail_soup.find('div', class_='chapter_content')# 解析到了章节的内容content = div_tag.textfp.write(title + ':' + content + '\n')print(title, '爬取成功!!!')

最终显示的结果是这样的:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/646562.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ STL之deque的理解及使用

文章目录 1. 介绍2. 实现原理(简单理解)3. deque的优缺点4. deque类的使用4.1 deque类对象的构造函数4.2 deque类对象的容量操作4.3 deque类对象的修改操作4.4 deque类对象的访问及遍历操作 1. 介绍 deque(双端队列):是一种双开口的连续空间的…

MATLAB curve fitting toolbox没有怎么办?

版本:MATLAB R2023b 如果在安装MATLAB时仅仅选择了安装MATLAB,而并未选择其他选项,则在进入MATLAB后会发现顶部的APP栏中无法找到曲线拟合工具箱。 本人跟随MATLAB中的教程进行下载时,出现了如下报错: 最终解决方案&a…

【SVD生成视频+可本地部署】ComfyUI使用(二)——使用Stable Video Diffusion生成视频 (2023.11开源)

SVD官方主页 : Huggingface | | Stability.ai || 论文地址 huggingface在线运行demo : https://huggingface.co/spaces/multimodalart/stable-video-diffusion SVD开源代码:Github(含其他项目) || Huggingface 在Comfyui使用&…

MIT_线性代数笔记:线性代数常用概念及术语总结

目录 1.系数矩阵2.高斯消元法3.置换矩阵 Permutation4.逆矩阵 Inverse 1.系数矩阵 线性代数的基本问题就是解 n 元一次方程组。例如:二元一次方程组 2 x − y 0 − x 2 y 3 \begin{align*} & 2x - y 0\\ & -x2y 3 \end{align*} ​2x−y0−x2y3​ 写成…

谷歌公布一个可以让 AI 进行自我判断输出内容正确性的模型训练框架 ASPIRE

谷歌开发了一款名为 ASPIRE 的训练框架,旨在增强人工智能(AI)模型的选择性预测能力。这款框架为模型引入了 “可信度” 机制,即模型会输出一系列答案,并为每个答案赋予一个正确概率评分。通过这种方式,ASPI…

经典面试题-死锁

目录 1.什么是死锁? 2.形成死锁的四个必要条件 3.死锁的三种情况 第一种情况: 举例: 举例: 第二种情况:两个线程 两把锁 举例: 第三种情况:N个线程 M把锁 哲学家进餐问题 1.什么是死锁&…

Linux破解密码

破解root密码(Linux 7) 1、先重启——e 2、Linux 16这一行 末尾加rd.break(不要回车)中断加载内核 3、再ctrlx启动,进入救援模式 4、mount -o remount,rw /sysroot/——(mount挂载 o——opti…

选择海外云手机需要考虑什么?

随着跨境电商行业的蓬勃发展,企业们纷纷寻找提升平台流量和广告投放效果的方法,这已成为业界的当务之急。传统的宣传模式在国内受到直播和链接带货等新兴方式的冲击,而在国外,类似的趋势也在悄然兴起,呈现出广阔的发展…

服务器运维小技巧(二)——如何进行监控告警

服务器运维难度高的原因,很大程度是因为服务器一旦出现问题,生产环境的业务就会受到严重影响,极有可能带来难以承担的后果。因此这份工作要求工程师保持高要求的服务质量,能够快速响应问题,及时解决问题。 但是“及时…

Eureka-第一篇

​ 一、Eureka的概述 Eureka的基本概念和作用 Eureka是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。Eureka是Netflix开发的服务发现框架,主要用于解决在云计算环境中动态位置服…

[docker] Docker镜像的创建以及Dockerfile的使用

一、Dokcer镜像的创建 创建镜像有三种方法,分别为基于已有镜像创建、基于本地模板创建以及基于Dockerfile创建。 1.1 基于现有镜像创建 (1)首先启动一个镜像,在容器里做修改docker run -it --name web centos:7 /bin/bash …

【C++】介绍STL中list容器的常用接口

目录 一、STL中的list简介 二、构造函数 2.1 默认构造函数 2.2 填充构造(用n个相同的值构造) 2.3 迭代器构造 2.4 拷贝构造和赋值运算符重载 三、迭代器 3.1 正向迭代器 3.2 反向迭代器 四、容量相关 4.1 获取list中有效数据的个数 4.2 判…

android camera的使用以及输出的图像格式

一、Camera 1.1、结合SurfaceView实现预览 1.1.1、布局 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android.com/apk/res-au…

burp靶场--CSRF

burp靶场–CSRF https://portswigger.net/web-security/csrf#what-is-csrf ### 什么是 CSRF&#xff1f; 跨站请求伪造&#xff08;也称为 CSRF&#xff09;是一种 Web 安全漏洞&#xff0c;允许攻击者诱导用户执行他们不打算执行的操作。它允许攻击者部分规避同源策略&#…

Unity 解决异步分发方案

很多程序&#xff0c;包括游戏、小程序、一些AR、VR的程序&#xff0c;因为客户端体量太大&#xff0c;更新频繁都涉及到远程热更新的问题&#xff0c;解决这类问题的思路基本上是客户端解决主要功能&#xff0c;资源类放置在服务器。 下面记录下&#xff1a; 1.CDN或者云轻量…

Windows11操作系统百科

简介 Windows 11是由微软公司&#xff08;Microsoft&#xff09;开发的操作系统&#xff0c;应用于计算机和平板电脑等设备 [1]。于2021年6月24日发布 [3]&#xff0c;2021年10月5日发行 [29]。 Windows 11提供了许多创新功能&#xff0c;增加了新版开始菜单和输入逻辑等 [6]…

安装ddddocr中遇到的问题

1、需要先安装&#xff1a; pip3 install pyinstaller --no-use-pep517 pip install scikit-build pip install setuptools pip install pyinstaller pip install pillow 重要是的是保证一个python 环境&#xff0c;多个python环境会导致各种问题。并且保证python>3.8…

安装宝塔面板后k8s所在节点pod无法正常工作解决方法,kubernetes k8s 与宝塔面板冲突解决方法

在实际项目过程中我们使用了k8s 在生产环境中运行管理服务。 但是对服务器的状态管理我们使用了宝塔面板进行 K8s 版本1.2.8 宝塔面板 版本 8.05 操作步骤是这样的。 1.完成1.2.8 k8s的节点安装&#xff0c;并正常运行服务。 过程略 2.安装宝塔面板 ​ yum install -y …

基于springboot留守儿童爱心网站源码和论文

随着留守儿童爱心管理的不断发展&#xff0c;留守儿童爱心网站在现实生活中的使用和普及&#xff0c;留守儿童爱心管理成为近年内出现的一个热门话题&#xff0c;并且能够成为大众广为认可和接受的行为和选择。设计留守儿童爱心网站的目的就是借助计算机让复杂的管理操作变简单…

Docker的Cgroup资源限制

目录 前瞻 CPU 资源控制 设置CPU使用率上限 设置CPU资源占用比&#xff08;设置多个容器时才有效&#xff09; 设置容器绑定指定的CPU 内存资源限制 对磁盘IO配额控制&#xff08;blkio&#xff09;的限制 前瞻 Docker 通过 Cgroup 来控制容器使用的资源配额&#xff0c…