使用BeautifulSoup爬取“0daydown”网站的信息(2)——字符编码问题解决

news/2024/5/18 12:03:19/文章来源:https://blog.csdn.net/abclixu123/article/details/44316681

上篇中的程序实现了抓取0daydown最新的10页信息,输出是直接输出到控制台里面。再次改进代码时我准备把它们写入到一个TXT文档中。这是问题就出来了。

最初我的代码如下:

#-*- coding: utf-8 -*-
#-------------------------------------
#version: 0.1
#note:实现了查找0daydown最新发布的10页资源。
#-------------------------------------
#-------------------------------------
#version: 0.2
#note:在v0.1基础上输出内容到一个指定TXT文件中
#-------------------------------------import urllib.request
import sys
import localefrom bs4 import BeautifulSoupprint(locale.getdefaultlocale())old = sys.stdout        #保存系统默认输出
fp = open("test1.txt",'w')
#fp = open("test1.txt",'w', encoding="utf-8")    #以utf-8进行文件编码
sys.stdout = fp         #输出重定向到一个文件中for i in range(1,11):url = "http://www.0daydown.com/page/" + str(i)	#每一页的Url只需在后面加上整数就行page = urllib.request.urlopen(url)soup_packtpage = BeautifulSoup(page)page.close()num = " The Page of: " + str(i)		#标注当前资源属于第几页print(num)print("#"*40)for article in soup_packtpage.find_all('article', class_="excerpt"):	#使用find_all查找出当前页面发布的所有最新资源print("Category:".ljust(20), end=''), print(article.header.a.next)   #categoryprint("Title:".ljust(20), end=''), print(article.h2.string)       #title    print("Pulished_time:".ljust(19), end=''), print(article.p.find('i', class_="icon-time icon12").next)  #published_timeprint("Note:", end='')print(article.p.find_next_sibling().string)    #noteprint('-'*50)fp.close()
sys.stdout = old    #恢复系统默认输出
print("Done!")
input() #等待输入,为了不让控制台运行后立即结束。

运行文件后报错:错误信息如下:

Traceback (most recent call last):File "E:\codefile\Soup\0daydown - 0.2.py", line 37, in <module>print(article.p.find_next_sibling().string)    #note
UnicodeEncodeError: 'gbk' codec can't encode character '\xa0' in position 117: illegal multibyte sequence

从文中可以看出是Unicode编码错误,说gbk不能编码\xa0这个字节。就字符编码这个问题我看了好多文章,查阅了好多资料。新手没办法,不过还好弄懂了。

最初的时候我根本毫无头绪,查看网上的一些文章开始模仿进行encode.decode的,根本没有用,输出仍然有问题,不抛出异常了,但是根本看不到汉字了,全是一些\x..这种替代了。

问题要追根朔源,我连基本的字符编码和字符集这些东西都没有搞清楚,怎么能解决问题呢?于是我搜索这方面相关文章,给出我觉得好的文章的链接如下:

字符编码详解   这篇文章虽然长,但是作者总结的太详细了,看了后收获很大。

于是我想为什么写入到文件中就会报错呢?而命令行输出就没有这个问题。难道文件有问题?文件的编码有问题?我顺着这个问题找到了一篇讲Python3的文件的文章,很好,链接如下:

Python3的文件  其中里面写到了文件的编码,原来打开文件时是可以指定文件编码的,如果不指定,那么文件默认采用什么编码方式呢?这篇文章做出了详细的解释。

我的源代码中打开文件的方式是:fp = open("test1.txt",'w'),结果抛出异常,从上面抛出的异常可以说明默认打开文件,文件的编码方式是gbk,而GBK是不能编码\xa0这个字符的,查了下这个字符,原来是HTML中特有的空字符&nbsp。要爬取的网页默认的编码方式是utf-8,说明utf-8是能编码这个字符的。那么我们可以指定文件的编码方式不呢?答案是可以,原来open中还有个参数是encoding,用来指定编码方式,如果我们指定它为utf-8会怎样?下面是正确的代码,不同的只是把fp = open("test1.txt",'w')变为了fp = open("test1.txt",'w', encoding="utf-8")。代码如下:

