今天小编给大家分享一下Python网络爬虫requests库怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
1. 什么是网络爬虫
简单来说,就是构建一个程序,以自动化的方式从网络上下载、解析和组织数据。
就像我们浏览网页的时候,对于我们感兴趣的内容我们会复制粘贴到自己的笔记本中,方便下次阅读浏览——网络爬虫帮我们自动完成这些内容
当然如果遇到一些无法复制粘贴的网站——网络爬虫就更能显示它的力量了
为什么需要网络爬虫
当我们需要做一些数据分析的时候——而很多时候这些数据存储在网页中,手动下载需要花费的时间太长,这时候我们就需要网络爬虫帮助我们自动爬取这些数据来(当然我们会过滤掉网页上那些没用的东西)
网络爬虫的应用
访问和收集网络数据有十分广泛的应用,其中很多属于数据科学领域 我们来看看下面这些例子:
淘宝网的卖家需要从海量的评价中寻找到有用的正面的和反面的信息,来帮助他进一步抓住顾客的心,分析顾客的购物心理有学者在twitter、微博等社交媒体上爬取信息来构建一个数据集,从而建立一个识别抑郁症和自杀念头的预测模型——让更多需要援助的人得到帮助——当然我们也需要考虑到隐私相关的问题——但这很酷不是吗?
作为一名人工智能工程师,他们从Ins上爬取志愿者所展示的喜好的图片,来训练深度学习模型,从而预测给出的图像是否会被志愿者所喜好——手机制造商将这些模型纳入他们的图片应用程序中,推送给你。电商平台的数据科学家爬取用户浏览商品的信息,进行分析和预测,以便推送给用户他最想要了解和购买的商品
是的!网络爬虫的应用十分广泛,小到我们日常用来批量爬取一些高清的壁纸,图片;大到人工智能、深度学习、商业策略制定的数据来源等。
这个时代是数据的时代,数据就是“新石油”
2. 网络传输协议HTTP
没错,讲到网络爬虫一定绕不开的就是这个HTTP,当然我们不需要像网络工程师那样详细的了解协议定义的方方面面,但是作为入门我们还是得具有一定的认识才行
国际标准化组织ISO维护了开放式通信系统互联参考模型OSI,而该模型将计算机通信结构分为七层
物理层:包括以太网协议、USB协议、蓝牙协议等
数据链路层:包含以太网协议
网络层:包含IP协议
传输层:包含TCP、UDP协议
会话层:包含用于打开/关闭和管理会话的协议
表示层:包含保护格式还和翻译数据的协议
应用层:包含HTTP和DNS网络服务协议
现在来看看HTTP请求和响应是什么样子的(因为后面会涉及自定义请求头) 一般请求消息由一下内容构成:
请求行
多个请求头
空行
可选的消息主体
具体的请求消息:
GET https://www.baidu.com/?tn=80035161_1_dg HTTP/1.1 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: zh-Hans-CN,zh-Hans;q=0.8,en-GB;q=0.5,en;q=0.3 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18362 Accept-Encoding: gzip, deflate, br Host: www.baidu.com Connection: Keep-Alive
这个是访问百度时的请求,当然里面的很多细节我们也不需要知道,因为python的request包会帮助我们完成我们的爬取
当然我们也能查看网页对我们的请求返回的信息:
HTTP/1.1 200 OK //这边的状态码为200表示我们的请求成功 Bdpagetype: 2 Cache-Control: private Connection: keep-alive Content-Encoding: gzip Content-Type: text/html;charset=utf-8 Date: Sun, 09 Aug 2020 02:57:00 GMT Expires: Sun, 09 Aug 2020 02:56:59 GMT X-Ua-Compatible: IE=Edge,chrome=1 Transfer-Encoding: chunked
3. requests库(不喜欢理论知识的同学们可以直接来这里哦)
我们知道其实python还预置了另外的处理HTTP的库——urllib和urllib3,但是requests库学起来更容易——代码更简洁易懂。 当然当我们成功爬取下网页时,将要将里面我们感兴趣的东西提取出来的时候, 我们会提到另一个十分有用的库——美丽汤(Beautiful Soup)——这又是后话了
1. requests库的安装
这里我们可以直接找到requests的.whl文件安装,也可以直接使用pip来安装(当然如果有pycharm的同学可以直接从里面的环境加载中下载)
2. 实战
下面我们开始正式爬取网页
代码如下:
import requests target = 'https://www.baidu.com/' get_url = requests.get(url=target) print(get_url.status_code) print(get_url.text)
输出结果
200 //返回状态码200表示请求成功 <!DOCTYPE html>//这里删除了很多内容,实际上输出的网页信息比这要多得多 <!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html; charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge> <meta content=always name=referrer> <link rel=stylesheet type=text/css src=//www.baidu.com/img/gs.gif> </p> </div> </div> </div> </body> </html>
上面五行代码做了很多事情,我们已经可以将网页的HTML内容全部抓取
第一行代码:加载requests库 第二行代码:给出需要爬取的网站 第三行代码:使用requests进行请求 一般的格式如下:
对象 = requests.get(url=你想要爬取的网站地址)
第四行代码:返回请求的状态码 第五行代码:输出相应的内容主体
当然我们还可以打印更多的内容
import requests target = 'https://www.baidu.com/' get_url = requests.get(url=target) # print(get_url.status_code) # print(get_url.text) print(get_url.reason)//返回状态 print(get_url.headers) //返回HTTP响应中包含的服务器头的内容(和上面展示的内容差不多) print(get_url.request) print(get_url.request.headers)//返回请求中头的内容
OK {'Cache-Control': 'private, no-cache, no-store, proxy-revalidate, no-transform', 'Connection': 'keep-alive', 'Content-Encoding': 'gzip', 'Content-Type': 'text/html', 'Date': 'Sun, 09 Aug 2020 04:14:22 GMT', 'Last-Modified': 'Mon, 23 Jan 2017 13:23:55 GMT', 'Pragma': 'no-cache', 'Server': 'bfe/1.0.8.18', 'Set-Cookie': 'BDORZ=27315; max-age=86400; domain=.baidu.com; path=/', 'Transfer-Encoding': 'chunked'} <PreparedRequest [GET]> {'User-Agent': 'python-requests/2.22.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}