chapter5-使用网页爬虫取利器—Requests

发布时间:2024年01月21日

上篇文章我们讲解了使用Python 自带的urllib模块来爬取我们的第一个页面。但是事实上,urllib在现在的互联网公司应用的并不是最多的。今天,我们就来介绍一下目前最为流行,也是最为方面的网络爬虫框架之一的Requests 。

为什么要学习Requests

在回答这个问题之前,我们先介绍一下requests:

Requests 允许你发送纯天然,植物饲养的 HTTP/1.1 请求,无需手工劳动。你不需要手动为 URL 添加查询字串,也不需要对 POST 数据进行表单编码。Keep-alive 和 HTTP 连接池的功能是 100% 自动化的,一切动力都来自于根植在 Requests 内部的 urllib3

这是节选自Requests官方文档的一段话,看上去像是在自卖自夸。事实上,Requests 的确极大地减少了我们的开发和配置工作。其GitHub主页上多达32K的star 也在宣告着它的成功与优秀基因。

为什么要学习Requests呢?对于初学者来说,主要原因是:

  • Requests 在互联网上拥有丰富的学习资源。在百度上搜索“requests 爬虫”关键字,一共有16万多条搜索结果。这意味着Requests 的相关技术已经比较成熟。特别对于初学者而言,一个具有丰富学习材料的内容,能够减少学习中的“挖坑”次数和“掉坑”次数;
  • Requests 官方提供中文文档。这一点对于新人,尤其是英语能力还不是很好的新人来说,是最好的资源。官网文档提供了详细而且非常准确的函数定义与说明。如果开发过程中出现了问题,百度、google、Stack Overflow…所有的搜索方法都试过,但是都不能解决问题的时候,翻阅官方文档是最稳妥,而且是最快捷的解决方案。

Requests初体验

  1. 安装Requests

    因为Requests 是第三方库,因此我们需要手动安装。在CMD 控制台中输入

    pip install requests

    当控制台提示安装成功后,我们进入Python 中,导入Requests,验证是否安装成功。

? (请原谅我这里的图用的是Linux系统下的截图。当我写到这个部分的时候,我的windows电脑“悲剧”了)

  1. 重写urllib的访问页面的代码

    使用Requests 爬取网页只需要几行代码,复杂程度远远小于urllib

    import requests
    url = "http://gitbook.cn/"
    web_data = requests.get(url)
    web_info = web_data.text
    print(web_info)
    

    让我们运行这个小程序,打印出运行结果:

    ......
    <p>GitChat 是一款基于微信平台的知识分享产品。通过这款产品我们希望改变IT知识的学习方式.</p>
    ......
    

    Amazing!Requests自动帮我们检测编码,并且正常的显示了中文!

    让我们详细的讲解一下这段代码

    import requests
    url = "http://gitbook.cn/"
    web_data = requests.get(url)
    

    上述代码很好理解。第一行代码导入了Requests 这个库,第二行代码定义了我们要爬取的URL,第三行,我们直接调用Requests 中的get()方法,即通过GET访问一个网页

    web_info = web_data.text
    

    当我们发出GET请求后,Requests 会基于 HTTP 头部对相应的编码做出有根据的推测,所以当我们的访问web_data.text 之前,Requests 会使用它推测的文本编码进行解析。

  2. 定制请求头

    什么是请求头呢?http请求头,HTTP客户程序(例如浏览器),向服务器发送请求的时候必须指明请求类型(一般是GET或者POST)。如有必要,客户程序还可以选择发送其他的请求头。
    在这里插入图片描述

    还记得我们上一篇文章中提到的“模拟浏览器”的行为吗?没错,浏览器的标志也在请求头中。
    上图就是一个典型的请求头。在Request 中,我们可以很方便的构造自己需要的请求头

    header = {		     'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,   */*;q=0.8',
    'Accept-Language':'zh-CN,zh;q=0.9',
    'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
    }
    r = requests.get("http://gitbook.cn/", headers=headers)
    
  3. Cookie的用处

    平时上网时都是使用无状态的HTTP协议传输出数据,这意味着客户端与服务端在数据传送完成后就会中断连接。这时我们就需要一个一直保持会话连接的机制。在session出现前,cookie就完全充当了这种角色。也就是,cookie的小量信息能帮助我们跟踪会话。一般该信息记录用户身份。

    什么是Cookie?简单的说,就是记录你用户名和密码,让你可以直接进入自己账户空间的一组数据。多说无益,我们来亲自实践一下。

    这次我们尝试访问CSDN,首先这是我已经登录之后,显示的个人页面。在这里插入图片描述

    在没有加入Cookie之前,我们尝试访问一下这个页面。

    import requests
    url = "https://my.csdn.net/"
    web_data = requests.get(url)
    web_info = web_data.text
    print(web_info)
    

    运行结果为:

    在这里插入图片描述

结果显示——你要么登录,要么注册。

那么,如果加入了COokie呢?我们首先获取自己的Cookie,如果你使用的是Chrome 浏览器,只需要右击-查看-network,然后刷新一下页面,就可以看到请求头中相对应的Cookie。

在这里插入图片描述

注意!Cookie 数据是十分隐私的个人数据!如果被他人获取到,采用一些常规手段,就可以登录你的相关账号,因此,请不要随意将自己的COokie 信息展示给他人!

让我们再重新修改一下代码

import requests
url = 'https://my.csdn.net/'
header = {
    'Cookie':'此处隐藏个人Cookie',
    'User-Agent' :'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
}
web_data = requests.get(url,headers=header)
web_info = web_data.text
print(web_info)

运行一下,查看结果

在这里插入图片描述

我们看到,最终爬取的结果中,已经包含了登录时收藏的相关文章!Cookie设置成功!

内容总结

  • 使用Requests 能够将大量原本复杂的开发过程进行简化,方便了我们更关注网页爬取技术本身;

  • 对与请求头,我们可以直接定制,你可以参考这篇文章详细的了解请求头和请求体;

  • Cookie是十分重要的隐私数据,带上Cookie,可以爬取相关账户的信息。不要轻易地将自己的账户Cookie展示给其他人看

    ?

文章来源:https://blog.csdn.net/ElegantOfKing/article/details/135687010
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。