首页 > 其他分享 >爬虫01

爬虫01

时间:2023-03-15 18:44:20浏览次数:35  
标签:01 http get res 爬虫 cookie print requests

目录

1 爬虫介绍

# 爬虫是什么
	-爬虫就是程序---> 从互联网中,各个网站上,爬取数据[你能浏览的页面才能爬],做数据清洗,入库
    
    
# 爬虫的本质
	-模拟方式http请求, 获取数据----> 入库
    	-网站
        -app:抓包
        
# 补充:百度其实就是一个大爬虫
	-百度爬虫一刻不停的在互联网中爬取各个页面---> 爬取完后---> 保存到自己的数据库中
    -你在百度搜索框中搜索--> 百度自己的数据库查询关键字---> 返回回来
    - 点击某个页面----> 跳转到真正的地址上
    -seo:
    -sem: 充钱的
       
   
#  我们学习的
	-模拟发送http请求
    	- requests模块
        - selenium
        - 反扒 : 封ip:ip代理,封账号:cookie池
     -解析数据: bs4
     -入库: mysql, redis, 文件中
    
    
     -爬虫框架:  scrapy

2 requests 模块介绍

# 使用Pythonr如何发送http请求
# 模块: requests模块,封装了python内置模块urlib
	使用requests可以模拟浏览器的请求(http),比起之前用到的urlib,requests模块的api更加便捷(本质就是封装了urllib3)
    
 # 安装
pip3 install requests

3 requests发送get请求

import requests
#
# res = requests.get('https://www.cnblogs.com/liuqingzheng/p/16005866.html')
# print(res.text)


# 如果有的网站,发送请求,不返回数据,人家做了反扒-->拿不到数据,学习如何反扒
# res = requests.get('https://dig.chouti.com/')
# print(res.text)

4 request携带参数

import requests

# 方式一: 直接拼接到路径中
res = requests.get('https://www.cnblogs.com/liuqingzheng/p/16005866.html?name=lqz&age=19')
# 方式二:使用params参数
res = requests.get('https://www.cnblogs.com/liuqingzheng/p/16005866.html',params={'name':"lqz",'age':19})
# print(res.text)
print(res.url)

5 url编码解码

import requests
from urllib.parse import quote,unquote
# res = requests.get('https://www.cnblogs.com/liuqingzheng/p/16005866.html',params={'name':"彭于晏",'age':19})
# # print(res.text)
#
# # 如果是中文,在地址栏中会做url的编码:彭于晏:%E5%BD%AD%E4%BA%8E%E6%99%8F
# print(res.url)
# 'https://www.baidu.com/s?wd=%E5%B8%85%E5%93%A5'


# 编码:
# res=quote('彭于晏')
# print(res)

# 解码
res=unquote('%E5%BD%AD%E4%BA%8E%E6%99%8F')
print(res)

6 携带请求头

# 反扒措施之一,就是请求头


# http请求中, 请求头中有一个很重要的参数 User_Agent
	-表明了客户端类型是什么:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36
    -如果没有带这个请求头,后端就禁止
    -request发送请求,没有携带该参数,所以有的网站就禁止了 

   
import requests
# http请求头: User-Agent,cookie, Connection

# http协议版本之间的区别
# Connection: keep-alive
# http协议有版本  主流1.1   0.9  2.x
# http 基于TCP 如果简历了一个http连接---> 底层创建了一个tcp连接
# 1.1 比之前多了 keep-alive
# 2.x比1.x多了 多路复用
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36'
}
res = requests.get('https://dig.chouti.com/',headers=headers)
print(res.texty)

7 发送post请求,携带数据

import requests

# 携带登录信息 携带cookie
headers = {
   	'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36',
    'Cookie': ''
}
# post请求,携带参数
data = {
    'linkId': '38063872'
}
res = requests.post('https://dig.chouti.com/link/vote',headers=headers,data=data)
print(res.text)

# 双token认证

8 自动登录,携带cookie的两种方式

# 登录功能, 一般都是post

import requests

data = {
    'username': '',
    'password': '',
    'captcha': '3456',
    'remember': 1,
    'ref': 'http://www.aa7a.cn/',
    'act': 'act_login'
}

res = requests.post('http://www.aa7a.cn/user.php',data=data)
print(res.text)
# 响应中会有登录成功的的cookie,
print(res.cookies)  # RequestsCookieJar 跟字典一样
# 拿着这个cookie,发请求,就是登录状态


# 访问首页,get请求,携带cookie,首页返回的数据一定会有 账号
# 携带cookie的两种方式  方式一是字符串,方式二是字典或CookieJar对象
# 方式二:放到cookie参数中
res1=requests.get('http://www.aa7a.cn/',cookies=res.cookies)

print('[email protected]' in res1.text)

9 requests.session的使用

# 为了保持cookie 以后不需要携带cookie

import requests

data = {
    'username': '',
    'password': '',
    'captcha': '3456',
    'remember': 1,
    'ref': 'http://www.aa7a.cn/',
    'act': 'act_login'
}

