这个系列的网络爬虫,会覆盖至少80%的网页爬虫深度。
学习爬虫前,最好对WEB开发有基本的了解,因为爬虫是WEB逆向分析,准确的说是JS逆向分析。

基础扫盲

URL

  1. URL统一资源定位符
  2. 1URL的结构
  3. https://www.baidu.com:443/login/login.php?user=123&pass=456
  4. https 使用https协议
  5. www.baidu.com:443 域名:端口
  6. login/login.php 资源路径
  7. ? 文件名与GET参数之间用?分隔
  8. user=123 GET方式向服务器发送一个参数名为user,值为123
  9. & 多个参数之间用&分隔
  10. 2、相对URL与绝对URL
  11. 3URL编码与解码

协议头

GET请求头

  1. //起始行 访问方式 资源路径和GET参数 协议/版本号
  2. //附加协议头的时候删掉 winhttp自动生成
  3. GET /v2/getpublickey?x=100&y=200 HTTP/1.1
  4. //主机名 域名 winhttp对象会自动生成 可以不附加
  5. Host: passport.baidu.com
  6. //用户代理 服务器可以根据这个来识别是哪个浏览器
  7. User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0
  8. //浏览器接受数据类型 winhttp对象会自动生成*/*类型 可以不附加
  9. Accept: */*
  10. //浏览器接受的语言
  11. Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
  12. //浏览器支持的编码
  13. //附加协议头的时候必须删掉 不然返回的数据是压缩过的 需要自己再解压
  14. Accept-Encoding: gzip, deflate, br
  15. //来路 GET和POST中都会出现,表示这个请求是从哪个页面发出的
  16. //可能会有会变化的值 要特别注意
  17. Referer: https://www.baidu.com/?user=123456&pwd=1212121
  18. //非常重要 单独讲解
  19. Cookie: BAIDUID=4A89DBBC382B25D9A43D12C4AB0151FD:FG=1
  20. //表示长连接 1.1版本才支持 winhttp对象自动生成 可以不附加
  21. Connection: keep-alive

POST请求头

  1. //起始行 访问方式 资源路径和GET参数 协议/版本号
  2. //附加协议头的时候删掉 winhttp自动生成
  3. POST /v2/api/?login HTTP/1.1
  4. Host: passport.baidu.com
  5. User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0
  6. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
  7. Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
  8. Accept-Encoding: gzip, deflate, br
  9. Origin: https://www.baidu.com/
  10. Referer: https://www.baidu.com/
  11. Cookie: BAIDUID=4A89DBBC382B25D9A43D12C4AB0151FD:FG=1
  12. Connection: keep-alive
  13. Upgrade-Insecure-Requests: 1
  14. //提交的数据包的长度 不能多也不能少一个字节 winhttp自动生成 可以不附加
  15. Content-Length: 22
  16. //提交数据的类型 单独讲解
  17. Content-Type: application/x-www-form-urlencoded
  18. //POST提交的数据和协议头之间有一个空行
  19. user=123456&pwd=654321

响应头

  1. 通常要注意的首部字段Set-CookieLocation
  2. 还要注意状态码

状态码

  1. 状态码为301302等有重定向时,如果你想获取当前链接的响应头或者响应数据。访问的时候要禁止重定向

协议头可以自定义

  1. 有些网站会在协议头里传递重要数据,并且一般是会变化的。如果网站检测,你就要找到来源,附加协议头提交

cookie

  1. 1cookie的分类
  2. 服务器返回 Set-Cookie
  3. JavaScript生成
  4. 2cookie的作用
  5. 识别身份(验证码)
  6. 判断是否登录状态
  7. 3cookie的结构
  8. 1=值1; 2=值2; 3=值3
  9. 4、抓包流程
  10. 论清除cookie的重要性 (博客园)
  11. 5、合并更新步骤
  12. a) cookie 去除无效cookie
  13. b) 在新cookie里,寻找是否存在旧cookie里的名字。存在就用新的,丢掉旧的
  14. c) cookie组合到一个文本型变量中
  15. 6、前端会用JS生成很多cookie,但是并非所有cookie都会检测。
  16. 比如Hm_lvt开头的一般没啥用。

编码

  1. 编码不对是中文乱码的根源,也是导致提交数据出错的重要原因
  2. 1、如何查看网页是何种编码
  3. <meta charset="UTF-8" />
  4. 这只是告诉浏览器以何种方式解析文档 真正决定网页编码的是在文件保存的时候
  5. 2GBK GB2312 ANSI UTF8
  6. 3URL编码与解码(UTF8)
  7. 4、不要用 编码_URL解码 来转换response
  8. 5U \u6ce8\u518c\u6210\u529f (JS混淆)
  9. 6、十六进制文本 65797579616e \x65\x79\x75\x79\x61\x6e (JS混淆)
  10. 7Base64
  11. 所有的数据都能被编码为只用65个字符就能表示的文本。
  12. 65字符:A~Z a~z 0~9 + / =
  13. Base64的应用
  14. 密钥 密文 图片 普通数据(新浪账号)
  15. Base64编码解码与btoaatob

跨域

  1. ajax 不能跨域
  2. submit 表单提交
  3. script 可以跨域
  4. 参数值一般在ajax或者submit