复习:http和https,django flask中讲到过
为了更好的模拟浏览器发送请求
http概念
- 超文本传输协议,
协议:客户端向服务端请求数据,要有一定的格式,每行都有特定的格式。
数据都是明文进行传输 - 默认端口号:80
在搜索引擎地址栏中输入网址,有的网址是http://,如果请求网站时不写端口,会默认是80,写上80效果也是一样的,例如:http://news.ifeng.com/ 凤凰网 http://news.ifeng.com/:80
https概念
- HTTP+SSL(安全套接字层)
数据的加解密,数据传输过程中不是明文 - 默认端口号:443
https比http更安全,但性能更低。
之前在Django和flask项目中启动web服务,可以用80,但没用过80端口,因为80是小于1000的,启动不起来,需要超级管理员权限才可以用,加sudo启用,启用之后就不用再写端口了,默认就是80和443
浏览器发送http的过程
- DNS服务器
实现域名的解析。可以拿着ip地址直接请求,但是记不住太多的ip地址,所以选择记域名。 - 请求网站时是如何返回数据的
后面学习会以谷歌浏览器为主
找到一个页面,www.taobao.com,右击“检查”/“审查元素”-network,F5刷新一下,会看到有很多请求,抓包。
实际中只请求了一个URL地址,但是network中出来很多URL请求,因为最初请求到数据后,会加载渲染到页面上,但是有些数据是没有的(图片等),所有会再次请求数据。然后会把所有的数据放在一起渲染,就是最终我们页面上看到的样子。看到的样子就是elements里的内容,(前端中讲过,需要调样式的时候看elements)。
respons:当前URL请求对应的响应
preview:对响应做的预览,对字符串来讲是没有任何效果的。
headers:请求头部的信息
- 当前请求的respons和elements是不一样的。elements会加载js,图片,css,已经当前URL的响应;respons对应的只是当前URL的响应。respons中可能没美容,elements会加载js重新发送ajax请求得到。
爬虫只会发送当前一个URL的请求,得到一个响应,不会主动请求js css 图片
即使拿到一个js的 url,respons中也只是得到字符串,是不会执行js里的内容的。
所以写爬虫时,要根据当前的URL对应的response为准。
如果爬虫拿不到数据,说明数据在其他URL中(比如ajax请求中),还有可能是数据通过js生成的(部分数据在响应中,全部通过js生成的)。
浏览器渲染出的页面(包含js加载的,js可以动态加载数据)和爬虫请求的URL页面不一样。