美文网首页
爬取某届学生实习单位

爬取某届学生实习单位

作者: 小幸运Q | 来源:发表于2019-02-22 13:49 被阅读3次

    注意事项:

    1. token需要post获取然后在前面加上个"Bearer "
    2. 请求公司名称的时候需要先使用options请求一次通过安全检查后才能get到数据。
    image.png

    Options:

    CORS 中,可以使用 OPTIONS 方法发起一个预检请求,以检测实际请求是否可以被服务器所接受。预检请求报文中的 Access-Control-Request-Method 首部字段告知服务器实际请求所使用的 HTTP 方法;Access-Control-Request-Headers请求首部 Access-Control-Request-Headers 出现于 preflight request (预检请求)中,用于通知服务器在真正的请求中会采用哪些请求首部。") 首部字段告知服务器实际请求所携带的自定义首部字段。服务器基于从预检请求获得的信息来判断,是否接受接下来的实际请求。

    import requests,pymysql,re,json,csv
    data={
    'type': 'username',
    'username':'stu_id',
    'password':'password'
    }
    id=''
    Token=''
    db = pymysql.connect("localhost","root","password","test")
    cursor = db.cursor()
    
    # 全过程
    def raw_num():
        cs=open("paiming.csv","r",errors="ignore")
        reader=csv.reader(cs)
        for line in enumerate(reader): 
            #print(index)
            try:
                get_Token(line[1][1])
            except Exception as e:
                print(e)
            #print(line[1][1])
        cs.close()
    
    # sql存储到mysql
    def store(id,company,adds):
        #print(company)
        h='Insert into stu(id,company,another) values(%s,"%s","%s")'%(id,company,adds)
        print(h)
        cursor.execute(h)
        db.commit()
    
    # 获取实习单位
    def get_Token(stu_id):
        data['username']=stu_id
        url='https://api.xsix103.cn/prac_manage/v1/token'
        r=requests.post(url,data)
        
        # 提取token
        Token=re.findall('"accessToken":[^,]*',r.text)[0]
        Token=Token[15:-1]
        
        T=re.findall('"id":[^,]*',r.text)[0]
        id=T[5:-2]
        
        heads='Bearer '
    
        payload={'Referer':'https://www.xsix103.cn/prac-manage/index/student/stuInfo','Origin':'https://www.xsix103.cn','Accept':'application/json, text/plain, */*','Authorization':heads+Token}
    
        print(payload)
    
    r=requests.options('https://api.xsix103.cn/prac_manage/v1/info/'+id)
        r=requests.get('https://api.xsix103.cn/prac_manage/v1/info/'+id,headers=payload)
    
        print(r.text)
        b=json.loads(r.text)
    
        company=str(b['phiCompany'])
        add=str(b['phiRemark'])
        store(stu_id,company,add)
    try:
        raw_num()
    except Exception as e:
        print(e)
    db.close()
    

    相关文章

      网友评论

          本文标题:爬取某届学生实习单位

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