网络爬虫

网络爬虫

一.爬虫简介
• 网页爬取,就是把URL地址中指定的网络资源从网络流中读取出来,保存到本地。
• 请求网站并提取数据的自动化程序
二.爬取网页的基础知识-HTTP协议
1.HTTP协议简介超文本传输协议是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。HTTP的发展是由蒂姆·伯纳斯-李于1989年在欧洲核子研究组织(CERN)所发起。1999年6月公布的 RFC 2616,定义了HTTP协议中现今广泛使用的一个版本——HTTP 1.1。2014年12月,互联网工程任务组(IETF)将HTTP/2标准提议递交至IESG进行讨论,于2015年2月17日被批准。 HTTP/2标准于2015年5月以RFC 7540正式发表,取代HTTP 1.1成为HTTP的实现标准。
2. HTTP协议概述HTTP是一个客户端终端(用户)和服务器端(网站)请求和应答的标准(TCP)。通过使用网页浏览器、网络爬虫或者其它的工具,客户端发起一个HTTP请求到服务器上指定端口(默认端口为80)。我们称这个客户端为用户代理程序(user agent)。应答的服务器上存储着一些资源,比如HTML文件和图像。我们称这个应答服务器为源服务器(origin server)。在用户代理和源服务器中间可能存在多个“中间层”,比如代理服务器、网关或者隧道(tunnel)。
3.HTTP工作过程HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。
(1)客户端与服务器建立连接。
(2)发送HTTP请求
(3)服务器接到请求后,给予相应的响应信息。
(4)释放连接TCP连接
(5)客户端接收服务器所返回的信息,浏览器解析并显示网页。

## 三.爬虫过程

1.发起请求通过HTTP库向目标站点发起请求,即发送一个Request,请求可以包含额外的headers等信息,等待服务器响应。
2.获取响应内容如果服务器能正常响应,会得到一个Response ,获得的页面内容有Html,Json字符串,二进制数据(如图片,视频等)3.解析内容得到的内容可能是HTML,可以用正则表达式、网页解析库进行解析。可能是Json,可以直接转为Json对象解析,可能是二进制数据,可以做保存或者进一步的处理。
4.保存数据保存形式多样,可以存为文本,也可以保存至数据库,或者保存特定格式的文件。
• Request与Response
(1)浏览器就发送消息给该网址所在的服务器,这个过程叫做HTTP Request。
(2)服务器收到浏览器发送的消息后,能够根据浏览器发送消息的内容,做相应处理,然后把消息回传给浏览器。这个过程叫做HTTP Response。
(3)浏览器收到服务器的Response信息后,会对信息进行相应处理,然后展示。在这里插入图片描述爬取网页的基础知识-HTTP请求方法HTTP1.0 定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1 新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。
四.爬取网页的urllib库
1.urllib库
Python3.x 标准库 urllib 提供了 urllib.request 、 urllib.response 、urllib.parse和urllib.error四个模块,很好地支持了网页内容读取功能。再结合Python字符串方法和正则表达式,可以完成一些简单的网页内容爬取工作,也是理解和使用其他爬虫库的基础。
4. 使用urllib库获取网页信息使用 urllib.request.urlopen()函数可以打开一个网站,读取并打印网页信息。
urllib.urlopen(url, data[, proxies])urlopen()函数
5.返回response对象函数的参数
•url表示远程数据的路径;
•data表示提交到url的数据;
•proxies用于设置代理。
•response对象的方法info()方法: 返回一个httplib.HTTPMessage对象。
getcode()方法:返回HTTP状态码。如果是HTTP请求,200表示请求成功完成,404表示网址未找到。
geturl():返回请求的url。
五.爬取网页的requests库
1.requests库概述简洁的处理HTTP请求的第三方库,建立在Python的urllib3库基础上,是对urllib3库的再封装。requests库包括URL获取、HTTP长连接和连接缓存、自动内容解码、文件分块上传、连接超时处理、流数据下载等功能。
5. requests库解析requests库的requests.get()方法功能是网络爬虫和信息提交res=requests.get(url[,timeout=n])该函数
返回的网页内容会保存为一个response对象。参数url必须采用HTTP或HTTPS方式访问,可选参数timeout用于设定每次请求超时时间。requests.get() 返回的response对象代表响应。response对象的主要属性如下。
•statuscode:返回HTTP请求的状态,200表示连接成功,404表示失败。
•text:HTTP响应内容的字符串形式,即url对应的页面内容。
•encoding:HTTP响应内容的编码方式。•content:HTTP响应内容的二进制形式。•Response对象提供了两个方法。
•json():如果HTTP响应内容包含JSON格式数据,则该方法解析JSON数据。•raise_for_status():如果status_code值不是200,则产生异常。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值