def check_fund_status(taskobj): config = global_obj.get_obj("config") fund_list = config.get("fund_list", []) if len(fund_list) == 0: log.Waring("fund_list is empty") return ls = [] for code in fund_list: old = fund_api.load_fund(code) code = str(code) fund_api.spiker_fund_and_save(code) ret = fund_api.load_fund(code) log.Info("spiker fund done", code) if old and ret: result = compare_fund(old,ret) if result: ls.append(result) else: log.Waring("load fund false", taskobj, type(old), type(ret)) log.Info("spiker fund all", len(ls)) if len(ls) > 0: htmobj = html.CHtml("你的韭菜日报:") for v in ls: line = "基金:%s(%s) 变化"%(v["name"],v["code"]) htmobj.AddLine(line) htmobj.AddTable(v["data"], v["head"]) html_text = htmobj.GetHtml() mailobj = global_obj.get_obj("mail") message = mailobj.HtmlMailMessage() if message.SendMessage("韭菜研报", html_text): log.Info("send jiucai mail done") else: log.Info("基金信息没有变化")
def get_info2(key): parttern = './div[@data-component="baseinfo"]//div[@class="introContent"]//div[@class="%s"]//ul//li' % ( key) ls = htree.xpath(parttern) if len(ls) == 0: log.Waring("get_house_info -> get_info -> get_info2 false", key) return d = {} for li in ls: ls1 = li.xpath('./span/text()') if len(ls1) > 1 and trim_str(ls1[0]) == "抵押信息": #特殊处理该处信息 ls2 = ls1[1:] else: if key == "transaction": #交易属性 ls2 = li.xpath('.//a/text()') else: ls2 = li.xpath('./text()') if len(ls1) == 0 or len(ls2) == 0: log.Waring("get_house_info -> get_info base false", ls1, ls2) continue k = trim_str(ls1[0]) v = trim_str(ls2[0]) if k == "建筑面积" or k == "套内面积": v = tools.tofloat(v.replace("㎡", ""), 5) data[k] = v
def get_total(data, htree): ls = htree.xpath( './/div[@class="overview"]//span[@class="total"]/text()') if len(ls) == 0 or not tools.is_float(ls[0]): log.Waring("get_house_info -> get_total false") return data["价格"] = tools.tofloat(ls[0])
def get_community_info(cityName, keyword, filter_word=None): ''' cityName: 城市 keyword: 小区名 filter_word 过滤关键字, 对region进行匹配 @return 返回小区列表 ''' global g_session data = { "cityName": cityName, "channel": "xiaoqu", "keyword": keyword, "query": keyword, } url = url_encode("https://ajax.api.ke.com/sug/headerSearch", data) result, _ = get_url(url, session=g_session) result_list = {} if is_not_ok(result): log.Error("get_community_info url false", cityName, keyword, result.status_code) return result_data = js2py_val(result.content) if result_data["errno"] != 0: log.Error("get_community_info not ok", cityName, keyword, keyword) return result_list if len(result_data["data"]) == 0: log.Waring("get_community_info data is nil", cityName, result) return result_list for data in result_data["data"]["result"]: if filter_word and not filter_word in data["region"]: log.Info("get_community_info ingore by filter_word", cityName, keyword, data) continue new_data = { "city": cityName, "name": data["text"], "id": data["id"], "region": data["region"], "house_url_list": [], "house_data": {}, } new_data["house_url_list"] = get_house_list(data["id"]) result_list[new_data["id"]] = new_data return result_list
def get_house_list(cid): url = "https://gz.ke.com/ershoufang/c%s/" % (cid) global g_session result, _ = get_url(url, session=g_session) if result.status_code != 200: log.Waring("get_house_list url false", cid) return False #获取房子列表 tree = etree.HTML(result.text) url_ls = tree.xpath( '//div[@class="leftContent"]//ul[@class="sellListContent"]//li[@class="clear"]/a/@href' ) return url_ls
def get_house_info(url, house_data): def get_total(data, htree): ls = htree.xpath( './/div[@class="overview"]//span[@class="total"]/text()') if len(ls) == 0 or not tools.is_float(ls[0]): log.Waring("get_house_info -> get_total false") return data["价格"] = tools.tofloat(ls[0]) def get_info(data, htree): #基本属性 def get_info2(key): parttern = './div[@data-component="baseinfo"]//div[@class="introContent"]//div[@class="%s"]//ul//li' % ( key) ls = htree.xpath(parttern) if len(ls) == 0: log.Waring("get_house_info -> get_info -> get_info2 false", key) return d = {} for li in ls: ls1 = li.xpath('./span/text()') if len(ls1) > 1 and trim_str(ls1[0]) == "抵押信息": #特殊处理该处信息 ls2 = ls1[1:] else: if key == "transaction": #交易属性 ls2 = li.xpath('.//a/text()') else: ls2 = li.xpath('./text()') if len(ls1) == 0 or len(ls2) == 0: log.Waring("get_house_info -> get_info base false", ls1, ls2) continue k = trim_str(ls1[0]) v = trim_str(ls2[0]) if k == "建筑面积" or k == "套内面积": v = tools.tofloat(v.replace("㎡", ""), 5) data[k] = v #data[key] = d get_info2("base") get_info2("transaction") if "价格" in data and "建筑面积" in data: data["均价"] = tools.tofloat( float(data["价格"]) / float(data["建筑面积"]), 5) r = re.match(__pHouseID, url) if not r: log.Error("get_house_info no hid", url) return None house_info = { "id": r.groups()[0], } result, _ = get_url(url, session=g_session) if result.status_code != 200: log.Waring("request house url false", url) return None htree = etree.HTML(result.text) ls = htree.xpath( '//div[@class="sellDetailPage"]//div[@data-component="overviewIntro"]') if len(ls) > 0: get_total(house_info, ls[0]) ls = htree.xpath( '//div[@class="sellDetailPage"]//div[@class="m-content"]//div[@class="box-l"]' ) if len(ls) > 0: get_info(house_info, ls[0]) house_data[house_info["id"]] = house_info