爬虫
- 爬虫:就是抓取网页数据的程序。
- 搜索引擎: 百度,谷歌
- 反爬虫和反反爬虫。
- 只要人能看到的,爬虫都可以获取, 反爬虫一定是爬虫胜利。
网络请求与响应
- 网络协议
- 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文件中。