首页 > 其他分享 >爬虫学习01

爬虫学习01

时间:2023-07-10 15:56:14浏览次数:42  
标签:--- 01 http 请求 res 爬虫 学习 ---- requests

1 扫码登录功能

# 前端
1 前端进入扫码登录页面---》向后端发送请求----》后端生成二维码图片---》显示在前端,暂存key
    
2 掏出手机,打开对应的app-----》扫描二维码----》app端提示是否登录---》当你点登录---》app能解析出这个地址----》取出你当前app登录的token----》向这个地址发送请求,携带token和key
	-后端有个 携带唯一随机字符串请求登录的接口
	-后端接口:拿到请求传入的唯一字符串,解析出当前用户----》签发token----》找个地方存着
    
3 网站上,开启了定时任务,不停的向后端发送请求----》根据key查询有没有签发token
-一旦发现没有,过一会在发,5分钟以后就不做了
-如果有直接带回来,token,username---》登录成功了
    
    
    
# 后端接口
-1 生成二维码接口【放了个链接地址,里面包含唯一随机字符串key】
-2 扫码登录接口,取出用户的token,认证---》根据当前用户签发token---》放在某个位置待命---{key:token}
-3 根据key查询是否签发token的接口
    
    
# 前端
-二维码页面
-定时任务

2 爬虫介绍

#  爬虫:又称网络蜘蛛,spider,一堆程序,从互联网中抓取数据----》数据清洗---->入库


# 爬虫需要掌握的知识
-抓取数据:发送网络请求(http),获得http响应(http响应里有响应头,响应体---》真正重要的数据在响应体中)
-python模块:requests,selenium
        
-清洗数据:解析拿回来的数据---》json,xml,html,二进制

-json解析,xml解析。。。
-python模块:re,json,beautifulsoup4(bs4),lxml,selenium
        
-入库:存文件,存mysql,redis,mongodb
-python模块:file,pymsql,redis-py,pymongo


# 反扒
-频率限制
-封ip(代理池,隐藏真实ip),封账号(一堆小号:cookie池)
-请求头中带加密信息,referer,user-agent。。。
-响应回来的数据是加密
-验证码反扒(破解验证码---》第三方平台)
-请求头中js加密---》压缩---》加密方法其实在前端能看到---》看上去很晦涩
-手机设备:唯一id号

    
# 搜索引擎都是大爬虫
-百度输入框搜索---》美女---》去百度的数据库搜索----》显示在页面上
-百度一刻不停的在互联网中爬网页,爬完存到它的数据库
-seo优化:免费排中,排靠前
-sem优化:搜出来的靠前的,带广告的是花钱的,买断关键词
        
# 爬虫协议 robot.txt
每个网站都会有爬虫协议,规定了哪些可以爬,哪些不能爬
        
# 爬虫:可见即可爬;爬看不到的就是黑客攻击

JSON 示例

{
  "name": "John Doe",
  "age": 30,
  "city": "New York"
}


JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式,用于存储和传输结构化数据。它基于键值对的格式,易于理解和生成,常用于网络通信和数据存储。JSON 使用人类可读的文本表示,但同时也易于解析和生成。

XML 示例

<person>
  <name>John Doe</name>
  <age>30</age>
  <city>New York</city>
</person>


XML (eXtensible Markup Language) 是一种可扩展的标记语言,用于表示和传输结构化数据。XML 的结构由用户自定义,通过使用标签来定义数据的层次结构和语义。XML 具有良好的跨平台兼容性,但相对于 JSON 来说,它的语法更为繁琐和冗长。

HTML 示例

<!DOCTYPE html>
<html>
<head>
  <title>Example Page</title>
</head>
<body>
  <h1>Welcome to my page</h1>
  <p>This is an example HTML page.</p>
</body>
</html>


HTML (Hypertext Markup Language) 是一种用于创建网页的标记语言。HTML 使用标签来描述页面上的元素和结构,并通过标签间的嵌套关系进行层次组织。HTML 对于网页的布局、文本、图片、表格等元素都有相应的标签和属性来描述。

二进制格式示例

例如,图像文件可以是二进制格式的示例


二进制格式是一种使用二进制编码的数据格式,与文本格式不同,它不直接使用可读的字符表示数据。二进制格式通常用于存储和传输非文本数据,如图像、音频、视频等。在二进制格式中,数据以二进制位的形式进行编码,并且需要特定的解析器才能正确解析和处理二进制数据。

长链转短链

# 长链 https://www.cnblogs.com/liuqingzheng/p/16005866.html
		-转短链服务(申请短域名:  m.tb.cn):
		-生成随机字符串:9QqPdHKXc2n
        id   随机字符串   真正地址
        1    9QqPdHKXc2n   ...
		-这个地址返回给你:https://m.tb.cn/h.5bZAfFS?tk=9QqPdHKXc2n
        
		-用户拿着短地址访问----》https://m.tb.cn/h.5bZAfFS?tk=9QqPdHKXc2n---》访问短链服务
		-取出:9QqPdHKXc2n  去数据库一查---》真正地址:...
		-重定向到真正地址实现了跳转

