网页爬虫之路 基础扫盲
URL
URL统一资源定位符 1、URL的结构 https://www.baidu.com:443/login/login.php?user=123&pass=456 https 使用https协议 www.baidu.com:443 域名:端口 login/login.php 资源路径 ? 文件名与GET参数之间用?分隔 user=123 GET方式向服务器发送一个参数名为user,值为123 & 多个参数之间用&分隔 2、相对URL与绝对URL 3、URL编码与解码
协议头
GET请求头
//起始行 访问方式 资源路径和GET参数 协议/版本号 //附加协议头的时候删掉 winhttp自动生成 GET /v2/getpublickey?x=100&y=200 HTTP/1.1 //主机名 域名 winhttp对象会自动生成 可以不附加 Host: passport.baidu.com //用户代理 服务器可以根据这个来识别是哪个浏览器 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0 //浏览器接受数据类型 winhttp对象会自动生成*/*类型 可以不附加 Accept: */* //浏览器接受的语言 Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3 //浏览器支持的编码 //附加协议头的时候必须删掉 不然返回的数据是压缩过的 需要自己再解压 Accept-Encoding: gzip, deflate, br //来路 GET和POST中都会出现,表示这个请求是从哪个页面发出的 //可能会有会变化的值 要特别注意 Referer: https://www.baidu.com/?user=123456&pwd=1212121 //非常重要 单独讲解 Cookie: BAIDUID=4A89DBBC382B25D9A43D12C4AB0151FD:FG=1 //表示长连接 1.1版本才支持 winhttp对象自动生成 可以不附加 Connection: keep-alive
POST请求头
//起始行 访问方式 资源路径和GET参数 协议/版本号 //附加协议头的时候删掉 winhttp自动生成 POST /v2/api/?login HTTP/1.1 Host: passport.baidu.com User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3 Accept-Encoding: gzip, deflate, br Origin: https://www.baidu.com/ Referer: https://www.baidu.com/ Cookie: BAIDUID=4A89DBBC382B25D9A43D12C4AB0151FD:FG=1 Connection: keep-alive Upgrade-Insecure-Requests: 1 //提交的数据包的长度 不能多也不能少一个字节 winhttp自动生成 可以不附加 Content-Length: 22 //提交数据的类型 单独讲解 Content-Type: application/x-www-form-urlencoded //POST提交的数据和协议头之间有一个空行 user=123456&pwd=654321
响应头
通常要注意的首部字段Set-Cookie和Location 还要注意状态码
状态码
状态码为301或302等有重定向时,如果你想获取当前链接的响应头或者响应数据。访问的时候要禁止重定向
协议头可以自定义
有些网站会在协议头里传递重要数据,并且一般是会变化的。如果网站检测,你就要找到来源,附加协议头提交
cookie
1、cookie的分类 服务器返回 Set-Cookie JavaScript生成 2、cookie的作用 识别身份(验证码) 判断是否登录状态 3、cookie的结构 名1=值1; 名2=值2; 名3=值3 4、抓包流程 论清除cookie的重要性 (博客园) 5、合并更新步骤 a) 新cookie 去除无效cookie b) 在新cookie里,寻找是否存在旧cookie里的名字。存在就用新的,丢掉旧的 c) 两cookie组合到一个文本型变量中 6、前端会用JS生成很多cookie,但是并非所有cookie都会检测。 比如Hm_lvt开头的一般没啥用。
编码
编码不对是中文乱码的根源,也是导致提交数据出错的重要原因 1、如何查看网页是何种编码 <meta charset="UTF-8" /> 这只是告诉浏览器以何种方式解析文档 真正决定网页编码的是在文件保存的时候 2、GBK GB2312 ANSI UTF8 3、URL编码与解码(UTF8) 4、不要用 编码_URL解码 来转换response 5、U码 \u6ce8\u518c\u6210\u529f (JS混淆) 6、十六进制文本 65797579616e \x65\x79\x75\x79\x61\x6e (JS混淆) 7、Base64 • 所有的数据都能被编码为只用65个字符就能表示的文本。 • 65字符:A~Z a~z 0~9 + / = • Base64的应用 密钥 密文 图片 普通数据(新浪账号) • Base64编码解码与btoa、atob
跨域
ajax 不能跨域
submit 表单提交
script 可以跨域
参数值一般在ajax或者submit
谢谢