一周目,爬虫 三日

re模块与requests模块

1  re模块

1.1  re模块匹配数据的方法

方法  findall
re.findall(正则代码,查找内容)  查找所有符合的数据并将结果放再列表中
方法  finditer
re.finditer(正则代码,查找内容)  查找所有的数据,用迭代器展示,只有向迭代器索要,才会产生数据
方法  search
re.search(正则代码,查找内容)    只要查找到一个满足正则代码的数据就结束
方法  match
re.match(正则代码,查找内容)    从头开始查找,头部不符合直接结束

 1.2  分组在re模块中的运用

()在re模块中使用时,会优先展示括号内正则匹配到的内容
取消分组优先展示用?:  冒号后为正则代码
即(?:)

2  网络请求方法之get、post

2.1  get请求

  向服务器索要数据

  get请求可以携带额外的数据 但是数据量有限制最多2~4KB 并且是直接写在网址的后面

  以  url?xxx=yyy&zzz=mmm  形式存在

2.2  post请求

  向服务器提交数据 

   post请求可以携带额外的数据 并且数据大小没有限制 敏感性的数据都是由post请求携带

3  HTTP协议

3.1  HTTP协议意义

用于统一游览器与服务端之间数据交换的方式

3.2  HTTP协议四大特性

3.2.1  基于请求响应

  只有客户端主动请求才会响应,不会主动向客户端发出请求

3.2.2  TCP、IP作用于应用层上的协议

3.2.3  无状态

  回应完请求就会结束,不会保存客户端的数据

3.2.4  无连接

  客户端与服务端不会产生任何联系

3..3  数据请求格式

3.3.1请求数据格式

请求首行    ——  方法、地址等
请求头     ——  k:v键值对的信息

请求体     ——  get无请求体,post的请求体内部携带敏感数据

 3.3.2响应数据格式

响应首行      ——  响应状态码 协议版本等
响应头       ——  K:V键值对信息
        
响应体      ——  一般是给浏览器展示给用户看的数据 

3.4响应状态码

用简单的数字来表示一串中文意思(制定暗号)

1XX  :  服务端已经成功接收到了你的数据正在处理 你可以继续提交或者等待
2XX  :  200 OK请求成功服务端发送了响应
3XX  :  重定向(原本想访问A页面但是内部自动跳到了B页面)
4XX  :  403请求不符合条件 404请求资源不存在
5XX  :  服务器内部错误

此外公司会另外自定义响应状态码

4  requests模块

4.1  模块作用

  模拟游览器发生网络请求

4.2  发送网络请求

import requests
requests.get(url)     # 发送get请求
requests.post(url)    # 发送post请求

4.3  获取百度首页请求模板

import requests
# 朝百度发送get请求获取首页数据
res = requests.get('https://www.baidu.com/')
#  写入获取的数据
with open(r'baidu.html', 'wb') as f:
  f.write(res.content)

补充

res.status_code              # 获取响应状态码
res.encoding = 'utf8'        # 指定字符编码
res.text                     # 获取网页字符串数据
res.content   
# 获取bytes类型的数据(在python中可以直接看成是二进制)

4.4  发送请求,携带额外参数

方法  params={}

requests.get(url,params={})

5  防爬措施

5.1  防爬措施  

校验请求是否是游览器发出

  校验代码是请求头里面的User-Agent键值对,该键值对可以看成是游览器的身份令牌

  User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36

5.2  请求头

方法  headers={}

requests.get(url,headers={})

posted @ 2021-09-15 22:01  aa_wang  阅读(30)  评论(0)    收藏  举报