从CSDN博主Jack-Cui学习记录
所谓网页抓取,就是把URL地址中指定的网络资源从网络流中读取出来,保存到本地。
类似于使用 程序模拟浏览器的功能,把URL作为HTTP请求的内容发送到服务器端,然后读取服务器端的响应资源。
在Python中,我们使urllib这个组件来抓取网页,urllib是一个URL处理包,这个包中集合了一些处理URL的模块,如下:
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()这个接口函数可以很轻松地打开一个网站,读取并打印信息。
urlopen有一些可选参数,具体信息可以查阅Python自带的documentation。
一个urllib库的实例:
urllib使用request.urlopen()打开和读取URLs信息,返回的对象response如同一个文本对象,我们可以调用read()进行读取。再通过print(),将读到的信息打印出来。
输出结果如下:
其实这就是浏览器接收到的信息,只不过我们在使用浏览器的时候,浏览器已经将这些信息转化成了界面信息供我们浏览。当然这些代码我们也可以从浏览器中查看到。浏览器就是作为客户端从服务器端获取信息,然后将信息解析,再展示给我们的。
虽然我们已经成功获取了信息,但是显然他们都是二进制的乱码,看起来十分不钢鞭。我们该怎么办呢?
我们可以通过简单的decode()命令将网页的信息进行解码,并显示出来,我们新创建一个文件,命名为urllib_test02.py,编写如下代码:
可以得到这样的结果:
当然这个前提是我们已经知道了在这个网页是使用utf-8编码的,怎么查看网页的编码方式呢?需要人为操作,且非常简单的方法是使用浏览器审查元素,只需要找到head标签开始位置的charset,就可以知道网页是何种编码的了。如下:
这样我们就知道了这个网站的编码方式,但是这需要我们每次打开浏览器,并找下编码方式,显然有些费事,使用几行代码解决更加省事并且显得酷一些。
获取网页编码的方式有很多,可以使用第三方库的方式。
首先我们需要安装第三方库chardet,它是y0onglai判断编码的模块。
安装好之后,我们就可以使用chardet.detect(0方法,判断网页的编码方式了。至此,我们就可以编写一个小程序判断网页的编码方式了:
程序运行结果:
返回的是一个字典,这样我们就知道网页的编码方式了,通过获得的信息,采用不同的解码方式即可。