爬虫学习笔记 - requests

爬虫的用途

  1. 爬虫的数据为数据分析或人工智能提供服务,训练数据
  2. 为网站做数据展示
  3. 微博、贴吧等社交属性的数据,舆情分析,用于公关
  4. 金融数据(股票信息),投资决策
  5. 12306 抢票
  6. 网站上的投票
  7. 短信轰炸:找 60 个注册的网站,模拟实现让每个网站发送短信验证码,进行循环,每秒发送一个,实现短信轰炸

爬虫的概念

模拟浏览器发送请求,获取请求响应


爬虫流程

url –> 发送请求,获取响应 –> 提取数据 –> 保存 ,获取响应 –> 提取 url 地址,继续请求

pagerank 算法, 网页排名


robots 协议

限制搜索引擎爬虫爬取的数据范围,但只是道德层面的约束


http 和 HTTPS 的复习

url的形式

url的形式:scheme://host[:port#]/path/…/[?query-string][#anchor]

爬虫只能发送一次请求,浏览器发现数据不全会自己通过 ajax 进行多次请求

爬虫拿不到 js 中的内容


get 和 post 的区别:
  1. 直观的就是语义上的区别,get用于获取数据,post用于提交数据。
  2. get参数有长度限制(受限于url长度,具体的数值取决于浏览器和服务器的限制),而post无限制
  3. GET请求,请求的数据会附加在URL之后,以?分割URL和传输数据,多个参数用&连接,而POST请求会把请 求的数据放置在HTTP 请求体中。
  4. 更多资料,请查看post请求和get请求的区别

字符串编解码

python3 默认编码方式 utf-8

  1. str –> bytes encode() 编码,默认是 utf-8

  2. bytes –> str decode() 解码,默认是 utf-8


requests

resp = request.get(url)

resp.content   # bytes 数据,最原始的数据

resp.text   # 根据响应头部进行规律的推测,然后自动进行解码后的内容
resp.encodeing = 'utf-8'  # 可以自己指定编码方式

浏览器 – https 协议 --网站

爬虫 – http协议 — 网站


请求头:
  • User-Agent: 告诉服务器,访问者的身份标识
  • cookies: 保持会话
  • Referer: 页面跳转处

json 格式转换为 python 类型,不叫转换为 python 字典


代理

用户知道服务器 ip 就是正向代理 VPN 客户端被代理

用户不知道服务器 ip 就是反向代理 Nginx 服务器被代理


发送 post 请求

data = {"从浏览器中 formdata 的位置寻找"}
requests.post(url, data=data)


使用代理

网站可以根据 ip 访问的频率来判断是否是爬虫,访问太快会被屏蔽

可以使用代理

proxies = {“协议”: “协议 + ip + 端口”}
requests.get(url, proxies=proxies)

代理
Nginx

UWSGI uWSGI

u 大写是协议,小写是服务器

谷歌提供的三个论文之一:

一致性哈希 实现负载均衡


cookie

cookie 设置的时候要设置 domain=.baidu.com

Session 类用来保持 cookie


代理

  • 透明代理(Transparent Proxy):透明代理虽然可以直接“隐藏”你的IP地址,但是还是可以从HTTP_X_FORWARDED_FOR来查到你是谁。
  • 匿名代理(Anonymous Proxy):别人知道你用了代理,但是无法知道你真实 IP
  • 混淆代理(Distorting Proxies):别人还是能知道你在用代理,但是会得到一个假的 IP 地址,伪装的更逼真
  • 高匿代理(Elite proxy或High Anonymity Proxy):别人根本无法发现你是在用代理

cookie 和 session

  • cookie 有大小限制, cookie 在单个站点最多存 20 个,session 不存在限制,服务器硬盘多大就可以存多少;
  • cookie 存在客户端,不安全,session 存在服务器,安全
  • 都是用作会话保持

Flask 原生的 session 是存在客户端的,它的 session 是依赖于 cookie 中的

只不过是用 base64 进行加密 ,可逆

requests 中 Session 类

使用该类可以保持登录状态,每次请求都会带上 cookie,让爬虫更像浏览器


requests进行携带cookie登录

  • cookie字符串放在headers中
  • 把cookie字典交给requests请求方法的cookies

优先使用 headers 中的 cookie

没找到才会去用参数中的 cookies

Preserve log: 控制台按钮,持续日志

<> 尖括号括起来的是对象


寻找登录接口的方法

  • form 表单 action 对应的 url 地址
    • 用户名和密码的 input 标签中,name 的值作为键,用户名和密码作为值的字典,作为 post data
  • 通过抓包,定位 url 地址
    • form data

分析js,获取加密的数据

  • 观察变化
  • 定位js
    • 通过event listener定位js的位置
    • 通过搜索url地址中的关键字,通过chrome的search all file来进行搜索
  • 进行分析
    • 通过添加断点的方式分析js
  • 执行js
    • 完全的使用python模拟js的执行过程

requests处理ssl证书

requests.get(url,verify=False)

获取响应中的cookie,转化为字典

response = requests.get(url,headers=headers)
requests.utils.dict_from_cookiejar(response.cookies)

超时参数的使用

requests.get(url, timeout=3)

retrying 模块的使用

  • from retrying import retry
  • 通过装饰器的方式使用 retry,进行异常捕获,重新执行被装饰的函数

数据的分类

  • 结构化数据
    • json,xml
    • 直接使用模块转化为python类型
  • 非结构化数据
    • html
    • re,xpath

json模块的使用

json.loads:json字符串转化为python类型

json.dumps : python类型转化为json字符串

json.load: 包含json字符串的类文件对象转化为python类型

json.dump: 把p需求:爬取苏宁易购所有下所有图书和图书分类信息

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值