首先,我们提出一个问题:网页是什么?
在我看来,网页就是信息,是我们请求一个公司或者个人发给我们的信息。
我们举一个例子,我们在浏览器中输入http://www.baidu.com 然后回车,就会看到我们很熟悉的百度界面
对吧,你就会说了,这不就是网页么? 但是我再问你,这个网页究竟是什么?为什么不同的网页信息不同,显示不同,样子不同呢? 来,先让我们看看它的本质面目,我们在界面上点击鼠标右键,选择查看源或者直接F12,就可以看到下面的样子:
这就是百度主界面的源文件,我们所看到的所有信息均在这些代码之中,只不过我们没学过前段语言,看不懂他们的意思,但是我们可以明白了,原来我们通过http://www.baidu.com 这个字符串,我们又叫它URL(统一资源定位符),向服务器发出了请求,然后服务器发送了这个信息给我们,然后我们的浏览器就像一个翻译官,将这些信息翻译成我们现在看到的这个界面。
那么我们所看到的所有信息其实就隐藏在了这些信息之中,或者说这些代码之中对不对
那么爬虫的作用就是获取这些信息,然后提取我们想要的部分,然后归纳总结,最后返回给我们我们想要的东西对不对。
既然我们大概明白了网页的原理和爬虫的功能,那么我们就开始我们爬取之旅的第一步,获取这个页面的全部信息。
我们解释上述代码:
首先我们引入一个requests库,它里面包含了我们将要使用的函数
然后,我们获得requests的对象r,通过我们第一条语句
r中就包含了这个页面的全部信息和各种各样的设置操作
r.enconding = r.apparent_encoding 这条语句是改变我们获取的页面的编码方式,因为r.encoding是它在返回信息的头字段中推断的这个页面的可能的编码方式,但是有很大的概率是错误的,错误的编码方式就会引起我们在观察返回的页面信息充满了各种各样的乱码。比如我们程序员常常开玩笑说“烫烫烫”,就是一种乱码的表现形式。所以我们利用r.apparent_encoding这个从返回内容中推断的,可靠性很高的编码方式替换掉初始的编码方式。这样方便我们在输出的时候观察我们获取的页面信息。
然后我们输出了r.text。其实是输出了返回的全部信息,就是我们利用F12看到的那些信息。
输出很长,我只截取了比较明显的一点点。
可以看到输出中包含了"百度一下"这个信息,其实就是页面上的显示信息
所以我们就已经获得了整个百度主页面的所有信息了
而我们可以看到我们在代码中有try except 和一个r.raise_for_status
这是因为我们在获取页面的时候有可能发生获取失败的情况,比如,网页走失-404 访问失败(没有联网)等等情况,所以我们要考虑这些情况下我们代码的可靠程度,我们利用try expect方法,在发生异常的时候给我们产生相应的错误提示,这里我输出了“fail”表示获取失败 而r.raise_for_status可以向try except提交一个异常信息,使得执行except下的语句,进而提高我们代码的可靠性。
好了,这些就是这篇文章我们要讲解的内容了,还不赶紧去试一试爬取你想要的界面呢?只要修改想用的url为你的网址就可以了,我们下篇文章再见