同步操作将从 cyyz/Cov 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
import sysimport timeimport pymysqlimport jsonimport tracebackimport requestsfrom selenium.webdriver import Chrome,ChromeOptionsdef get_tencent_data():url1 = "https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5"url2 = "https://view.inews.qq.com/g2/getOnsInfo?name=disease_other"headers = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36"}r1 = requests.get(url1, headers)r2 = requests.get(url2, headers)res1 = json.loads(r1.text)res2 = json.loads(r2.text)data_all1 = json.loads(res1["data"])data_all2 = json.loads(res2["data"])history = {}for i in data_all2["chinaDayList"]:ds = "2020." + i["date"]tup = time.strptime(ds, "%Y.%m.%d") # 匹配时间ds = time.strftime("%Y-%m-%d", tup) # 改变时间格式confirm = i["confirm"]suspect = i["suspect"]heal = i["heal"]dead = i["dead"]history[ds] = {"confirm": confirm, "suspect": suspect, "heal": heal, "dead": dead}for i in data_all2["chinaDayAddList"]:ds = "2020." + i["date"]tup = time.strptime(ds, "%Y.%m.%d") # 匹配时间ds = time.strftime("%Y-%m-%d", tup) # 改变时间格式confirm = i["confirm"]suspect = i["suspect"]heal = i["heal"]dead = i["dead"]history[ds].update({"confirm_add": confirm, "suspect_add": suspect, "heal_add": heal, "dead_add": dead})details = []update_time = data_all1["lastUpdateTime"]data_country = data_all1["areaTree"]data_province = data_country[0]["children"]for pro_infos in data_province:province = pro_infos["name"]for city_infos in pro_infos["children"]:city = city_infos["name"]confirm = city_infos["total"]["confirm"]confirm_add = city_infos["today"]["confirm"]heal = city_infos["total"]["heal"]dead = city_infos["total"]["dead"]details.append([update_time, province, city, confirm, confirm_add, heal, dead])return history, detailsdef get_conn():# 建立连接conn = pymysql.connect(host="###", user="###", password="###", db="cov", charset="utf8")# c创建游标cursor = conn.cursor()return conn, cursordef close_conn(conn, cursor):if cursor:cursor.close()if conn:conn.close()#定义更新细节函数def update_details():cursor = Noneconn = Nonetry:li = get_tencent_data()[1]#1代表最新数据conn,cursor = get_conn()sql = "insert into details(update_time,province,city,confirm,confirm_add,heal,dead) values(%s,%s,%s,%s,%s,%s,%s)"sql_query = 'select %s=(select update_time from details order by id desc limit 1)'#对比当前最大时间戳cursor.execute(sql_query,li[0][0])if not cursor.fetchone()[0]:print(f"{time.asctime()}开始更新数据")for item in li:cursor.execute(sql,item)conn.commit()print(f"{time.asctime()}更新到最新数据")else:print(f"{time.asctime()}已是最新数据!")except:traceback.print_exc()finally:close_conn(conn,cursor)#插入历史数据def insert_history():cursor = Noneconn = Nonetry:dic = get_tencent_data()[0]#0代表历史数据字典print(f"{time.asctime()}开始插入历史数据")conn,cursor = get_conn()sql = "insert into history values (%s,%s,%s,%s,%s,%s,%s,%s,%s)"for k,v in dic.items():cursor.execute(sql,[k, v.get("confirm"),v.get("confirm_add"),v.get("suspect"),v.get("suspect_add"),v.get("heal"),v.get("heal_add"),v.get("dead"),v.get("dead_add")])conn.commit()print(f"{time.asctime()}插入历史数据完毕")except:traceback.print_exc()finally:close_conn(conn,cursor)#更新历史数据def update_history():cursor = Noneconn = Nonetry:dic = get_tencent_data()[0]#0代表历史数据字典print(f"{time.asctime()}开始更新历史数据")conn,cursor = get_conn()sql = "insert into history values (%s,%s,%s,%s,%s,%s,%s,%s,%s)"sql_query = "select confirm from history where ds=%s"for k,v in dic.items():if not cursor.execute(sql_query,k):cursor.execute(sql,[k, v.get("confirm"),v.get("confirm_add"),v.get("suspect"),v.get("suspect_add"),v.get("heal"),v.get("heal_add"),v.get("dead"),v.get("dead_add")])conn.commit()print(f"{time.asctime()}历史数据更新完毕")except:traceback.print_exc()finally:close_conn(conn,cursor)#爬取百度热搜数据def get_baidu_hot():option = ChromeOptions()option.add_argument("--headless")#隐藏游览器option.add_argument("--no--sandbox")browser = Chrome(options = option,executable_path="chromedriver-dev.exe")url = "https://voice.baidu.com/act/virussearch/virussearch?from=osari_map&tab=0&infomore=1"browser.get(url)#print(brower.page_source)but = browser.find_element_by_css_selector('#ptab-0 > div > div.VirusHot_1-5-3_32AY4F.VirusHot_1-5-3_2RnRvg > section > div')#点击加载更多but.click()time.sleep(1)#爬虫与反爬,模拟人等待1秒c = browser.find_elements_by_xpath('//*[@id="ptab-0"]/div/div[2]/section/a/div/span[2]')context = [i.text for i in c]browser.close()return contextdef update_hotsearch():cursor = Noneconn = Nonetry:context = get_baidu_hot()print(f"{time.asctime()}开始更新数据")conn,cursor = get_conn()sql = "insert into hotsearch(dt,content) values(%s,%s)"ts = time.strftime("%Y-%m-%d %X")for i in context:cursor.execute(sql,(ts,i))conn.commit()print(f"{time.asctime()}数据更新完毕")except:traceback.print_exc()finally:close_conn(conn,cursor)if __name__ == "__main__":l = len(sys.argv)if l == 1:s = """请输入参数参数说明,up_his 更新历史记录表up_hot 更新实时热搜up_det 更新详细表"""print(s)else:order = sys.argv[1]if order == "up_his":update_history()elif order == "up_det":update_details()elif order == "up_hot":update_hotsearch()
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。