• requests模块



    爬虫是什么?;爬虫就是程序--->从互联网中,各个网站上,爬取数据【前提是:你能浏览的页面才能爬】,做数据清洗,保存到数据库的过程。

    爬虫本质:模拟方式发送http请求、然后获取数据、再做数据清洗、最后保存到数据库

    爬虫的重点:如何发送http请求?如何解析数据?

    本篇爬虫知识主要包括(不会一次性写完,分好几篇文章写完):

    1. 模拟发送http请求(requests模块、selenium)
    2. 反扒(封IP:IP代理、封账号:cookie池)
    3. 解析数据(bs4)
    4. 入库(保存到MySQL、Redis等数据库以及普通文件)
    5. 爬虫框架(scrapy)

    一、requests模块

    使用python为什么能发送http请求,原因是该模块封装了Python内置模块urllib(起之前用到的urllib,requests模块的api更加便捷,本质就是封装了urllib3)

    安装模块

    python
    pip install requests

    基本使用

    python
    import requests
    
    
    res = requests.get('网址')  # 获取数据发送get请求
    print(res.text)  # text 参数可以打印出页面HTML代码

    二、requests携带参数的方式

    python
    第一:直接在URL后面英文问号拼参数
     res = requests.get('网址')
        
    第二:使用params参数(其实最后效果跟第一种方式一样)
    res = requests.get('网址',params={'name':'mire','age':18})

    三、get请求URL解码编码

    python
    import requests
    from urllib.parse import quote, unquote
    
    res = requests.get('网址', params={'name': '阿丽米热', 'age': 18})
    print(res.url)  # https://www.cnblogs.com/almira998/p/17208674.html?name=%E9%98%BF%E4%B8%BD%E7%B1%B3%E7%83%AD&age=18
    
    """
    我们平时在浏览器上搜关键字,有时候当前网址后面拼搜索关键字但是其已经url编码的具体样子如下
    https://www.cnblogs.com/almira998/p/17208674.html?name=%E9%98%BF%E4%B8%BD%E7%B1%B3%E7%83%AD&age=18
    怎么样?是不是很眼熟啊,这就是url编码后的效果
    """
    
    '''
    那么我们可以研究下如编码和解码
    首先要导入模块  from urllib.parse import quote, unquote
    quote:代表编码
    unquote:代表解码
    '''
    
    # 演示一下编码和解码
    res = quote('阿丽米热')
    print(res)  # %E9%98%BF%E4%B8%BD%E7%B1%B3%E7%83%AD
    
    res1 = unquote('%E9%98%BF%E4%B8%BD%E7%B1%B3%E7%83%AD')
    print(res1)  # 阿丽米热

    四、post请求携带数据编码格式

    python
    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'
                  })

    五、get请求携带请求头

    python
    # (反爬虫措施之一)
    Connection: keep-alive  # 该参数的作用保持链接状态,因为http协议本质是基于TCP协议的(无连接、无状态)
    Cookie: 很长的字符串删掉;  # 带着cookie就可以信任为登录状态,请求比较容易成功
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.3  # 表示客户端的类型 比如操作系统浏览器类型等等
    python
    import requests
    
    
    # 先用字典的形式包装好
    headers = {
        'Connection':'keep-alive',
        'Cookie':'一堆字符串',
        'User-Agent':''
    	'Referer':'上一个浏览的网址'
    }
    
    res = requests.get('网址', headers=headers)  # headers=headers表明携带请求头
    print(res.text)
    

    六、post请求携带参数

    python
    # 发送post请求需要以下参数
    """
    1、携带登录信息(用户名、密码、验证码)
    2、携带cookie
    3、携带请求头headers
    """
    python
    import requests 
    data = {
        'username': '',
        'password': '',
        'captcha': '3456',
        'remember': 1,
        'ref': '网址',
        'act': 'act_login'
    }
    
    headers = {
        'Connection':'keep-alive',
        'Cookie':'一堆字符串',
        'User-Agent':''
    }
    res = requests.get('网址', data=data, headers=headers)
    print(res.text)
    
    
    """
    登录一般都是post请求,需要细带cookie
    但是有些网站啊有双token认证 严重影响了爬虫的效率
    requests.session() 意思就是保持对话
    使用requests.session就不用带cookie
    """
    # 使用方法
    session = requests.session()
    res = session.post('网址', data=data)
    res1 = session.get('网址')  # 自动保持登录状态,自动携带cookie
    

    七、requests.session的使用(可以不用带cookie)

    python
    import requests
    
    
    # 在data参数里需要携带用户名密码验证码等基本信息
    data = {
        'username': '3014885197@qq.com',
        'password': 'almira10054X',
        'referer': '网址'
    }
    # 发post请求,参数里面传data参数
    
    session = requests.session()
    res = session.post('网址, data=data)
    
    print(res.text)
    

    八、requests模块其他参数

    python
    # 研究主题:爬取肯德基门店信息
    # 目标网址:http://www.kfc.com.cn/kfccda/storelist/index.aspx
    
    """
    在浏览器的控制台请求体中解析出来的数据
    代码中放到data中发送请求
    cname: 
    pid: 
    keyword: 上海
    pageIndex: 1
    pageSize: 10
    """
    python
    import requests
    
    
    data = {
        'cname': '',
        'pid': '',
        'keyword': '上海',
        'pageIndex': 1,
        'pageSize': 10,
    
    }
    
    res = requests.post('http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword', data=data, verify=False)
    print(res.json())  # .json()可以解析json格式数据
    
    """
     发送http请求,返回的数据会有xml格式,也有json格式
     如果res.text  >>>转的是xml格式
     如果res.json()   >>>转的是json格式
     
     verify=False 该参数不验证证书,报警告,返回200
     urllib3.disable_warnings() #关闭警告
     手动携带证书信息即可
    """

    九、response对象

    python
    # Response相应对象的属性和方法
    import requests
    headers = {
        'User-Agent': '一些pc和浏览器配置信息'
    }
    respone=requests.get('网址',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)  # 响应编码格式
    

    __EOF__

  • 本文作者: The Road of Learning 阿丽米热
  • 本文链接: https://www.cnblogs.com/almira998/p/17220176.html
  • 关于博主: 评论和私信会在第一时间回复。或者直接私信我。
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。
  • 相关阅读:
    深入分析 Java对象进入老年代的四种方式
    mysql随笔
    Recommender Systems in the Era of Large Language Models (LLMs)
    java-php-python-远程教学系统录屏计算机毕业设计
    浏览器内核小知识
    【论文笔记】ASYMMETRIC SELF-PLAY FOR AUTOMATIC GOAL DISCOVERY IN ROBOTIC MANIPULATION
    C++项目——云备份-⑤-数据管理模块的设计与实现
    MySQL安装到建库表实践全流程讲解(windows)
    【Java集合中各种数据结构的方法汇总】
    全力助推徐工集团转型升级,迅镭激光智能装备展现硬核实力!
  • 原文地址:https://www.cnblogs.com/almira998/p/17220176.html