爬虫的概念
- 模拟客户端发送网络请求 获取响应 按照规则提取数据的程序
浏览器请求
- url
- 在chrome -- 点检查 -- 点network
- url = 请求协议+网站域名+资源的路径+参数
- 浏览器请求url地址
- 当前url对应的响应+js+css+图片 ------> elements中的内容
- 爬虫请求url地址
- 当前的url对应的响应
- elements的内容和爬虫获取的url地址响应不同,爬虫需要以当前url地址对应的响应为准提取数据
- 当前URL地址对应的响应在
- 从network中找到当前url地址 点击response
- 页面右键显示网页源码
HTTP HTTPS
-
HTTP:超文本传输协议
- 明文形式传输
- 效率更高,但不安全
-
HTTPS: HTTP+ SSL(安全套接字层)
- 传输前数据先加密, 之后解密获取内容
- 效率较低,但是安全
-
HTTP协议及请求
-
General - 请求参数
- url地址
- 请求方式
- 状态码
-
Response Headers - 响应头
-
Request Headers - 请求头
-
点 View source
请求行 -- get -请求方式
-
get请求和post请求的区别
-
get请求没有请求体, post有,get请求把数据放到url地址中
- post请求常用与登陆注册
- post请求携带的数据量比get请求大,多,常用语传输打文本的时候
-
请求头
-
User-Agent: 用户代理: 对方服务器可以通过user_agent知道当前请求对方资源的是什么浏览器
若果我们需要模拟手机版浏览器发送请求 ,对应的就需要把user_agent改成手机版
-
Cookie: 用于存储用户信息,每次请求携带上发送给对方浏览器
- 要获取登陆后才能访问的页面
- 对方服务器回通过cookie判断我们是不是一个爬虫
- name ----- value
-
-
请求体
- 携带数据
- get请求没有请求体
- post有请求体
-
-
HTTP协议--响应
-
-
响应头
Set-Cookie: 对方服务通过该字段设置cookie到本地
-
-
-
响应体
url地址对应的响应
-
-
-
Query String Parameters - 请求参数
-
requests模块
-
安装 --- pip install requests
-
发送get post请求 获取响应
- response = requests.get(url) # 发送get请求, 请求url对应的响应
- response = requests.post(url, data = {请求题的字典}) ## 发送post请求, 请求的url地址对应的响应
-
response的方法
- response.text
- 该方式常出现乱码, 原因是编码解码方式不一样,出现乱码使用response.encoding = "utf-8"
- response.content.decode()
- 把响应的二进制字节流转化为str类型
- response.request.url # 发送请求的url地址
- response.url # response响应的url地址
- response.requset.headers #请求头
- response.headers # 响应头
- response.text
-
获取网页源码的正确打开方式(一定可以获取到)
- response.content.decode()
- response.content.decode(“gbk”)
- response.text
- 直接使用response.content.decode()获取,获取不到的话使用response.content.decode(“gbk”)国标码尝试,如果都获取不到response.text一定可以拿到
-
发送带header的请求
headers = {"User-Agent":" Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1" "Referer":" https://fanyi.baidu.com/?aldtype=16047"} response = sequests.get(url, headers=headers)- 当请求网页发现带一个键值对依然不可以请求成功,可以尝试带更多的键值对,这是根据对方服务器的一个判断进行尝试,可以把除了cookie的全部键值对都带这进行尝试,如果依然不可以,把cookie也带着请求 ---- 大部分情况User-Agent足以
-
使用超时参数
- requests.get(url, headers=headers, timeout=3)
- timeout=3 --- 3秒内必须返回响应,否则回报错
- requests.get(url, headers=headers, timeout=3)
支付宝
微信