爬虫

  • 爬虫:就是抓取网页数据的程序。
  • 搜索引擎: 百度,谷歌
  • 反爬虫和反反爬虫。
  • 只要人能看到的,爬虫都可以获取, 反爬虫一定是爬虫胜利。

网络请求与响应

  • 网络协议
  • HTTP : 超文本标记语言
  • HTTP协议(Protocol) 是一种发布和接收 HTML页面的方法。
  • HTTPS(Hypertext Transfer Protocol over Secure Socket Layer)简单讲是HTTP的安全版,在HTTP下加入SSL层。
  • SSL 安全套接(Socket)层
  • HTTP 端口号: 80
  • HTTPS 端口号: 443
  • FTP SFTP : 21 22
  • Mysql 3306
  • Fiddler 8888

HTTP通信

  • 网址(域名) -》 DNS服务器 (网址与IP地址的映射)-》 IPv4地址 (283.22.11.33)。
  • 由两部分组成: 客户端请求消息 与 服务器响应消息
  • URL : 统一资源定位符
  • 本格式:scheme://host[:port#]/path/…/[?query-string][#anchor]
    scheme:协议(例如:http, https, ftp)
    host:主机名, 服务器的IP地址或者域名
    port#:服务器的端口(如果是走协议默认端口,缺省端口80)
    path:访问资源的路径
    query-string:参数,发送给http服务器的数据
    anchor:锚点(跳转到网页的指定锚点位置)

 

HTTP请求报文

  • http 报文结构
  • 请求方法:
  • GET方法
  • POST方法
  • Connection:表示客户端与服务连接类型 keep-alive在很多情况下能够重用连接,减少资源消耗,缩短响应时间,比如当浏览器需要多个文件时(比如一个HTML文件和相关的图形文件),不需要每次都去请求建立连接。
  • Upgrade-Insecure-Requests: 升级为HTTPS请求
    Upgrade-Insecure-Requests:升级不安全的请求,意思是会在加载 http 资源时自动替换成 https 请求,让浏览器不再显示https页面中的http请求警报。
  • 用户代理(客户端浏览器的名称): ******
  • User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36
  • Accept : 传输文件类型
  • Referer : 页面跳转处 表明产生请求的网页来自于哪个URL,用户是从该 Referer页面访问到当前请求的页面。这个属性可以用来跟踪Web请求来自哪个页面,是从什么网站来的等。
  • Accept-Encoding(文件编解码格式)
  • Accept-Language(语言种类)
  • Accept-Charset(字符编码)
  • Cookie:浏览器用这个属性向服务器发送Cookie。Cookie是在浏览器中寄存的小型数据体,
  • Content-Type : POST请求里用来表示的内容类型。

HTTP 响应报文

  • 响应状态码
    响应状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值。
    常见状态码:
    100~199:表示服务器成功接收部分请求,要求客户端继续提交其余请求才能完成整个处理过程。
    200~299:表示服务器成功接收请求并已完成整个处理过程。常用200(OK 请求成功)。
    300~399:为完成请求,客户需进一步细化请求。例如:请求的资源已经移动一个新地址、常用302(所请求的页面已经临时转移至新的url)、307和304(使用缓存资源)。
    400~499:客户端的请求有错误,常用404(服务器无法找到被请求的页面)、403(服务器拒绝访问,权限不够)。
    500~599:服务器端出现错误,常用500(请求未完成。服务器遇到不可预知的情况)。
  • Cache-Control / Pragma : 服务端希不希望客户端缓存资源,在下次请求资源时,必须要从新请求服务器,不能从缓存副本中获取资源。
  • Connection:keep-alive
    这个字段作为回应客户端的Connection
  • Content-Encoding : 编解码格式
  • Content-Type : 接受的文件类型
  • Date : 服务端发送资源时的服务器时间
  • Expires : 过期时间 客户端在这个时间前,可以直接访问缓存副本
  • Server : 服务器的版本
  • Transfer-Encoding : 是否分块发送
  • Vary

urllib 库 原生库

  • 网络请求库 requests
  • get方法
  • url 网址
  • 请求头内容 headers {User-Agent必须加}
  • verify = False 忽略SSL安全认证
    response = requests.get(url,headers = headers, verify = False)
    print(response.content.decode(“utf8”))
  • 返回响应对象
  • response.url
  • response.text
  • response.encoding
  • with 语句:
  • with open() as f:
  • 语句

练习

  • 获取百度首页源代码,并写入到一个html文件中。
  • 获取任意关键词的百度搜索页,任意起始页和结束页。 存入到html文件中
  • 获取任意关键词的百度贴吧页,任意起始页和结束页, 存入到html文件中。