session = requests.session()
res = session.post('http://www.aa7a.cn/user.php',data=data)
print(res.text)
res1 = session.get('http://www.aa7a.cn/')  # 自动保持登录状态,自动携带cookie

print('[email protected]' in res1.text)

10 补充post请求携带数据编码格式

import requests

# data对应字典,这样写,编码方式是urlencoded
requests.post(url='xxxxxxxx',data={'xxx':'yyy'})
# json对应字典,这样写,编码方式是json格式
requests.post(url='xxxxxxxx',json={'xxx':'yyy'})
# 终极方案, 编码就是json格式
requests.post(url='',
             data={'':1,},
             headers={
                 'content-type':'application/json'
             })

11 响应Response对象

# Response相应对象的属性和方法
import requests
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36'
}
respone=requests.get('http://www.jianshu.com',headers=headers)
# respone属性
print(respone.text) # 响应体转成了字符串
print(respone.content) # 响应体的二进制内容
 
print(respone.status_code) # 响应状态码
print(respone.headers)   # 响应头
print(respone.cookies)  # cookie是在响应头,cookie很重要,它单独做成了一个属性
print(respone.cookies.get_dict()) # cookieJar对象---》转成字段
print(respone.cookies.items())  # cookie的键值对

print(respone.url)    # 请求地址
print(respone.history) # 不用关注

print(respone.encoding)  # 响应编码格式

12 编码问题

# 有的网站,打印
res.text --->发现乱码---》请求回来的二进制---》转成了字符串---》默认用utf8转---》
response.encoding='gbk'
再打印res.text它就用gbk转码

13 下载图片,视频

import requests

# res=requests.get('http://pic.imeitou.com/uploads/allimg/230224/7-230224151210-50.jpg')
# # print(res.content)
# with open('美女.jpg','wb') as f:
#     f.write(res.content)
#


res=requests.get('https://vd3.bdstatic.com/mda-pcdcan8afhy74yuq/sc/cae_h264/1678783682675497768/mda-pcdcan8afhy74yuq.mp4')
with open('致命诱惑.mp4','wb') as f:
    for line in res.iter_content():
        f.write(line)

标签:01,http,get,res,爬虫,cookie,print,requests
From: https://www.cnblogs.com/wei0919/p/17219603.html

相关文章

  • 【题解】P6667 [清华集训2016] 如何优雅地求和
    orzfjy666orzfjy666orzfjy666神·fjy666·拉普拉斯·爱因斯坦大帝于5min内爆切了此题,膜拜!思路斯特林数。注意到\(f(k)\)是多项式而式子中含有组合数,于......
  • 爬虫-requests
    1.爬虫介绍爬虫就是程序从互联网中各个网站上爬取数据(只能爬区我们能看到的数据),然后进行数据清洗(筛选),入库。爬虫的本质:模拟http请求,获取数据,入库。百度就是一个大......
  • 爬虫介绍
    爬虫介绍爬虫是什么? -爬虫就是程序---》从互联网中,各个网站上,爬取数据[你能浏览的页面才能爬],做数据清晰爬虫的本质 -模拟http请求,获取数据---》入库 -网站 -......
  • 爬虫介绍、requests模块发送get请求、get请求携带参数、携带请求头、携带cookie、发送
    目录今日内容1爬虫介绍2requests模块发送get请求3get请求携带参数4携带请求头5携带cookie6发送post请求7响应Response8获取二进制数据9解析json#期终架构 -后......
  • 201.数字范围按位与
    数字范围按位与给你两个整数left和right,表示区间[left,right],返回此区间内所有数字按位与的结果(包含left、right端点)。示例1:输入:left=5,right=7输......
  • day15 打卡102. 二叉树的层序遍历 226.翻转二叉树 101.对称二叉树 2
    day15打卡102.二叉树的层序遍历226.翻转二叉树101.对称二叉树2102.二叉树的层序遍历102题目链接1.使用队列classSolution{publicList<List<Integer>>le......
  • 20201315《网络对抗技术》Exp1
    目录1逆向及Bof基础实践说明1.1NOP,JNE,JE,JMP,CMP汇编指令的机器码2直接修改程序机器指令,改变程序执行流程3通过构造输入参数,造成BOF攻击,改变程序执行流3.1反汇......
  • 20201306 Ep1 逆向及Bof基础实践
    1逆向及Bof基础实践说明1.1实践目标本次实践的对象是一个名为pwn1的linux可执行文件。该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串......
  • 人月神话阅读笔记01
    阅读笔记01什么是人月神话?人是程序员,月是时间,当1个人干10个月等同于10个人干1个月,那就成了“神话”!这也就是人月神话名称的由来。其中,焦油坑示例,让我印象颇深,所谓焦油......
  • 01. 数据结构概述
    一、什么是数据结构  数据结构(DataStructure)是计算机中存储、组织数据的方式,它是数据对象、以及存在于该对象的实例和组成实例的数据元素之间的各种联系。这些联系可......