• python requests操控网站


    使用库 :import requests
    安装:pip install requests
    示例:

    # 导入 requests 包
    import requests
    
    # 发送请求
    response = requests.get('https://www.baidu.com/')
    # 等价于 response = requests.request('get', 'https://www.baidu.com/')
    response.encoding='utf-8'  # 防止中文乱码必加
    
    # 返回网页内容
    print(response.text)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    response 对象

    每次调用 requests 请求之后,会返回一个 response 对象,该对象包含了具体的响应信息。

    属性或方法说明
    apparent_encoding显示request的
    close()关闭与服务器的连接
    content返回响应的内容,以字节为单位
    cookies返回一个 CookieJar 对象,包含了从服务器发回的 cookie
    elapsed返回一个 timedelta 对象,包含了从发送请求到响应到达之间经过的时间量,可以用于测试响应速度。比如 r.elapsed.microseconds 表示响应到达需要多少微秒。
    encoding解码 r.text 的编码方式
    headers返回响应头,字典格式
    history返回包含请求历史的响应对象列表(url)
    is_permanent_redirect如果响应是永久重定向的 url,则返回 True,否则返回 False
    is_redirect如果响应被重定向,则返回 True,否则返回 False
    iter_content()迭代响应
    iter_lines()迭代响应的行
    json()返回结果的 JSON 对象 (结果需要以 JSON 格式编写的,否则会引发错误)
    links返回响应的解析头链接
    next返回重定向链中下一个请求的 PreparedRequest 对象
    ok检查 “status_code” 的值,如果小于400,则返回 True,如果不小于 400,则返回 False
    raise_for_status()如果发生错误,方法返回一个 HTTPError 对象
    reason响应状态的描述,比如 “Not Found” 或 “OK”
    request返回请求此响应的请求对象
    status_code返回 http 的状态码,比如 404 和 200(200 是 OK,404 是 Not
    text返回响应的内容,unicode 类型数据
    url返回响应的 URL

    requests 方法

    方法描述
    delete(url, args)发送 DELETE 请求到指定 url
    get(url, params, args)发送 GET 请求到指定 url
    head(url, args)发送 HEAD 请求到指定 url
    patch(url, data, args)发送 PATCH 请求到指定 url
    post(url, data, json, args)发送 POST 请求到指定 url
    put(url, data, args)发送 PUT 请求到指定 url
    request(method, url, args)向指定的 url 发送指定的请求方法

    get():get请求

    # 导入 requests 包
    import requests
    
    kw = {'wd': 'requests'}
    
    # 设置请求头
    headers = {
       "Accept-Encoding": "gzip, deflate",
       "Accept-Language": "en-US, en; q=0.8, zh-Hans-CN; q=0.5, zh-Hans; q=0.2",
       "Connection": "Keep-Alive",
       "Cookie": "BIDUPSID=66FF68AA26FC6EDA7D0F3A7B83889785; PSTM=1650200337; BAIDUID=66FF68AA26FC6EDAA62D11242D93E3C4:FG=1; BDUSS=hGSzZIRXNNanhuTmlpeHRVVkpyUlpOaWJjVnBkWldxV2pkbGllSVAtQnZxUHhpSVFBQUFBJCQAAAAAAAAAAAEAAAAK0sJE19DX0LTzyuXK5QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG8b1WJvG9VidV; ispeed_lsm=0; BDSFRCVID=VKAOJeC62AcQbRjDU1d-hDtKuSdUpQTTH6f3sz-1mEw0HZdPwu18EG0PyU8g0K4MKk0gogKK3mOTHR8F_2uxOjjg8UtVJeC6EG0Ptf8g0f5; H_BDCLCKID_SF=Jn4OoCt-JC83fP36q4To5PtebMoHetJyaR3pahjvWJ5TMCoq-pQD04Iv3HQbe4vRbg3tbbbG-UjxShPCb6b52CrLhtofJUvz5NRfLCDy3l02V-Tae-t2yT0IyU4jK-RMW20eWl7mWU_WsxA45J7cM4IseboJLfT-0bc4KKJxbnLWeIJIjj6jK4JKDN0OJx5; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; delPer=0; BD_CK_SAM=1; PSINO=3; BA_HECTOR=alala58l8k2k250h8gah6i331hfpdtr17; ZFY=kC9agDNZ79qiM0O8SgeVUMFor:Be68PgM1D2NvMsPttw:C; BDRCVFR[tFA6N9pQGI3]=mk3SLVN4HKm; BD_HOME=1; BAIDUID_BFESS=66FF68AA26FC6EDAA62D11242D93E3C4:FG=1; BDUSS_BFESS=hGSzZIRXNNanhuTmlpeHRVVkpyUlpOaWJjVnBkWldxV2pkbGllSVAtQnZxUHhpSVFBQUFBJCQAAAAAAAAAAAEAAAAK0sJE19DX0LTzyuXK5QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG8b1WJvG9VidV; BDSFRCVID_BFESS=VKAOJeC62AcQbRjDU1d-hDtKuSdUpQTTH6f3sz-1mEw0HZdPwu18EG0PyU8g0K4MKk0gogKK3mOTHR8F_2uxOjjg8UtVJeC6EG0Ptf8g0f5; H_BDCLCKID_SF_BFESS=Jn4OoCt-JC83fP36q4To5PtebMoHetJyaR3pahjvWJ5TMCoq-pQD04Iv3HQbe4vRbg3tbbbG-UjxShPCb6b52CrLhtofJUvz5NRfLCDy3l02V-Tae-t2yT0IyU4jK-RMW20eWl7mWU_WsxA45J7cM4IseboJLfT-0bc4KKJxbnLWeIJIjj6jK4JKDN0OJx5; BD_UPN=12314753; sugstore=1; COOKIE_SESSION=71_0_9_9_10_7_1_0_9_3_0_0_70788_0_4_0_1660729351_0_1660729347%7C9%2393_19_1660527400%7C5; H_PS_PSSID=36557_37112_36918_37129_37163_37136_26350_37088; H_PS_645EC=4cc2eJy9DIqlkz3yDk8gAoJaAvWpj7HuUSDsY%2BhimFdVj8gIxVMIu7%2FfFVk; BDSVRTM=29; WWW_ST=1660729548295",
       "Host": "www.baidu.com",
       "is_pbs": "requests%20%E7%99%BE%E5%BA%A6%E6%9F%A5%E8%AF%A2%20%E5%AE%89%E5%85%A8%E9%AA%8C%E8%AF%81",
       "is_referer": "https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&tn=baidu&wd=requests%20%E7%99%BE%E5%BA%A6%E6%9F%A5%E8%AF%A2%20%E5%AE%89%E5%85%A8%E9%AA%8C%E8%AF%81&oq=requests%2520%25E7%2599%25BE%25E5%25BA%25A6%25E6%259F%25A5%25E8%25AF%25A2&rsv_pq=c1c505f300068e69&rsv_t=f954yaBLJPRoW0h8mDveBLV%2FqsAagl8nsx%2BVmRT6Z8BMnhhJ3um%2BbCziPoM&rqlang=cn&rsv_dl=tb&rsv_enter=1&rsv_btype=t&rsv_sug3=32&rsv_sug1=21&rsv_sug7=100&bs=requests%20%E7%99%BE%E5%BA%A6%E6%9F%A5%E8%AF%A2",
       "is_xhr": "1",
       "Referer": "https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&tn=baidu&wd=requests%20%E7%99%BE%E5%BA%A6%E6%9F%A5%E8%AF%A2%20%E5%AE%89%E5%85%A8%E9%AA%8C%E8%AF%81&oq=requests%2520%25E7%2599%25BE%25E5%25BA%25A6%25E6%259F%25A5%25E8%25AF%25A2%2520%25E5%25AE%2589%25E5%2585%25A8%25E9%25AA%258C%25E8%25AF%2581&rsv_pq=cde28a23000189af&rsv_t=4cc2eJy9DIqlkz3yDk8gAoJaAvWpj7HuUSDsY%2BhimFdVj8gIxVMIu7%2FfFVk&rqlang=cn&rsv_dl=tb&rsv_enter=0&rsv_btype=t",
       "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko",
       "X-Requested-With": "XMLHttpRequest",
    }
    # params 接收一个字典或者字符串的查询参数,字典类型自动转换为url编码,不需要urlencode()
    response = requests.get(r"https://www.baidu.com/s?", params=kw, headers=headers)
    response.encoding='utf-8'
    print(response.text)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    成功查询
    在这里插入图片描述
    post():post请求

    # 导入 requests 包
    import requests
    
    # 表单参数,参数名为 fname 和 lname
    myobj = {'fname': 'RUNOOB','lname': 'Boy'}
    
    # 发送请求
    x = requests.post('https://www.runoob.com/try/ajax/demo_post2.php', data = myobj)
    
    # 返回网页内容
    print(x.text)
    # 打印响应头
    print(x.headers)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    在这里插入图片描述

    案例:使用服务器寻找员工手机号,并且发送验证短信

    打开浏览器
    在浏览器网络内 拷贝请求头
    在这里插入图片描述

    
    # 设置请求头
    headers = {
        "Accept": "application/json, text/plain, */*",
        "Accept-Encoding": "gzip, deflate, br",
        "Accept-Language": "zh-CN,zh;q=0.9,ko;q=0.8",
        "cid": "13616011111",
        "Connection": "keep-alive",
        "Host": "app.fzxtech.com",
        "number": '13811307119',
        "Origin": "https://pt.fzxtech.com",
        "Referer": "https://pt.fzxtech.com/",
        "Sec-Fetch-Dest": "empty",
        "Sec-Fetch-Mode": "cors",
        "Sec-Fetch-Site": "same-site",
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36",
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    发送请求,只要请求成功。则推测短信已发出。

    response = requests.get(r"https://app.fzxtech.com/gs-api/register/sendcode2", headers=headers)
    
    • 1

    response是发出请求后收到的响应

     print(response.text)  # 打印响应内容(网页的html中的信息)
     print(response.headers)  # 打印响应头
    
    • 1
    • 2

    在这里插入图片描述
    可以用这种方式结合可能的区域使用的手机号码,循环发送请求,如果请求有响应即可判断这个手机号是有人使用的。

  • 相关阅读:
    360vr党建线上主题展立体化呈现企业的文化理念和品牌形象
    LLM 系列 | 21 : Code Llama实战(上篇) : 模型简介与评测
    2022年全球市场氨苯蝶啶原料药总体规模、主要生产商、主要地区、产品和应用细分研究报告
    实际编译运行tensorflow Lite Microcontroller的例子《MCU嵌入式AI开发笔记》(第8集)
    软考报名全流程及注意事项
    多表之间存在父子级关系:根据某一级,查询所有子级 & 构建树结构数据
    What are the advantages of pipes over temporary files?
    MyBatis-Plus常用注解
    拿到已开发好的Vue前端代码如何在本地运行?
    【从0到1设计一个网关】性能优化---Netty线程数配置与JVM参数配置
  • 原文地址:https://blog.csdn.net/zz891422822/article/details/126389486