3 requests模块介绍和快速使用

# requests是模拟发送http请求的模块,python界常用模块,不仅仅可以做爬虫,还可以向其他服务发送http请求
-作者致力于封装更好用的代码,requests封装了python内置模块urllib
-requests-html:requests+lxml 爬取加解析合二为一
-不仅仅可以做爬虫
-后端服务,请求别人服务
    
    
# pip3 install requests


###1 使用requests发送get请求
import requests
# res 响应对象,http响应,python包装成了对象,响应头,响应头。。。在res中都会有
res=requests.get('https://www.cnblogs.com/liuqingzheng/p/16005866.html')
print(res.text) # 响应体转成字符串

4 get请求携带参数

#  直接拼接res=requests.get('https://www.cnblogs.com/liuqingzheng/p/16005866.html/?name=lqz&age=19')
等同于下面,参数params写成字典
# 使用params字典res=requests.get('https://www.cnblogs.com/liuqingzheng/p/16005866.html/',params={'name':"lqz",'age':19})

# print(res.text) # 响应体转成字符串
# print(res.url)  #https://www.cnblogs.com/liuqingzheng/p/16005866.html?name=lqz&age=19

5 url的编码和解码

# res=requests.get('https://www.baidu.com/s?wd=%E5%B8%85%E5%93%A5')
from urllib.parse import quote,unquote
print(unquote('%E5%B8%85%E5%93%A5'))
print(quote("帅哥"))  # %E5%B8%85%E5%93%A5

6 携带请求头

# 发送get请求,有的网站拿不到数据,是模拟得不像,请求头数据没有携带
# 请求头:1、User-agent 客户端类型 2、referer 上一个页面地址(图片防盗链、登陆限制) 3、cookie等等
header={
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
}

res=requests.get('https://dig.chouti.com/',headers=header)
print(res.text)

7 发送post请求,携带数据

# post请求一般是登陆
header = {
    'Referer': 'http://www.aa7a.cn/user.php?&ref=http%3A%2F%2Fwww.aa7a.cn%2F',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
}

data = {
    'username': '[email protected]',
    'password': 'lqz123',
    'captcha': 'xxxx',
    'remember': 1,
    'ref': ' http://www.aa7a.cn/',
    'act': 'act_login'
}
# data,json请求体的数据
# 编码方式是 urlencoded
res = requests.post('http://www.aa7a.cn/user.php', data=data, headers=header)
# 编码是json格式
res = requests.post('http://www.aa7a.cn/user.php',json=data,headers=header)
print(res.text)

8 携带cookie两种方式

## 方式二:使用cookie参数
# cookie = res.cookies # cookiejar对象,用起来和字典一样
# print(cookie)
# res1 = requests.get('http://www.aa7a.cn/',cookies=cookie)
# print('[email protected]' in res1.text)


# 方式一:携带在请求头中
header = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36',
    'Cookie':'deviceId=web.eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJqaWQiOiI3MzAyZDQ5Yy1mMmUwLTRkZGItOTZlZi1hZGFmZTkwMDBhMTEiLCJleHBpcmUiOiIxNjYxNjU0MjYwNDk4In0.4Y4LLlAEWzBuPRK2_z7mBqz4Tw5h1WeqibvkBG6GM3I; __snaker__id=ozS67xizRqJGq819; YD00000980905869%3AWM_TID=M%2BzgJgGYDW5FVFVAVQbFGXQ654xCRHj8; _9755xjdesxxd_=32; Hm_lvt_03b2668f8e8699e91d479d62bc7630f1=1688616419; YD00000980905869%3AWM_NI=KpVsBKpke6xW0Ozhu07T2FswNWgn4UaBQdTBY7Z6X6f6CbQtBNZDQJ94vZ3PUgbkpIvoPsM5PprPUE2dtyRVhLPXd2cjrMI7MRtbiJtL2lJGNgPkbgbKwARmuFZz5K2JRDE%3D; YD00000980905869%3AWM_NIKE=9ca17ae2e6ffcda170e2e6eeabc744f4aefca3f03d89e78ab7d54a878e9fb1d468f4b28c83cc5383928daced2af0fea7c3b92a89b09a94c141b4b5abd7fb5df491b689f83cf58cfea7f27d8e89a98fb75fa39e9f85d74a9be996d7db3ea6ea8d83d480829296a5d442fbecbabbb25c97b9ae8cf343b6b1a094d03f94b0beb1d84ff2bcbc9ad15eac94a0b9e73aa1b6beaecc3d8f8ebc83ec42b894fe8dc94d8eb9a08ce16da295b9a2d167b79a969bb841f2969ea5c837e2a3; gdxidpyhxdE=8v%5CAccgIfMa0JDz9H9Ptnc%5Cc3owLo0EZ2IiWyPHAKTiu67%2BrKDu4bwfw5Wcy5as25LX3%2FpCICt2Gdf4%5CJ1WmqzAmbQaTarBZsdITdIu021%5C7VhnnOlNgw%2FcwwB5gYpzyegJoffKg6r2DfKJKKP%2FLokWEI0auXpasnO8CAetcf5ijccoZ%3A1688618634928; token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJqaWQiOiJjZHVfNTMyMDcwNzg0NjAiLCJleHBpcmUiOiIxNjkxMjA5NzM4NjA1In0.SZmVRy5HxKkmNTDCSQ5LEX-fkx3KyH0_jt0Wi-GEnLE; Hm_lpvt_03b2668f8e8699e91d479d62bc7630f1=1688617739',
}
data = {
    'linkId': '39196098'
}
res = requests.post('https://dig.chouti.com/link/vote', headers=header,data=data)
print(res.text)