#-*- coding: utf-8 -*-
#-------------------------------------
#version: 0.1
#note:实现了查找0daydown最新发布的10页资源。
#-------------------------------------
#-------------------------------------
#version: 0.2
#note:在v0.1基础上输出内容到一个指定TXT文件中
#-------------------------------------import urllib.request
import sysfrom bs4 import BeautifulSoupold = sys.stdout        #保存系统默认输出
#fp = open("test1.txt",'w')
fp = open("test1.txt",'w', encoding="utf-8")    #以utf-8进行文件编码
sys.stdout = fp         #输出重定向到一个文件中for i in range(1,11):url = "http://www.0daydown.com/page/" + str(i)	#每一页的Url只需在后面加上整数就行page = urllib.request.urlopen(url)soup_packtpage = BeautifulSoup(page)page.close()num = " The Page of: " + str(i)		#标注当前资源属于第几页print(num)print("#"*40)for article in soup_packtpage.find_all('article', class_="excerpt"):	#使用find_all查找出当前页面发布的所有最新资源print("Category:".ljust(20), end=''), print(article.header.a.next)   #categoryprint("Title:".ljust(20), end=''), print(article.h2.string)       #title    print("Pulished_time:".ljust(19), end=''), print(article.p.find('i', class_="icon-time icon12").next)  #published_timeprint("Note:", end='')print(article.p.find_next_sibling().string)    #noteprint('-'*50)fp.close()
sys.stdout = old    #恢复系统默认输出
print("Done!")
input() #等待输入,为了不让控制台运行后立即结束。

运行后,无错误产生,成功写入文件,打开文件,显示如下:


可以看出,输出结果与上一篇命令行输出的结果是一样的。圆满解决,OK!!另外,今天抽空学了下Github,早闻大名,看了下介绍,发现很强大,跟着官网教程Helloworld入了下门,注册了个帐号,准备以后代码都放在那上面了。


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

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

相关文章

Building a Website with Node.js and Express.js 使用Node.js和Express.js构建网站 Lynda课程中文字幕

Building a Website with Node.js and Express.js 中文字幕 使用Node.js和Express.js构建网站 中文字幕Building a Website with Node.js and Express.js 虽然Node.js是一个用于构建Web服务的流行平台&#xff0c;但它并不是为简单的网站开发而设计的 Express.js是一个快速&am…

WordPress: Building a Paid Membership Site WordPress:建立付费会员网站 Lynda课程中文字幕

WordPress: Building a Paid Membership Site 中文字幕 WordPress&#xff1a;建立付费会员网站 中文字幕WordPress: Building a Paid Membership Site 想开始从您的WordPress网站赚取收入&#xff1f; 尝试付费会员 本课程涵盖了使用WordPress销售付费会员的两大优秀解决方案…

Nginx HTTPS 网站优化篇

摘要&#xff1a; 从 2015 年 5 月 14 日 HTTP/2 协议正式版的发布到现在已经快有一年了&#xff0c;越来越多的网站部署了 HTTP2&#xff0c;HTTP2 的广泛应用带来了更好的浏览体验&#xff0c;只要是 Modern 浏览器都支持&#xff0c;所以部署 HTTP2 并不会带来太多困扰。最近…

各种大型网站技术架构

引言近段时间以来&#xff0c;通过接触有关海量数据处理和搜索引擎的诸多技术&#xff0c;常常见识到不少精妙绝伦的架构图。除了每每感叹于每幅图表面上的绘制的精细之外&#xff0c;更为架构图背后所隐藏的设计思想所叹服。个人这两天一直在搜集各大型网站的架构设计图&#…

使用电容器将您的网站转换为安卓应用程序

根据阿特伍德定律&#xff0c;“任何可以用 JavaScript 编写的应用程序&#xff0c;最终都会用 JavaScript 编写。” 在本文中&#xff0c;我们将学习如何使用 Ionic 的一个名为电容器的库将网站或 Web 应用程序转换为可以部署在 Android Play 商店或安装在移动设备上的 Andro…

(转) 将VB.NET网站转换成C#的全过程

在学习URL重写过程中碰到个是VB写的源码&#xff0c;看起来总是不爽的就GOOLE了下 感觉这个文章写的不错 原文地址 http://www.cnblogs.com/cngunner/archive/2006/01/16/318309.html 前两天看到一个比较不错的网站&#xff0c;可惜是用vb.net写的&#xff0c;俺弄不大明白&…

网站发布

转载于:https://www.cnblogs.com/bin521/p/6839639.html

在windows 2008R2上部署.net framework 3.5网站的故障处理解决方法

1、IIS7.0 检测到在集成的托管管道模式下不适用的ASP.NET设置 的解决方法 故障如下图&#xff1a; 解决办法&#xff1a; 在IIS中选择网站的“基本设置”&#xff1a; 然后选择&#xff1a; 如下图&#xff1a; 2、win2008R2(64)未在本地计算机上注册 Microsoft.Jet.OLEDB.4.…

