servlet网页获取中文乱码_今天教大家一招最简单的爬虫!利用urllib进行简单的网页抓取!...

d155fb87aaee0957af1e138bbd150b86.png
bf4de4044dd70b502bfc24a599293ee5.png

(1)protocol:第一部分就是协议,例如百度使用的就是https协议;

(2)hostname[:port]:第二部分就是主机名(还有端口号为可选参数),一般网站默认的端口号为80,例如百度的主机名就是www.baidu.com,这个就是服务器的地址;

(3)path:第三部分就是主机资源的具体地址,如目录和文件名等。

网络爬虫就是根据这个URL来获取网页信息的。

简单爬虫实例

在Python3.x中,我们可以使用urlib这个组件抓取网页,urllib是一个URL处理包,这个包中集合了一些处理URL的模块,如下:

bff2f40a252fbaaf5cb3e2e30f5d3eab.png

进群:960410445 即可获取源码!

1.urllib.request模块是用来打开和读取URLs的;

2.urllib.error模块包含一些有urllib.request产生的错误,可以使用try进行捕捉处理;

3.urllib.parse模块包含了一些解析URLs的方法;

4.urllib.robotparser模块用来解析robots.txt文本文件.它提供了一个单独的RobotFileParser类,通过该类提供的can_fetch()方法测试爬虫是否可以下载一个页面。

我们使用urllib.request.urlopen()这个接口函数就可以很轻松的打开一个网站,读取并打印信息。

21a5b8868c12a7ed044c216e3d0ead4e.png

urlopen有一些可选参数,具体信息可以查阅Python自带的documentation。

了解到这些,我们就可以写一个最简单的程序,文件名为urllib_test01.py,感受一个urllib库的魅力:

04d9488c6bfff96ae0436b72d8e4ff05.png

urllib使用使用request.urlopen()打开和读取URLs信息,返回的对象response如同一个文本对象,我们可以调用read(),进行读取。再通过print(),将读到的信息打印出来。

运行程序ctrl+b,可以在Sublime中查看运行结果,如下:

9123b74cbe9840894960bf8a2e3a114f.png

也可以在cmd(控制台)中输入指令:

python urllib_test01.py

运行py文件,输出信息是一样的,如下:

e6cd6027adc6fb57f03d13365ff63301.png

其实这就是浏览器接收到的信息,只不过我们在使用浏览器的时候,浏览器已经将这些信息转化成了界面信息供我们浏览。

当然这些代码我们也可以从浏览器中查看到。

例如,使用谷歌浏览器,在任意界面单击右键选择检查,也就是审查元素(不是所有页面都可以审查元素的,

例如起点中文网付费章节就不行.),以百度界面为例,截图如下:

71c923a1d2da3c37bd374dac2a40d1ca.png

可以看到,右边就是我们的审查结果。我们可以在本地,也就是浏览器(客户端)更改元素,但是这个不会上传到服务器端。例如我可以修改自己的支付宝余额装一装,比如这样:

cd1d2df5a1d175bc98d202d161e6f601.png

我实际有这些钱吗?显然苦逼的我,是不会有这些钱的,我只不过是修改了下审查元素的信息而已。

有些跑偏,不过说的道理就是,浏览器就是作为客户端从服务器端获取信息,然后将信息解析,再展示给我们的。

回归正题,虽然我们已经成功获取了信息,但是显然他们都是二进制的乱码,看起来很不方便。我们怎么办呢?

我们可以通过简单的decode()命令将网页的信息进行解码,并显示出来,我们新创建一个文件,命名为urllib_test02.py,编写如下代码(还是以百度翻译网站fanyi.baidu.com为例):

83c27e35ad1577f1f0c48d53ed7c30ff.png

这样我们就可以得到这样的结果,显然解码后的信息看起来工整和舒服多了:

8d2e30da64f85502314c3cd79c556e1b.png

当然这个前提是我们已经知道了这个网页是使用utf-8编码的,怎么查看网页的编码方式呢?

需要人为操作,且非常简单的方法是使用使用浏览器审查元素,只需要找到head标签开始位置的chareset,就知道网页是采用何种编码的了。如下:

c0d32835ae8873ecac5e4e916efec358.png

这样我们就知道了这个网站的编码方式,但是这需要我们每次都打开浏览器,并找下编码方式,显然有些费事,使用几行代码解决更加省事并且显得酷一些。

自动获取网页编码方式的方法

获取网页编码的方式有很多,个人更喜欢用第三方库的方式。

首先我们需要安装第三方库chardet,它是用来判断编码的模块,安装方法如下图所示,只需要输入指令:

e7d86f536e1cd7be5b6fe4e38d52a828.png

安装好后,我们就可以使用chardet.detect()方法,判断网页的编码方式了。

至此,我们就可以编写一个小程序判断网页的编码方式了,新建文件名为chardet_test01.py:

99e44ec707bb4c0025cd5af9f2bdcc67.png

运行程序,查看输出结果如下:

0bcc18b2ff93f0b20ed9cb2f48c3cf9a.png

返回的是一个字典,这样我们就知道网页的编码方式了,通过获得的信息,采用不同的解码方式即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值