美文网首页
企业认证数据采集爬虫记录

企业认证数据采集爬虫记录

作者: pushyzheng | 来源:发表于2017-10-05 17:17 被阅读0次

    企业认证数据采集爬虫记录

    一、项目介绍:

    1、爬取网站认证认可业务信息统一查询平台

    2、项目要求企业认证数据采集需求说明书

    3、项目部分完成代码: github

    二、项目思路:

    1、爬虫基本思路:

    获取爬虫思路的方法顺序:

    直接在渲染的网页源代码中爬取
    ajax异步请求方式获取数据
    js解密显示

    2、爬虫基本方法:

    • Refererheaders参数:Referer代表你正在从哪个浏览器浏览网页
      headers代表头文件,可伪装成浏览器
      访问网页:
    org_list.png
    • 查看Network上的显示以下的加载文件:
    name.png
    • 打开queryOrg.do?progld=10文件,查看提交data数据:
    form_data.png

    以及文件的提交方式请求地址

    post.png
    • 构造一个函数通过ajax异步请求来获取组织列表的信息:
    def get_orgaList_info():
        #下载验证码进行手动输入:
        with open('code.png','wb') as f:
            f.write(opener.open('http://cx.cnca.cn/rjwcx/checkCode/rand.do?d=1507441665016').read())
        #手动输入验证码:
        code = input("请输入验证码:")
        #构造提交的表单数据:
        data = {
            'certNumber':'',
            'orgName':'漳州灿坤实业有限公司',
            'queryType': 'public',
            #输入的验证码信息
            'checkCode': code
        }
        #提交表单数据和头文件:
        data = urllib.parse.urlencode(data).encode('utf-8')
        req = urllib.request.Request('http://cx.cnca.cn/rjwcx/web/cert/queryOrg.do?progId=10')
        #添加头文件
        req.headers = headers
        #得到的数据为bytes(字节)类型:
        org_list = opener.open(req,data=data).read()
    

    注意:这里得到的org_listAscii编码,对该数据进行解码成字符串后,通过json模块的loads()的方法将对json数据进行解码,转换成可操作的字典格式:

    org_list_json = json.loads(org_list.decode('ascii'))
    

    将提取到以下信息,每一条这样的字典格式的信息代表每一个的组织的信息

    {'data': [
        {'randomCheckCode': '3', 
        'checkC': '1247458294',
        'orgCode': '000000000',
        'orgDistrictName': '', 
        'orgName': '漳州灿坤实业有限公司'}] 
    }
    

    3、对返回的org_list_json循环,获取证书列表的信息:

    • 点击任意组织名称,网页显示该组织的所有证书的列表:
    cert_list.png

    此时,Network上会再加载list.do?progld=10文件:

    name2.png

    分析提交的表单的数据:orgNameorgCodecheckC每个组织都是不相同的,所以要从get_orgaList_info()返回的参数中继承,以及继承之前输入的验证码randomCheckCode

    form_data2.png
    • 创建一个获取证书列表的信息,通过传入之前获得的json数据里的参数,以及获取的验证码:
    def get_certList_info(orgName,orgCode,checkC,code):
        req = urllib.request.Request('http://cx.cnca.cn/rjwcx/web/cert/list.do?progId=10')
        req.headers = headers
        #构造提交的data数据
        data = {
            'orgName': orgName,
            'orgCode': orgCode,
            'method': 'queryCertByOrg',
            'needCheck': 'false',
            'checkC': checkC,
            'randomCheckCode': code,
            'queryType': 'public',
            'page': '1',
            'rows': '10',
            'checkCode':''
        }
        #转换成查询字符串(bytes):
        data = urllib.parse.urlencode(data).encode('utf-8')
        #获得提交data数据后的json信息
        cert_list_bytes = opener.open(req,data=data).read()
        cert_list_json = json.loads(cert_list_bytes.decode('ascii'))
        return cert_list_json['rows']
    
    • 将爬取到一下的信息:每一个信息代表每一个证书的信息:
    {'authProjCodeName': 
        '电子信息产品污染控制自愿性认证', 
        'certiStatusName': '有效',
        'rzjgId': 'CNCA-RF-2002-07', 
        'certiEDate': '2021-08-31', 
        'showtemp': '4', 
        'rzjgIdName': '上海天祥质量技术服务有限公司',
        'zersda': '20160929', 
        'certNumber': 'R2_130800590SHA-001',
        'certiStatus': '01', 
        'row': 1, 
        'orgName': '漳州灿坤实业有限公司',
        'checkC': -536800051, 
        'authProjCode': 'B0331'
    }
    

    4、对返回的cert_list_json循环,获取每一个证书的内容

    • 点击一个证书网页,打开Network,刷新后查看加载的文件,找到showZyx...文件:
    name3.png
    • 网页采取GET请求方式,请求的参数显示在网页的URL上:
    form_data3.png

    分析网页的URLhttp://cx.cnca.cn/rjwcx/web/cert/showZyxGy.do?rzjgId={}&certNo={}&checkC={}

    请求的三个参数都位于每一个cert_list_json中,不同的参数对应不同的url,也对应不同的证书页面的内容

    • 创建一个传入从get_certList_info返回的rajgidcertNocheckC的参数,获得证书页面的内容:
    def get_cert_info(rajgid,certNo,checkC):
        #构造和传入参数结合的url
        url = 'http://cx.cnca.cn/rjwcx/web/cert/showZyxGy.do?''rzjgId={}&certNo={}&checkC={}'.format(rajgid,certNo,checkC)
        req = urllib.request.Request(url)
        req.headers = headers
        html = opener.open(req).read().decode('utf-8')
        print(html)
    

    四、项目的总结:

    相关文章

      网友评论

          本文标题:企业认证数据采集爬虫记录

          本文链接:https://www.haomeiwen.com/subject/mplkyxtx.html