• 爬虫——requests模块


    requests模块

    安装

    pip3 install requests
    

    图片防盗链

    referer  从哪个网页来的,爬取的时候带上
    

    url的编码和解码

    路径出现%...
    from urllib.parse import urlencode,unquote  
    print(unquote('%E7%BE%8E%E5%A5%B3'))
    

    模块使用

    import requests
    header = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36',
        'referer': 'https://www.mzitu.com/225078/2'
    }
    
    res = requests.get('https://www.mzitu.com/', headers=header)
    
    
    # 2 请求地址中携带数据(两种方式,推荐第二种)
    拼接在url,或者,params参数
    res=requests.get('https://www.baidu.com/s',headers=header,params={'wd':'美女'})
    
    # 3 请求带cookie(两种方式)
    # 方式一
    header = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36',
        'cookie':'key=asdfasdfasdfsdfsaasdf;key2=asdfasdf;key3=asdfasdf'
    }
    # 方式二
    cookies是一个字典或者CookieJar对象
    res=requests.get('http://127.0.0.1:8000/index/',headers=header,cookies={'key':'asdfasdf'})
    
    # 4 发送post请求,携带数据(urlencoded和json)
    res=requests.post('http://127.0.0.1:8000/index/',data={'name':'lqz'})
    res=requests.post('http://127.0.0.1:8000/index/',json={'age':1,},)
    
    # 5 自动携带cookie
    session=requests.session()
    res=session.post('http://127.0.0.1:8000/index/')  # 假设这个请求登录了
    res1=session.get('http://127.0.0.1:8000/order/')  # 不需要手动带cookie,session会处理
    
    # 6 response对象
    respone=requests.post('http://127.0.0.1:8000/index/',data={'name':'lqz'})
    respone.text  # 响应的文本
    res.json()  # json 格式
    respone.content  # 响应体的二进制
    respone.status_code  # 响应状态码
    respone.headers    # 响应头
    respone.cookies   # cookie
    respone.cookies.get_dict() #  把cookie转成字典
    respone.cookies.items()  # key和value
    respone.url       # 请求的url
    respone.history   #[]放重定向之前的地址
    respone.encoding  # 响应的编码方式
    respone.iter_content()  # 图片,视频,大文件,一点一点循环取出来
    
    
    
    # 7 编码问题
    乱码解决:
    res.encoding='gb2312'
    或
    res.encoding=res.apparent_encoding
    
    # 8 解析json
    import json
    respone=requests.post('http://127.0.0.1:8000/index/',data={'name':'lqz'})
    print(type(respone.text))  # 响应的文本
    print(json.loads(respone.text))
    print(respone.json())
    
    # 9 高级用法之ssl(了解)
    import requests
    respone=requests.get('https://www.12306.cn') #不验证证书,报警告,返回200
    
    # 使用证书,需要手动携带
    import requests
    respone=requests.get('https://www.12306.cn',cert=('/path/server.crt','/path/key'))
    
    
    # 10 代理
    espone=requests.get('http://127.0.0.1:8000/index/',proxies={'http':'代理的地址和端口号',})
    
    # 代理池:列表放了一堆代理ip,每次随机取一个,再发请求就不会封ip了
    # 高匿和透明代理?高匿代理,后端无论如何拿不到你的ip,使用透明,后端能够拿到你的ip
    # 后端如何拿到透明代理的ip,  后端:X-Forwarded-For
    respone=requests.get('https://www.baidu.com/',proxies={'http':'27.46.20.226:8888',})
    
    
    # 11 超时设置
    import requests
    respone=requests.get('https://www.baidu.com',timeout=0.0001)
    
    
    # 12 认证设置(没有用的了)
    import requests
    r=requests.get('xxx',auth=('user','password'))
    
    
    # 13 异常处理
    import requests
    from requests.exceptions import * #可以查看requests.exceptions获取异常类型
    try:
        r=requests.get('http://www.baidu.com',timeout=0.00001)
    except Exception as e:
        print(e)
    
    # 14 上传文件
    res=requests.post('http://127.0.0.1:8000/index/',files={'myfile':open('a.jpg','rb')})
    
  • 相关阅读:
    laravel、TP、YII框架的优缺点
    关于如何关闭Laravel中严格模式的两种方法
    Laravel扩展阿里云OSS对象存储
    Laravel权限管理的应用记录
    laravel原生MySQL之Group记录
    laravel导出Xlsx
    软件工程课的认识
    斗兽棋项目开发计划书
    斗兽棋测试计划说明书
    测试报告分析
  • 原文地址:https://www.cnblogs.com/pythonwl/p/13411663.html
Copyright © 2020-2023  润新知