美文网首页python技巧
使用request库小案例二

使用request库小案例二

作者: 陆_志东 | 来源:发表于2018-08-23 10:10 被阅读0次
    import json
    # import gevent
    # from gevent.queue import Queue
    # from gevent import monkey
    from util.mysql_conn import MysqlConn
    from setting import logger_root, MYSQL_NEW_YQ_CONFIG, YQ_ES
    import os
    import requests
    import signal
    import time
    from elasticsearch import Elasticsearch
    
    
    # monkey.patch_all()
    
    
    class Task:
        def __init__(self):
            self.last_id = 0
            self.terminated_flag = False
            if os.path.exists("./data/table1_last_id.txt"):
                with open("./data/table1_last_id.txt", "r", encoding="utf-8", newline="\n") as f:
                    self.last_id = int(f.readline().strip())
            try:
                self.mysql_client = MysqlConn(logger_root, MYSQL_NEW_YQ_CONFIG)
            except Exception as e:
                logger_root.error("mysql connect is error {}".format(e))
                os._exit(-1)
    
        def start(self):
            signal.signal(signal.SIGTERM, self._term_handler)
            signal.signal(signal.SIGINT, self._term_handler)
            # 查询数据库
            try:
                while not self.terminated_flag:
                    data_list = self.query_mysql()
                    if data_list is None:
                        logger_root.error("mysql select error")
                       
                        time.sleep(3)
                        continue
                    if not data_list:
                        logger_root.warning("mysql select get list is []")
                        time.sleep(3)
                        continue
                    for data in data_list:
                        if self.terminated_flag:
                            return
                        self.last_id = data["id"]
                        comp_name = data["comp_names"]
                        type = data["type"]
                        full = 0
                        if int(type) == 2 or int(type) == 3:
                            full = 1
                        eid_dict = self.get_eid(comp_name)
                        eid = ""
                        if eid_dict:
                            eid = eid_dict["eid"]
                            logger_root.info("get comp_name {} type {} eid{}".format(comp_name, type, eid))
                        # 存储数据库
                        self.write_mysql(comp_name,full,eid)
            except Exception as e:
                self.terminated_flag = True
                self.save_file()
    
        def write_mysql(self, comp_name,full,eid):
            sql_str = "select id from yq_annotated_company_keywords where comp_name = %s"
            sql_params = (comp_name,)
            res = self.mysql_client.execute_query(sql_str,sql_params)
            if res is None:
                logger_root.error("insert mysql error with sql:{}".format(sql_str%sql_params))
                return
            if res:
                logger_root.info("data at mysql already exists,continue insert")
                return
            sql_str = "insert into yq_annotated_company_keywords(comp_name,full,eid) values(%s,%s,%s)"
            sql_params = (comp_name,full,eid)
            res, err = self.mysql_client.execute_write(sql_str=sql_str,sql_params=sql_params)
            if res is None or not res:
                logger_root.error("insert mysql error with sql:{}".format(sql_str%sql_params))
                return
            logger_root.info("insert mysql success with comp_name:{}".format(comp_name))
            return
    
        def query_mysql(self):
            sql_str = "select id,comp_names,type from names_type where id > %s limit 30"
            sql_params = (self.last_id,)
            data_list = self.mysql_client.execute_query(sql_str, sql_params)
            return data_list
    
        def get_eid(self, comp_name):
            dict1 = json.dumps({"name": comp_name}, ensure_ascii=False).encode("utf-8")
            res = requests.post("http://d6064.intsig.net/yq/tool/fetch_eid", data=dict1)
            if res.status_code != 200:
                logger_root.warning("eid get status {}".format(res.status_code))
                return
            return json.loads(res.text)
    
        def _term_handler(self, signal_num, frame):
            logger_root.info("job stop with {}".format(signal_num))
            self.terminated_flag = True
            self.save_file()
    
        def save_file(self):
            with open("./data/table1_last_id.txt", "w", encoding="utf-8", newline="\n") as f:
                f.write(str(self.last_id))
    
    
    if __name__ == "__main__":
        task = Task()
        task.start()
    
    

    相关文章

      网友评论

        本文标题:使用request库小案例二

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