标签:---,01,http,请求,res,爬虫,学习,----,requests
From: https://www.cnblogs.com/10086upup/p/17541396.html

相关文章

  • 007 学习笔记--约束 + 多表查询
    约束:是作用于表中字段上的规则,用于限制存储在标中的数据;其目的,是保证数据库中的数据的正确、有效和完整性;约束分类:--约束createtableifnotexistsusers( idintPRIMARYkeyauto_incrementCOMMENT'主键', nameVARCHAR(100)notnulluniqueCOMMENT'姓名',--......
  • Cesium学习笔记3——加载topojson和Geojson
    在根目录下新建bucket.css@import"../Build/CesiumUnminified/Widgets/widgets.css";@import"../Build/CesiumUnminified/Widgets/lighter.css";html{height:100%}body{background:#000;color:#eee;font-family:sans-serif;font-size:9pt;padding:0;margin:0;w......
  • Cesium学习笔记4——几何体绘制
    引用:Sandcastle-header.js<!DOCTYPEhtml><htmllang="en"><head><metacharset="utf-8"/><metahttp-equiv="X-UA-Compatible"content="IE=edge"/><metaname="......
  • Transformer学习笔记
    09Transformer之什么是注意力机制(Attention)@水导ELMo原理解析及简单上手使用@知乎ELMo可以解决多义词的词向量,基于LSTM,基础是LSTM和RNN。......
  • CF1601F Two Sorts 题解--zhengjun
    link这里提供一种不用meetinmiddle的方法,速度比较可观。发现性质开始简单的推一下式子。\(\sum(i-a_i)\bmodp=\sum(rk_i-i-p\times\lfloor\frac{rk_i-i}{p}\rfloor)=-p\times\sum\lfloor\frac{rk_i-i}{p}\rfloor,p=998244353\)于是,只需求出\(\sum\lfloor\frac{rk_i-......
  • 「学习笔记」Lambda 表达式
    Lambda表达式因数学中的\(\lambda\)演算得名,直接对应于其中的lambda抽象.Lambda表达式能够捕获作用域中的变量的无名函数对象,我们可以将其理解为一个匿名的内联函数,可以用来替换独立函数或者函数对象,从而使代码更可读.但是从本质上来讲,Lambda表达式只是一种语......
  • 强化学习算法,DDPG算法,在simulink或MATLAB中编写强化学习算法,基于强化学习的自适应pid,
    强化学习算法,DDPG算法,在simulink或MATLAB中编写强化学习算法,基于强化学习的自适应pid,基于强化学习的模型预测控制算法,基于RL的MPC,Reinforcementlearning工具箱,具体例子的编程。根据需求进行算法定制:1.强化学习DDPG与控制算法MPC,鲁棒控制,PID,ADRC的结合。2.基于强化学习DDPG的机械......
  • 基于遗传算法优化极限学习机(GA-ELM)的数据回归预测 matlab代码
    基于遗传算法优化极限学习机(GA-ELM)的数据回归预测matlab代码ID:1429644161581402......
  • 学习笔记407—读者们的福音,Z-Library又双叒回归了!
    读者们的福音,Z-Library又双叒回归了!而且还支持桌面客户端。1、官网链接:https://zh.go-to-zlibrary.se/#useful_link_tab2、网页入口:https://singlelogin.se/ 意在交流学习,欢迎点赞评论......
  • 莫队学习笔记
    这是一篇模仿算导的学习笔记/题解。例题:P1494给定一个长为\(n\)的数组\(a\)和\(m\)个询问(有序数对)\(b_i=(l_i,r_i)\),询问允许离线,对每个询问\((l,r)\)求出满足\(l\lei\ltj\ltr\wedgea_i=a_j\)的数对\((i,j)\)数量.证明:若数\(x\)在\(a\)数组下标为......