安装库
对于爬虫,request库是必不可少的,当然,安装requests库这一过程也是不可避免的,对于python中的各种第三方库,安装起来都是比较简单的!
一般需要先在cmd shell窗口中用命令行转至python安装路径下的Scripts文件夹路径下(Scripts文件夹是用来保存安装python第三方库的文件夹),如D:\Python\Scripts,
然后再输入以下代码,即可安装:
pip install requests
或者,为了避免出现在安装时出现read time out的大红一片,可以切换使用清华镜像的文件安装,即:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requestsps:这种方法也同样适用于各种第三库的安装方法,即把后面的库名更改成另一个库,即可!
测试:
既然安装好了requests库,为了检测有没有安装好成功,一般最简单的方法就是打开python的idle窗口,无需新建.py文件,只需要在窗口中输入:
import requests
然后回车,如若没有报错,即安装成功!
体验:
安装成功后,让我们在此窗口下,继续体验下去。
>>>import requests
>>>url="http://www.baidu.com"
>>>r=requests.get(url)
>>>r.status_code
200
>>>r.text
请先一一跟着以上代码输入进idle中,相信对于大家第一反应是好奇最后输出的内容是什么,为什么有许多看不懂的字符,先不急,小编一一为你解答:
1、代码的第一行,无需讲解,就是再简单不过的引入第三方库罢了;
2、代码的第二行与第三行实际上是一体的,在这里为了让初学者有一个更好的了解,才这么设计,当然,也可以改为下面这一行代码样式:
r=requests.get("http://www.baidu.com")
requests.get(url): 表示请求访问某一url地址,即一个网站的网址,很容易看出这次我们访问的是最常使用的百度主页的url;
3、r.status_code:这行代码的作用是用来判断爬虫访问网站是否成功,它会返回一个值,即状态码。
如若返回值为200,则代表爬虫访问网站成功;反之,如若返回值为其它(如404),则说明访问网站失败,至于失败的原因有着许多种,这里暂且不讨论;
4、现在,只有最后一行代码了,也是大家对此非常好奇的一行代码了,其因为是返回的内容对于新入门学者们不是很熟悉,这里只做简单的一些介绍:
(1)返回的内容为网页的源代码,即以上代码所返回的则是百度主页的源代码。那什么是源代码呢?学过前端的或者有接触过前端的对此一定很熟悉的,当然,另外的也不要担心,因为这种源代码是很容易理解的,即HTML(超文本标记语言),它是由一对又一对的标签所组成的,大家可以随意打开浏览器,按下键盘的F12键,即会弹出一个对话框,可以点击“元素”即可查看源代码,当然,也可以使用鼠标右击网页中的任意位置,点击“查看源代码”即可查看;
(2)相信比较细心的小伙伴会发现,在查看百度主页的源代码时,会发现爬虫所返回的内容跟自己查看的源代码有所不同,即查看爬虫返回的内容时,会发现有许多不认识的字符,且乱七八糟的,我们把这种情况称之为“乱码”,之所以会出现“乱码”这种现象是因为其编码,
什么是编码呢?这里由于篇幅问题,请各位小伙伴们请转至百度百科大致了解一下吧!而这种网页常见的编码有以下几种:ISO-8859-1
utf-8
GBK
……
以上三种编码是网页中常见的三种,其中,utf-8这个编码是我们人类所能看懂的一种编码,也就是所谓的“万能编码”。看到这里,相信有人已经想出怎么解决上述所返回内容出现的乱码方法了吧!
解决乱码:
1、为了解决乱码,首先,就不得不先了解网页的原来编码是什么?可以在浏览器中通过查看源代码的头标签中查看得到,也可以利用requests库这个庞大的第三库中的功能:
>>>r.encoding #从HTTP header中猜测响应内容的编码方式
>>>r.apparent_encoding #从内容中分析出响应内容编码方式(备选编码方式)
这两者的区别是什么呢?
(1)网络上的资源都是有编码的,没有编码我们将看不懂其内容!
(2)r.encoding:表示如果header(头部)中不存在charset,则认为编码为ISO-8859-1编码;
(3)r.apparent_encoding:根据网页内容分析出的编码方式。看了这两行代码以及了解其区别,相信还是有小伙伴们不太清楚这两行代码以及以上讨论编码的问题究竟有何用,是不是有点满脑子的问好呢?好的,废话少说,正式进入乱码的解决。
2、其实有一个很简单的方法,即:
>>>r.encoding='utf-8'
在r.text这行代码前插入上面这一行代码,返回的结果就肯定不会再出现乱码了,不信的,你可以去试试!!!
这行代码所解决的问题就是替换原来的编码为utf-8编码。
附源代码:
此代码是返回百度主页的源代码,大家可以尝试更改url地址,去访问其他网站试试;同时,顺便提一下:
r.text[:1000] #只打印网页的前1000个字符
这行代码的作用是为了避免某些大型网站所返回的内容过多,导致IDLE窗口出现异常、卡顿或者死机情况,可以很方便的使用这行代码,根据自己的需求,设置需要的内容范围,请注意这是一个区间,也可以设置成只返回网页的后1000个字符:
r.text[1000:]
好了,废话少说,请自阅以下源代码:
import requests
url="http://www.baidu.com"
r=requests.get(url)
print("状态值为:")
print(r.status_code) #打印输出状态值
print("头部编码为:")
print(r.encoding) #从HTTP header中猜测的响应内容编码方式
print("备选编码为:")
print(r.apparent_encoding) #从内容中分析出响应内容编码方式(备选编码方式)
r.encoding='utf-8' #替换原来的编码换成utf-8编码
print("打印网页的前1000个字符长度内容:")
print(r.text[:1000]) #打印网页的前1000个字符长度内容预留:这是一篇很基础的爬虫文章,是面对小白以及刚入门学习python爬虫而写的(当然也包括我),仅仅到这里是不够的,这仅仅还不到0.01%,同时,相信大家也觉得对所返回的内容和自己在浏览器上所看到的源代码虽是相同的,但是所返回的内容还是不太整齐,还是有点乱。如果需要解决这个问题,我们还得需要另外一个第三库,即所谓的“美味汤”(bs4)。如若对你有所用,请期待小白的下一篇博客。
ps: