zoukankan      html  css  js  c++  java
  • 02-requests模块的概述

    什么是requests模块
    官方文档:https://requests.readthedocs.io/en/master/

    • requests模块是python中原生的基于网络请求的模块,其主要作用是用来模拟浏览器发起请求。功能强大,用法简洁高效。在爬虫领域中占据着半壁江山的地位。
    • 为什么要使用requests模块
      因为在使用urllib模块的时候,会有诸多不便之处,总结如下:
    • 手动处理url编码
    • 手动处理post请求参数
    • 处理cookie和代理操作繁琐

    • 使用requests模块:
    • 自动处理url编码
    • 自动处理post请求参数
    • 简化cookie和代理操作

      如何使用requests模块
      安装:
    pip install requests
    

    使用流程

    • 指定url
    • 基于requests模块发起请求
    • 获取响应对象中的数据值
    • 持久化存储

    response的常用属性

    • response.text 响应体 str类型
    • respones.content 响应体 bytes类型
    • response.status_code 响应状态码
    • response.request.headers 响应对应的请求头
    • response.headers 响应头
    • response.request.cookies 响应对应请求的cookie
    • response.cookies 响应的cookie(经过了set-cookie动作)
      Requests库中有7个主要的函数
      分别是 request() 、get() 、 head() 、post() 、put() 、patch() 、delete() 。这七个函数中request()函数是其余六个函数的基础函数,其余六个函数的实现都是通过调用该函数实现的。

    方法 说明

    • requests.request() 构造一个请求,支撑一下方法的基础方法
    • requests.get() 获取HTML网页的主要方法,对应于HTTP的GET(请求URL位置的资源)
    • requests.head() 获取HTML网页头信息的方法,对应于HTTP的HEAD(请求URL位置的资源的头部信息)
    • requests.post() 向HTML网页提交POST请求的方法,对应于HTTP的POST(请求向URL位置的资源附加新的数据)
    • requests.put() 向HTML网页提交PUT请求的方法,对应于HTTP的PUT(请求向URL位置储存一个资源,覆盖原来URL位置的资源)
    • requests.patch() 向HTML网页提交局部修改的请求,对应于HTTP的PATCH(请求局部更新URL位置的资源)
    • requests.delete() 向HTML网页提交删除请求,对应于HTTP的DELETE(请求删除URL位置储存的资源)
      而这几个函数中,最常用的又是 requests.get() 函数。get函数有很多的参数,我只举几个比较常用的参数

    参数 说明

    • url 就是网站的url
    • params 将字典或字节序列,作为参数添加到url中,get形式的参数
    • data 将字典或字节序列,作为参数添加到url中,post形式的参数
    • headers 请求头,可以修改User-Agent等参数
    • timeout 超时时间
    • proxies 设置代理
    # -*- coding: utf-8 -*-
    import requests #调用requests模块
    from lxml import etree #调用html解析
    from Chaojiying_Python import chaojiying #调用超级鹰打码平台
    import time # 调用时间模块
    
    
    
    
    
    
    
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36"
    
    } #模仿浏览器UA头
    
    session = requests.Session()# 动态获取cookie
    # 识别验证码
    url ="https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx"
    page_text = session.get(url=url,headers=headers).text
    # 解析验证码图片
    tree = etree.HTML(page_text)
    img_src = "https://so.gushiwen.cn/"+tree.xpath('//*[@id="imgCode"]/@src')[0]
    # 将验证码图片保存到本地
    img_data = session.get(img_src,headers=headers).content
    with open ('C:/Users/gpc/Desktop/python/Chaojiying_Python/code.jpg',"wb") as fp:
        fp.write(img_data)
    
    # 识别验证码
    code_text = chaojiying.Chaojiying_Client.tranformImgCode()
    time.sleep(2)
    
    
    login_url = "https://so.gushiwen.cn/user/login.aspx?from=http%3a%2f%2fso.gushiwen.cn%2fuser%2fcollect.aspx"
    data = {
        # 如果在请求参数中看见一组乱序的请求参数,需要抓包验证下是否动态变化如下:"__VIEWSTATE" "__VIEWSTATEGENERATOR"
        # 如果是动态变化的参数一般会隐藏在前台源码中,我们需要进行xpaht 或者正则 等方式进行提取 就可以获得实时的参数
        # 如果前台源码中没有,我们可以通过抓包全局收索获取对应的数据包提取参数赋值到data中
        "__VIEWSTATE": "wLzVsPN64jZIa8aQJI9HzVvaaknH6pBhUG+UOMQKX8NEFV49xwtLRgU8GH4O1o+mClDbtnYiKbXMOIM6VRh7HGzM4hpMpd0qBUM3b/pXlzZ2gnbcuB+5RUBJ/i0=",
        "__VIEWSTATEGENERATOR": "C93BE1AE",
        "from": "http://so.gushiwen.cn/user/collect.aspx",
        "email": "18398149392",
        "pwd": "cheng.1023",
        "code": code_text,# 验证码动态变化
        "denglu": "登录"
    }
    # 对点击登录按钮发起请求,获取了登录成功后的页面源码数据
    page_text_login = session.post(url = login_url,headers=headers,data=data).text
    print(page_text_login)
    
    
    
    
    # -*- coding: utf-8 -*-
    import requests # 调用模块
    
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36"
    } #模仿浏览器UA头
    url = "http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsList" # 指定url
    
    for pg in range(1,6):
        data = {
            "on": "true",
            "page": str(pg),
            "pageSize": "15",
            "productName":"",
            "conditionType": "1",
            "applyname":"",
            "applysn":""
        }
    
        response = requests.post(url=url,headers=headers,data=data) # 发起请求get方法的返回值为响应对象
    
        page_text = response.json() # 将获取的字符串形式的json数据序列化成字典或者列表对象
        uuid = page_text["list"]
        for idd in uuid:
            iidd = (idd["ID"])
    
    # 爬取详情数据
            url2 = "http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById" # 指定url
            data2 = {
                "id":iidd
            }
            response = requests.post(url=url2,headers=headers,data=data2) # 发起请求get方法的返回值为响应对象
    
            page_text = response.json() # 将获取的字符串形式的json数据序列化成字典或者列表对象
    
            qymc = page_text["epsName"]
            xkzbh = page_text["productSn"]
            xkxm = page_text["certStr"]
            qyzs = page_text["epsAddress"]
            scdz = page_text["epsProductAddress"]
            shxydm = page_text["businessLicenseNumber"]
            fddbr = page_text["businessPerson"]
            qyfzr = page_text["legalPerson"]
            zlfzr = page_text["qualityPerson"]
            fzjg = page_text["qfManagerName"]
            qfr = page_text["xkName"]
            rcjdgljg = page_text["rcManagerDepartName"]
            rcjdglry = page_text["rcManagerUser"]
            yxq = page_text["xkDate"]
            fzrq = page_text["xkDateStr"]
            xiangqing = ("企业名称:" + qymc + "
    " + "许可证编号:" + xkzbh + "
    " + "许可项目:" + xkxm + "
    " + "企业住所:" + qyzs + "
    " + "生产地址:" + scdz + "
    " + "社会信用代码:" + shxydm + "
    " + "法定代表人:" + fddbr + "
    " + "企业负责人:" + qyfzr + "
    " + "质量负责人:" + zlfzr + "
    " + "发证机关:" + fzjg + "
    " + "签发人:" + qfr + "
    " + "日常监督管理机构:" + rcjdgljg + "
    " + "日常监督管理人员:" + rcjdglry + "
    " + "有效期至:" + yxq + "
    " + "发证日期:" + fzrq)
            print(xiangqing)
    
    
    
            with open ("药监局详情爬取.txt","a",encoding="utf-8") as  fp:  # 持续化存储 (w写 r读 a追加)
                fp.write(xiangqing + "
    ")
    
    # -*- coding: utf-8 -*-
    
    import requests # 调用模块
    
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36"
    } #模仿浏览器UA头
    url = "https://movie.douban.com/j/chart/top_list?type=5&interval_id=100%3A90&action=&start=0&limit=20" # 指定url
    
    params = {
        'type': '5',
        'interval_id': '100:90',
        'action':'',
        'start': '0',
        'limit': '20'
    }
    
    response = requests.get(url=url,headers=headers,params=params) # 发起请求get方法的返回值为响应对象
    
    page_text = response.json() # 将获取的字符串形式的json数据序列化成字典或者列表对象
    #page_text = response.text # 获取响应数据,text为字符串形式的相应数据
    
    # 解析出电影的名称+评分
    
    for movie in page_text:
        name = movie['title']
        score = movie['score']
        print(name,score)
    
    
    
        with open ("豆瓣.txt","a",encoding="utf-8") as  fp:  # 持续化存储 (w写 r读 a追加)
            fp.write(name + " " + score + "
    ")
    
  • 相关阅读:
    (转载)SAPI 包含sphelper.h编译错误解决方案
    C++11标准的智能指针、野指针、内存泄露的理解(日后还会补充,先浅谈自己的理解)
    504. Base 7(LeetCode)
    242. Valid Anagram(LeetCode)
    169. Majority Element(LeetCode)
    100. Same Tree(LeetCode)
    171. Excel Sheet Column Number(LeetCode)
    168. Excel Sheet Column Title(LeetCode)
    122.Best Time to Buy and Sell Stock II(LeetCode)
    404. Sum of Left Leaves(LeetCode)
  • 原文地址:https://www.cnblogs.com/gemoumou/p/13635343.html
Copyright © 2011-2022 走看看