目录
一.爬虫是什么
二.爬虫的基本流程
三.http与https协议的联系及区别
四.request与Response之间的关系
五.request请求以及常用请求方式
六.Respons响应
七.Robots规范与原则
八.总结
一.爬虫是什么
互联网是什么?互联网是由一个个站点和网络设备组成的,通过浏览器访问站点,站点把HTML、JS、CSS代码返回给浏览器,这些代码经过浏览器解析、渲染,将丰富多彩的网页呈现我们眼前;
爬虫指的是:通过程序代码模拟浏览器向网站发起请求,把站点(服务器)返回的HTML代码/JSON数据/二进制数据(图片、视频) 爬取到本地,进而通过解析代码分析并提取自己需要的数据;(若将爬虫比喻为蜘蛛,互联网将是一张蜘蛛网)
爬虫作用:1.搜索引擎---百度,google,垂直领域搜索引擎; 2.推荐引擎--今日头条;
3.机器学习样本; 4.数据分析;等等。
Q1:为什么得到的源代码和浏览器中看到的不一样?何为javaScript渲染页面?
原因:在浏览器中打开这个页面时,首先会加载这个HTML内容,接着浏览器会发现其中引入了一个app.js文件,然后便会接着去请求这个文件,获取到该文件后,便会执行其中的JavaScript代码,而JavaScript则会改变HTML中的节点,向其添加内容,最后得到完整的页面。 在用urllib或requests等库请求当前页面时,我们得到的只是这个HTML代码,它不会帮助我们去继续加载这个 JavaScript 文件,这样也就看不到浏览器中的内容了。
方法:使用HTTP请求库得到的网页源代码可和浏览器中的页面源代码不太一样。可以分析后台Ajax接口,也可以使用Selenium,Splash这样的库来实现模拟JavaScript渲染。
用户获取网络数据的方式:浏览器提交请求---->下载网页代码---->解析成页面;
爬虫获取网络数据的方式:模拟浏览器发送请求(获取网页代码)---->提取有用的数据----->存放于数据库或文件中;
1、发起请求
使用http库向目标站点发起请求,即发送一个Request(包含请求头、请求体等);
2、获取响应内容
如果服务器能正常响应,则会得到一个Response(包含:html,json,图片,视频等);
3、解析内容
解析html数据:正则表达式(re模块)、第三方解析库(xpath,css,Beautifulsoup,pyquery等);
解析json数据:json模块;
解析二进制数据:以wb的方式写入文件;
4、保存数据
数据库(MySQL,Mongdb等);
文件 (Excel等);(利用pandas库将爬取的数据存储在Excel较为方便)
URI:统一资源标识符; URL:统一资源定位符,且为URI的子集;(URI强调的是资源,而URL强调的是资源的位置)
URN:只命名资源不指定如何定位资源;
关系:URI = URL+URN
网站的URL会分为三部分:通信协议、域名地址、资源名称; 通信协议,简单来说就是浏览器和服务器之间沟通的语言。一般就是HTTP协议和HTTPS协议。HTTP协议是一种使用明文数据传输的网络协议,超文本传输协议。存在安全隐患。 HTTPS协议可理解为HTTP协议的升级,就是在HTTP的基础上增加了数据加密SSL层。在数据进行传输之前,对数据进行加密,然后再发送到服务器。
HTTP常用请求类型:
OPTIONS: 返回服务器针对特定资源所支持的http请求方法。 HEAD: 向服务器索要与get请求相一致的响应,只不过响应体将不会被返回。 GET: 向特定资源发出请求。 PUT: 向指定资源位置上传其最新内容。 POST: 向指定资源提交数据进行处理请求。 DELETE: 请求服务器删除指定URI所标识的资源。 PATCH: 用来将局部修改应用于某一资源。
Request:即请求,用户将自己的信息通过浏览器发送给服务器。
Response:即响应,服务器接收请求,分析用户发来的请求信息,然后返回数据。
注:普通获取网络数据的方式,浏览器在接收Response后,会解析其内容来显示给用户,而爬虫程序在模拟浏览器发送请求然后接收Response后,需要提取其中的有用数据。
请求包括:请求头,请求方法,请求体,请求网址;
1、请求方法:
Requests的Get和POST方法的区别:
01.get请求中的参数包含在URL里面,数据可以在URL中看到,请求参数params,请求提交的数据最多只有1024字节;
02.post请求的URL不包含这些数据通过表单形式传输,包含在请求体中。请求参数data,请求提交数据没有限制。
03.Requests 是python的很实用的HTTP客户端库;
2、定位request请求中的参数URL(url全球统一资源定位符)
注:网页的加载过程是:加载一个网页,通常都是先加载document文档。
3、请求头:用来说明服务器要使用的附加信息,一般有cookie,Referer,User-Agent。
User-agent:请求头中如果没有user-agent客户端配置,服务端可能将你当做一个非法用户host;
Accept: 请求报头域,用于指定客户端可以接受那些类型的信息。
cookies:cookie用来保存登录信息,标识服务器信息。
Host:用于指定请求资源的主机IP和端口号,其内容请求URL的原始服务器和网关位置。
Referer:标识这个请求是从那个页面发过来的,服务器可以将此信息做响应的处理,如来源统计,防盗链处理等。
Content-Type:提交数据的方式,叫互联网媒体类型或MIME类型,http协议消息中用来表示具体媒体协议类型。 详细:http://tool.oschina.net/commons请求体一般承载的内容是post请求中的表单数据,而对于GET请求,请求体则为空。
4.常用的请求方式
(1)添加请求头:(请求头以字典的形式生成,然后法送请求中以参数的形式传递并作用的请求中)
代码如下:
(2) 使用代理IP:使用IP的使用方法和请求头一致,设置proxies参数即可,代码如下:
(3)证书验证:通常设置关闭验证即可。在请求设置参数verify=False时就能关闭证书的验证,默认情况下是True。需要设置证书文件,可在verify值为证书路径;
import requests
url = "https://..."
#关闭证书验证
r = requests.get(url,verify=False)
print(r.status_code)
#开启证书验证
r = requests.get(url,verify=True)
#设置证书所在路径
r = requests.get(url,verify='路径')
(4)超时设置:
requests.get("https://...",timeout=0.01)
requests.post("https://...",timeout=0.01)
(5)使用cookies:只需设置参数Cookies即可;请求头注意携带;
由服务端返回客户端,可分为三部分:
响应状态码(Response Status Code)+响应头(Response Headers)+响应体(Response Body)
1、响应状态码
200:代表成功
301:代表跳转
404:文件不存在
403:无权限访问,服务器已理解请求,但拒绝执行;
502:服务器错误
注:通过F12快捷键检查Response响应元素(JSO数据,如网页html,图片,二进制数据等 )
2.响应头 包含了服务器对请求的应答信息,如Content-Type、Server、Set-Cookie等。
下面简要说明一些常用的头信息。
Date:标识响应产生的时间。
Last-Modified:指定资源的最后修改时间。
Content-Encoding:指定响应内容的编码。
Server:包含服务器的信息,比如名称、版本号等。
Content-Type:文档类型,指定返回的数据类型是什么,如text/html代表返回HTML文档,application/x-javascript则代表返回JavaScript文件,image/jpeg则代表返回图。
Set-Cookie:设置 Cookies。响应头中的 Set-Cookie 告诉浏览器需要将此内容放在 Cookies 中,下次请求携带 Cookies 请求。
Expires:指定响应的过期时间,可以使代理服务器或浏览器将加载的内容更新到缓存中。如果再次访问时,就可以直接从缓存中加载,降低服务器负载,缩短加载时间。
3.响应体 最重要的当属响应体的内容了。
响应的正文数据都在响应体中,比如请求网页时,它的响应体就是网页的HTML代码;请求一张图片时,它的响应体就是图片的二进制数据。我们做爬虫请求网页后,要解析的内容都在响应体中。
Robots规范,Robots协议(也称为爬虫协议、机器人协议等)的全称是“网络爬虫排除标准”(Robots Exclusion Protocol),网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取。Robots协议的本质是网站和搜索引擎爬虫的沟通方式,用来指导搜索引擎更好地抓取网站内容,而不是作为搜索引擎之间互相限制和不正当竞争的工具。
详情:robots协议_360百科
1、总结爬虫流程:
代码爬取--->Response解析--->数据存储
(1)将种子URL放入队列
(2)从队列中获取URL,抓取内容。
(3)解析抓取内容,将需要进一步抓取的URL放入工作队列,存储解析后的内容
2、爬虫所需工具:
请求库:requests;
解析库:正则,xpath,css,beautifulsoup,pyquery;
存储库:文件,MySQL,Mongodb等;
3、爬虫框架介绍:
o抓取策略:
n深度优先 n广度优先 nPageRan kn大站优先策略
o如何去重:
nHash表 nbloom过滤器
爬虫基础实例:
本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕,E-mail:xinmeigg88@163.com
本文链接:http://www.ksxb.net/tnews/11469.html