re模块
import re

s = 
"eva jason tony yuan 
    jason jason
        jason a"
# res = re.findall('j.*?n', s)  # 返回所有满足匹配条件的结果,放在列表里
# print(res)

findall(正则,文本数据)

在匹配的时候是全局匹配不会因为匹配到一个就停止

返回的结果是一个列表 内部包含正则匹配到的所有内容

爬虫入门操作_get请求

 

res = re.finditer('j.*?n', s)
 for i in res:
    print(i.group())

finditer (正则,文本数据)

返回的结果是一个迭代器(节省内存)只有我们主动去索要数据才会产生 否则只占据一块空间

爬虫入门操作_百度_02

 

res = re.search('j.*?n', s)
print(res)

search 匹配到一个符号的数据就结束

 

 res1 = re.match('j.*?n', s)
 print(res1)

match 只能从头开始匹配 头部不符合直接停止

 

import re
ret = re.findall('www.(oldboy).com', 'www.oldboy.com')
print(ret)

findall 分组优先展示

会优先展示括号内正则表达式匹配到的内容

 爬虫入门操作_百度_03

 

 

ret = re.findall('www.(?:oldboy).com', 'www.oldboy.com')
print(ret)

  ret = re.findall('www.(?:baidu|oldboy).com', 'www.oldboy.com')
  print(ret)

取消分组优先展示 前面加上问号和冒号

 爬虫入门操作_数据_04

 

 

爬虫模块:requests

作用

可以模拟浏览器发送网络请求以获取数据

下载

命令:pip3 install requests

切换国内仓库使其下载速度更快

pip3 install requests -i 仓库地址

导入requests模块

import requests

 

网络请求的方法

方法大约有8个现在我们需要掌握的有两个

get请求

向别人索要数据

类似于浏览器输入百度地址回车就是在发送get请求向百度的服务器索要百度的首页

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

url?xxx=yyy&mmm=nnn

post请求

向别人提交数据

用户注册登录需要输入用户名和密码之后点击按钮发送post请求将数据提交给远程服务器

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

数据放在请求体中

 

http协议(重要)

规定了浏览器与服务端之间的数据交互的方式

四大特性

1.基于请求响应

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

3.无状态     不保存客户端的状态    记忆口诀:纵使见她千百遍 我都待她如初见

4.无连接

数据请求格式

get请求数据格式

请求首行(请求方法 地址...)

请求头(一对k:v的键值对)

换行

请求体(get请求没有请求体但是post请求有里面是敏感数据)

post响应数据格式

响应首行(请求方法 地址...)

响应头(一堆K:V键值对)

换行

响应体(一般是浏览器展示给客户看的数据)

响应状态码

用简单的数字来表示中文的含义(类似于指定暗号)

1xx:服务端已经收到了我们的数据正在处理 可以继续提交或者等待

2xx:200 表示ok     请求成功了服务端给我们的响应

3xx:重定向(原本想访问A页面但是内部自动跳转到了B页面)(我现在要买个东西准备下单了但是直接跳转到了用户登录的界面)

4xx:403请求不符合条件        404请求的资源不存在

5xx:服务器内部错误

 

公司还会自己定义响应状态码(http自带的状态码太少)

参考网站:聚合数据

 爬虫入门操作_百度_05

 

 

requests模块的基本使用方法

发送网络请求

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

简单地get请求获取页面并报错

import requests
     朝百度发送get请求获取首页数据
    res = requests.get('https://www.baidu.com/')
     print(res.status_code)   获取响应状态码
     指定字符编码
     res.encoding = 'utf8'
     print(res.text)   获取网页字符串数据
     print(res.content)   获取bytes类型的数据(在python中可以直接看成是二进制)
    with open(r'baidu.html', 'wb') as f:
        f.write(res.content)

爬虫入门操作_post请求_06

 

 

携带参数的get请求

requests.get(url,params={})

 

如何携带请求头数据

requests.get(url,headers={})

 

防爬的措施

校验当前的请求是否是浏览器发出的

校验的核心在于请求头里面的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={...})

可以先定义一个请求头headers

 爬虫入门操作_百度_07