关于Python网络爬虫requests库的介绍
作者:国家一级假勤奋大学生 发布时间:2021-10-20 23:13:52
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'}
基本的网页抓取就完成了,但是如果我们想要解析我们抓取的HTML格式的网页呢,我们还需要学习正则表达式、Beautiful Soup库的应用,这些我们下个博客再讲解吧
来源:https://blog.csdn.net/Enternalwiser/article/details/107890716


猜你喜欢
- 1、下载安装好PyCharm 专业版后打开或者新建一个Python项目,找到View导航栏,如下图:在Tool Windows下可以找到Sc
- 概率论啊概率论,差不多忘完了。基于概率论的分类方法:朴素贝叶斯1. 概述贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称
- 首先了解python对象的概念python中,万物皆对象,所有的操作都是针对对象的。 那什么是对象?5是一个int对象,‘oblong
- 本文实例讲述了Python使用MD5加密算法对字符串进行加密操作。分享给大家供大家参考,具体如下:# encoding: utf-8from
- 示例下面是一个简单的Python爬虫Scrapy框架代码示例,该代码可以抓取百度搜索结果页面中指定关键字的链接和标题等信息:import s
- 一、题目描述题目内容:题目示例:题目解析:1 <= nums.length <= 104-107 <= nums
- PIL 图片操作读取图片img = Image.open(“a.jpg”)显示图片im.show() # im是Image对象,im是num
- 1、DjangoDjango可能是最具代表性的Python框架,是遵循MMVC结构模式的开源框架。其名字来自DjangoReinhardt,
- 从前有三只小猪,长大自立了分别造房子住。老大搬来草堆堆出草屋,老二搬来木头搭出木屋,老三搬来砖头,砌墙,造烟囱,造出了坚固的砖房。一天晚上大
- MySQL 表别名(Alias)SQL 表别名在 SQL 语句中,可以为表名称及字段(列)名称指定别名(Alias),别名是 SQL 标准语
- [Hack] 意为”劈”、”砍”。 [Hacker] 意为”黑客”CSS Hack 是指针对不同的浏览器写不同的CSS code的过程,简单
- 延续上一篇的话题继续,顺便放上一篇的传送门:点这里。集群的必要性consul本身就是管理集群的,现在还需要给consul搞个集群,这是为啥?
- 本文为大家分享了pygame游戏之旅的第11篇,供大家参考,具体内容如下定义一个button函数,将文字,颜色等作为参数。def butto
- 本文实例讲述了JS闭包。分享给大家供大家参考,具体如下:之前花了很多时间看书上对闭包的介绍,也看了很多人的写的关于闭包的博客,然后我就以为自
- 前言当我们使用Python完成自己的原创的工具时,比如:端口扫描、弱口令爆破等。你是否想过添加自己的Logo,以及简要的帮助信息?如下:Sq
- 效果: 思路:利用onmousemove事件,然后获取鼠标的坐标,之后把DIV挨个遍历,最后把鼠标的坐标赋给DIV。代码:<
- 背景公司一个golang的项目,使用到了公司的私有仓库,去执行go mod tidy(下载依赖)的时候,到download公司私有库的时候就
- 组建一个关于书籍、作者、出版社的例子:from django.db import modelsclass Publisher(models.
- IE 一如既往地带来问题。真的,我觉得 IE 坚持自己的一套无所谓,不支持或者不完全支持标准也无所谓。但是,IE6 IE7 IE8 这三个版
- 当我们打开一个图片编辑软件时,基本上都会提供几个操作:平移、缩放和旋转。特别目前在手机里拍照时,由于位置传感器的失灵,也许是软件的BUG,有