re模块与requests模块的应用

概要

  • re模块

  • 网络请求

  • requests模块(爬虫入门)


详细

  • re模块

import re
# 先定义一个待匹配文本
s = "eva Leo Gundam Leo yuan Leo Leo aabbuudd"
# 常用方法
1.findall(正则表达式,待匹配文本) 
res = re.findall('L.*?o',s)
返回所有满足匹配条件的结果,放在列表中

 

# 补充
() 分组可优先展示,取消则在括号头加 ?:
res1 = re.findall('www.(oldboy).com', 'www.oldboy.com')
ret2 = re.findall('www.(?:oldboy).com', 'www.oldboy.com')

2.finditer(正则表达式,待匹配文本)
res = re.finditer('L.*?o',s)
返回一个迭代器,主动向其索要数据即可产生,否则只占用一块名称空间

 

3.match(正则表达式,待匹配文本)
res = re.match('L.*?o',s)
res = re.match('e.*?o',s)
只能从头开始匹配文本,文本头部不符合就停止匹配并返回空

4.search(正则表达式,待匹配文本)
res = search('L.*?o',s)
只匹配一个符合正则的数据,匹配到就停止

  • 网络请求

网络请求的方法有八种,现阶段需要掌握两种。

1.get请求

向服务器索要数据(eg:浏览器输入网址然后回车)
get请求可以携带额外数据,大小限制2~4KB,数据以K:V键值对的形式写在网络地址后
    格式:url?xxx=ccc&vvv=bbb

2.post请求

向服务器提交数据(eg:用户注册/登录时输入用户名或密码后点击提交)
post请求可以携带额外数据,大小无限制,一般用于敏感数据数据放在请求体中
    格式:Form Data中的数据

3.HTTP协议

不同网站的数据具有不同的格式,而浏览器为何能够访问多种网站?

# HTTP协议统一了浏览器与服务端之间交互数据的方式
1.四大特性
    (1)基于请求响应
        服务端不会主动向客户端发送请求,只会被动接受请求
    (2)基于TCP/IP作用于应用层之上的协议
    (3)无状态
        不保存客户端的状态,每个请求均是相互独立的
    (4)无连接
        不会占用过多资源
        限制每次连接只处理一个请求,收到客户端请求处理完响应并收到客户端的应答后即断开连接
2.数据请求格式
    请求数据
        请求首行(方法、地址等)
        请求头(由K:V键值对携带的信息)
        
        请求体(get请求:无  post请求:用于携带敏感数据)
    响应数据
        响应首行(状态码、协议版本等)
        响应头(由K:V键值对携带的信息)
        
        响应体(浏览器展现给用户的数据)
3.响应状态码
    简单的数字表示各种响应状态
    1XX:服务器成功接收到数据,正在处理,可继续提交或者等待
    2XX:常见的如200,请求成功,服务器成功响应
    3XX:重定向(某些条件下点击跳转到另外的界面,如淘宝未登录点击商品)
    4XX:403:请求不符合条件(权限不够);404:请求资源不存在
    5XX:服务器内部错误,与客户端无关
"""状态码可以自定义,http协议自带的太少"""
自定义状态码一般由10000开始,网站如聚合数据

  • requests模块(爬虫入门)

# requests模块是第三方模块,需要下载 
pip3 install requests
# 引入该模块
import requests
该模块可用于发送网络请求
requests.get(url)     # 发送get请求
requests.post(url)    # 发送post请求
"""使用"""
# 简单的get请求获取页面
1.发送请求
res = requests.get('https://www.bilibili.com/')
print(res.status_code)  # 获取响应状态码
print(res.text)         # 获取网页字符串数据
print(res.content)      # 获取页面二进制数据
2.指定字符编码
res.encoding = 'UTF-8'
3.将页面数据写入文件
with open(r'bilibili.html', 'wb') as f:
        f.write(res.content)

# 携带参数的get请求获取页面 
requests.get(url,params={'参数键':'参数值'})
eg:
res = requests.get('https://www.baidu.com/s',
                   params={
                      'wd': '奥特曼'
                   }) # 获取失败
res = requests.get('https://search.bilibili.com/all',
                   params={
                      'keyword': '奥特曼'
                   }) # 获取成功

# 携带请求头数据的get请求获取页面
requests.get(url,headers={'请求头键':'请求头值'})
eg:
res = requests.get('https://www.baidu.com/s',
                   params={
                       'wd': '奥特曼'
                   },
                   headers={
                       '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'
                   })

防爬措施

# 最基础的
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
    措施:在请求头中加上该键值对
        requests.get(url,headers={...})
posted @ 2021-09-15 16:16  Leguan001  阅读(138)  评论(0)    收藏  举报