爬虫简单操作

cookies与session

cookie和session的发明是为了专门解决http协议无状态的特点

因为http协议无状态的特点导致服务端向浏览器客户端发送数据完毕之后并不会保存用户端状态

早期的网站不需要保存用户状态,所有人访问的网站都是相同的数据

随着时代的发展,越来越多的网站需要有注册登录等功能

这时候就需要cookies来保存客户端浏览器上面的键值对数据

即用户第一次登陆成功之后浏览器会保存用户名和密码

而session就是保存在服务端上面的用户相关的数据

只要涉及到用户登陆都要使用到cookie

浏览器也可以拒绝保存数据

  cookie实战

浏览器network选项中 请求体对应的关键字是Form Data

   请求体的数据格式:

username: 13585515712
password: 123456789
captcha: lsty
ref: "http://www.aa7a.cn/user.php?act=logout"
act: act_login

import requests
import json
#先提交数据请求
res=requests.post('http://www.aa7a.cn/user.php', #目标网址
                  data={"username":"530192115@qq.com", #复制请求体中的内容,以字典的形存在data中
                        "password":" qwaszx434",
                        "captcha": "lsty",
                        "ref": "http://www.aa7a.cn/",
                        "act": "act_login"})
print(res.cookies.get_dict()) #下面的操作就是为了拿到那个字符串
"""
用户名或密码错误的情况下返回的cookie数据
    {'ECS[visit_times]': '1', 'ECS_ID': '69763617dc5ff442c6ab713eb37a470886669dc2'}
用户名和密码都正确的情况下返回的cookie数据
    {
    'ECS[password]': '4a5e6ce9d1aba9de9b31abdf303bbdc2', 
    'ECS[user_id]': '61399', 
    'ECS[username]': '616564099%40qq.com', 
    'ECS[visit_times]': '1', 
    'ECS_ID': 'e18e2394d710197019304ce69b184d8969be0fbd'
    }
"""
ret=res.cookies.get_dict() #获取cookies数据 直接可以调用模块里的功能cookies.get_dict
# 用cookies访问网站
rep=requests.get('http://www.aa7a.cn/',cookies=ret)# 加入cookies请求体
if '530192115@qq.com' in rep.text:
    print('登录成功')
else:
    print('登录失败')

  获取大数据

使用stream=True一点一点的取,用于下载大型数据

import requests
response=requests.get('https://www.bilibili.com/video/BV1LK4y1W7v3/?spm_id_from=333.788.recommend_more_video.0',stream=True)
with open(r'爬视频.mp4','wb')as f:
    for line in response.iter_content():# 一行行读取内容
      f.write(line)#一行行写入 避免内存爆炸

 

 

 json格式

json格式数据最大的特点就是引号一定是双引号

在网络爬虫数据,内部很多采用的都是json格式来做交互的

前后端数据交互一般都使用的json格式

 

 

  

import requests
res=requests.get('https://api.bilibili.com/x/player/pagelist?bvid=BV1LK4y1W7v3&jsonp=jsonp')
print(res.json()) # .json 直接将json格式字符串转换成python对应的数据类型

SSL相关报错

仅针对苹果本报错 可以通过百度解决

防爬措施2 ip代理池

有些服务端针对客户端的ip地址存在防爬措施

比如一分钟请求了很多次如果超出了设定的次数,就会封禁ip地址

针对这种情况

可以搜索ip代理池

选用一些免费的ip地址选几个用上就行

import requests
proxies={
    'http':'114.99.223.131:8888',
    'http':'119.7.145.201:8080',
    'http':'175.155.142.28:8080',
}
respone=requests.get('https://www.12306.cn',
                     proxies=proxies)

其实就是对自己的ip地址进行掩饰

但是如果只使用一层ip代理池  其实还是能反追到真正的ip地址  

Cookie代理池

与ip代理池相同,针对防爬cookie 

可以自己先注册好多账号,然后放到文件里去随机选择

respone=requests.get('https://www.12306.cn',
                     cookies={})

 

posted @ 2021-09-16 15:17  查无此人cxc  阅读(67)  评论(0编辑  收藏  举报