agoda获取酒店数据

最近改了改代码,正好解决了一些报错问题,更新出来。个别处会加蜜
数据库以及线程控制

from DBUtils.PooledDB import PooledDB
import requests
import demjson
import time
import random
import json
import pymysql
import datetime
import threading

b = {"user": "root",
     "passwd": "Lohas123",
     "host": "121.40.52.101",
     "db": 'price',
     "port": 3306,
     "charset": 'utf8'
     }
#改了一下-10才能将库里读完。
h = -10
class Agoda(threading.Thread):
    __pool = None
    _instance_lock = threading.Lock()

    def __init__(self):
        threading.Thread.__init__(self)
        self.indata =(datetime.datetime.now()+datetime.timedelta(days=2)).strftime('%Y-%m-%d %H:%M:%S')
        self.outdata =(datetime.datetime.now()+datetime.timedelta(days=4)).strftime("%Y-%m-%d %H:%M:%S")
        # 将数据库连接游标初始化
        self.coon = Agoda.getmysqlconn()
        self.cur = self.coon.cursor(cursor=pymysql.cursors.DictCursor)

    # sql连接池
    @staticmethod
    def getmysqlconn():
        if Agoda.__pool is None:
            __pool = PooledDB(creator=pymysql, mincached=3, maxcached=20, host=b["host"], user=b["user"],
                              passwd=b["passwd"], db=b["db"], port=b["port"], charset=b["charset"])
        return __pool.connection()

    # 插入\更新\删除sql\
    def op_insert(self, sql):

        print('op_insert', sql)
        self.cur.execute(sql)
        print("修改成功")
        self.coon.commit()

    # 查询
    def op_select(self, sql):
        print('op_select', sql)
        self.cur.execute(sql)  # 执行sql
        select_res = self.cur.fetchall()  # 返回结果为字典
        # print("查询成功")
        return select_res


    # 释放资源
    def dispose(self):
        self.coon.close()
        self.cur.close()
      
    #动态计算数据库数量
    def count(self):
        table="foreign_city_copy"
        runstatue = "isrunning"
        sql="select count(*) from {0} where {1}=0".format(table,runstatue)
        ress = (list(self.op_select(sql)[0].values())[0]//10+1)*10
        return ress
    
    #线程控制稍微改了下
    def run(self):
        global h
        count=self.count()
        while True:
            if h > count:
                break
            with Agoda._instance_lock:
                h += 10
            if h > count:
                break
            sql = "select id,name,ename,country from foreign_city_co

你可能感兴趣的:(笔记,python,agoda爬取,报错重启)