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={...})

浙公网安备 33010602011771号