爬虫模块之requests
目录
- re模块
- 爬虫模块之requests
- 网络请求的方式
- requests模块演示

re模块
演示准备
import re s = """ eva ben tom mary ben ben ben """
演示一
res = re.findall('b.*?n',s) print(ret) """ findall(正则,文本数据) 在匹配的时候是全局匹配不会因为匹配到一个就停止 返回的结果是一个列表 内部包含正则匹配到的所有的内容 """

演示二
res = re.finditer('b.*?n',s) for i in res: print(i.group()) """ finditer(正则,文本数据) 返回的结果是一个迭代器,只有主动索要才会产生数据,否则永远只占一块空间,节省了内存空间 """

演示三
# 匹配到一个符号条件的数据就结束 res = re.search('b.*?n',s) print(res)

演示四
# 只能从头开始匹配 头部不符合直接停止 res = re.match('b.*?n',s) print(res)

分组优先级
演示准备
import re ret = re.findall('www.(baidu).com', 'www.baidu.com') print(ret)
优先展示
""" findall分组优先展示,会优先展示括号内正则表达式匹配到的内容 """ ret = re.findall('www.(baidu).com', 'www.baidu.com') print(ret)

取消分组优先展示
# 在括号内容前面加上问号和冒号 ret = re.findall('www.(?:baidu).com', 'www.baidu.com') print(ret)

爬虫模块之requests
# 作用 可以模拟浏览器发送网络请求获取数据 # 如何下载 在pycharm终端里敲写pip3 install requests 或直接快捷键操作即可 # 如何导入 import requests

网络请求方法
get请求
朝服务器索要数据
eg:浏览器地址栏输入百度网址回车其实就是在发送get请求朝百度服务器索要百度首页
补充
# get请求也可以携带额外的数据 但是数据量有限制最多2~4KB,并且是直接写在网址的后面 url?xxx=yyy&zzz=bbb

post请求
朝服务器提交数据
eg:用户注册登录需要输入用户名和密码之后点击按钮发送post请求将数据提交给远程服务器
补充
post请求也可以携带额外的数据 并且数据大小没有限制
敏感性的数据都是由post请求携带
而数据放在请求体中

HTTP协议
规定了浏览器与服务端之间数据交互的方式
四大特性
1.基于请求响应

2.基于TCP、IP作用于应用层之上的协议

3.无状态
不保存客户端的状态

4.无连接
限制每次连接只处理一个请求
服务器处理完客户的请求,并收到客户的应答后,即断开连接
数据请求格式
请求数据格式
请求首行(请求方法 地址...) 请求头(一大堆K:V键值对) # 此处换行一定不能忘 请求体(get请求没有请求体,post请求有,里面是敏感数据)
响应数据格式
响应首行(响应状态码 协议版本...) 响应头(一大堆K:V键值对) # 此处换行一定不能忘 响应体(一般都是给浏览器展示给用户看的数据)
响应状态码
用简单的数字来表示一串中文意思类似于暗号
举例
1XX——————服务端已经成功接收到了用户的数据正在处理 用户可以继续提交或者等待 2XX——————200 == OK请求成功服务端发送了响应 3XX——————重定向(原本想访问A页面但是内部自动跳到了B页面) 4XX——————403请求不符合条件 404请求资源不存在(图一) 5XX——————服务器内部错误

自定义响应状态码
因为HTTP的状态码太少不够用 所以有些公司创建了自定义响应状态码 eg: 10001————xxx 10002————yyy # 参考网址: 聚合数据

发送网络请求 import requests requests.get(url) # 发送get请求 requests.post(url) # 发送post请求
获取响应状态码
# print(res.status_code)

指定字符编码
# res.encoding = 'utf8' # print(res.text) # 获取网页字符串数据

获取bytes类型的数据
print(res.content)
获取页面
import requests res = requests.get('https://www.baidu.com/') with open(r'baidu1.html', 'wb') as f: f.write(res.content)

携带参数的get请求
requests.get(url,params={})
如何携带请求头数据
requests.get(url,headers={})
演示
import requests headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36' } res = requests.get('https://www.baidu.com/s', params={'wd':"蜘蛛侠"}, headers=headers ) with open(r'zzx.html','wb') as f: f.write(res.content)

代码版搜索引擎
import requests headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36' } keyword = input('请输入你想搜索的数据>>>:').strip() res = requests.get('https://www.baidu.com/s', params={'wd':keyword}, headers=headers ) with open(r'zzx.html','wb') as f: f.write(res.content)
防爬措施
校验当前请求是否是浏览器发出的 需请求头里面的User-Agent键值对 只要请求里面含有该键值对,就表示自己是个浏览器,没有则不是


浙公网安备 33010602011771号