VS2010+Windows 2008部署网站及asp.net业务系统问题收集

VS2010Windows 2008部署网站及asp.net业务系统问题收集 Windows 2008部署asp.net&#xff0c;问题真多&#xff0c;不如windows 2003用起来爽。 1、关于CuteEditor不能上传文件名中有中文的问题&#xff1a; 解决办法&#xff1a; 编辑CuteSoft_Client\CuteEditor\Configur…

ubuntu-18.04.3与.net Core 2.2之旅(2)- Ubuntu 18.04 部署Asp.net Core 2.2网站后通过supervisor进程守护,实现网站托管

上次学习了 Windows 7 X64VMwareubuntu-18.04.3Visual Studio 2017部署.Net Core 2.2过程详细图解 说明&#xff1a; 1、网上很多文章按顺序操作仍不能正常进行&#xff0c;为方便和我一样的菜鸟学习&#xff0c;本人原创的文章均通过自己亲自操作的截图。 2、本文的操作均是…

关于Ubuntu18.04环境下修改部署的asp.net Core网站的端口的几个测试

asp.net Core的端口是在launchSettings.json文件中配置的。该文件是用于调试的时候使用的&#xff0c;在发布后&#xff0c;并没有该文件 。launchSettings.json中默认的端口是5000&#xff0c;部署到Ubuntu后&#xff0c;也能通过5000端口可以正常访问。 测试1、将launchSetti…

知名互联网公司网站架构图

引言 近段时间以来&#xff0c;通过接触有关海量数据处理和搜索引擎的诸多技术&#xff0c;常常见识到不少精妙绝伦的架构图。除了每每感叹于每幅图表面上的绘制的精细之外&#xff0c;更为架构图背后所隐藏的设计思想所叹服。个人这两天一直在搜集各大型网站的架构设计图&…

大型互联网网站架构心得

我们知道&#xff0c;对于一个大型网站来说&#xff0c;可伸缩性是非常重要的&#xff0c;怎么样在纵向和横向有良好的可伸缩性&#xff0c;就需要在做架构设计的时候考虑到一个分的原则&#xff0c;我想在多个方面说一下怎么分&#xff1a; 首先是横向的分&#xff1a; 1. 大的…

如何用PHPstudy建站

要求 环境 : phpapachemysql&#xff08;建议PHP study一键式建站&#xff09; 形式 : 在浏览器上输入自己的姓名&#xff0c;以post形式提交到后台&#xff0c;并存储到数据库中 步骤&#xff1a; 1.在PHP study目录下的WWW目录下新建一个网页2.html 2.打开MySQL&#xff0c;…

html常见的网站布局header,footer,left,center

效果图 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width, init…

如何在网站页面布局SEO关键词

在网站页面布局SEO关键词关乎网站页面后期能否获取更高搜索展现和用户体验。关键词合理布局在各个网站页面中&#xff0c;既能保障一个网站设置几十上百个关键词的可能&#xff0c;增加网站被索引、搜索、展现的几率&#xff0c;又能为搜索引擎提供更加精确的页面简介&#xff…

200行代码搞定一个购物网站+电影站+APP

以前有一个朋友问我&#xff0c;说想做一个购物网站 &#xff0c;电影站 &#xff0c;需要APP 形式提供 。 问我一个星期能不能搞定&#xff0c;听了他的奇葩需求后&#xff0c;有点被耍的感觉&#xff0c;在普通人眼里 一个程序可能就是半天就做出来的东西。 后来仔细想想&…

github+hexo一站式免费快速搭建个人网站

文章目录 一、环境准备1、安装node.js2、安装cnpm3、安装hexo 二、正式搭建1、初始化hexo2、启动hexo3、浏览器输入http://localhost:40004、新建一篇文章5、清除、重新生成 三、将博客部署到github1、新建github仓库2、安装插件3、修改配置4、推送到远端5、访问地址https://am…

[python]一个特别好的学习python网站

这是一个学习python特别好的网站&#xff0c;其中关于讲解class的部分有图例展示&#xff0c;形象生动。 网址为&#xff1a; https://www.python-course.eu/python3_course.php 关于class的章节&#xff1a;

从tushare网站获取股票基本信息并存入数据库中的python源代码

要对股票进行分析&#xff0c;需要关注股票的基本信息&#xff0c;例如上市时间、市值&#xff0c;所属行业等等&#xff0c;本文以从tushare网站获取相关信息为例&#xff0c;展示如何获取并存入到mysql数据库中&#xff0c;闲言少叙&#xff0c;直接上代码&#xff1a; #cod…