Ejemplo n.º 1
0
    def parseMarketSeason(self, url_suffix, mod=2, **kwargs):
        if mod < 0 or mod > 4 or not isinstance(mod, int):
            raise ValueError("mod取值只可以是0到4的整数值")
        if mod < 2: step, freq = 3, 5
        elif mod == 2: step, freq = 1, 4
        else: step, freq = 6, 5

        this = self.allow_domains[0] + url_suffix
        objprefix = "易车指数##市场大盘##份额趋势(近%d个月均值)" % step + "##%s"
        suffix = url_suffix.split("/")[-1]
        param = {"timeType": "month"}

        for year in (2018, 2017):
            for month in range(0, 13, step):
                try:
                    tmp = "tmpyiche:" + suffix + ":%s"
                    if month + step > 12: continue
                    param['fromTime'] = "%d-%02d-01" % (year, month)
                    param['toTime'] = EasyMethod.fuckMonthEnd(year=year,
                                                              month=month +
                                                              step)
                    response = Yiche.startRequest(url=this, data=param)
                    # type 表示 类型
                    if kwargs["type"] == 1:
                        objname = jsonpath(response,
                                           "$..series[*].data[*].name")
                        objdata = jsonpath(response,
                                           "$..series[*].data[*].symbolSize")
                        if objdata == False:
                            objdata = jsonpath(response,
                                               "$..series[*].data[*].value")

                    elif kwargs["type"] == 0:
                        objname = jsonpath(response, "$..yAxis[*].data")[0]
                        objdata = jsonpath(response, "$..series[*].data")[0]

                    print(objdata)
                    map(
                        lambda a, b: self._Rconn.hset(tmp % a, param['toTime'],
                                                      b.decode("utf8"))
                        if b else 1, objname, objdata)

                except Exception as e:
                    print(e)

        for k in self._Rconn.keys("tmpyiche:%s*" % suffix):
            data = self._Rconn.hgetall(k)
            objname = objprefix % k.split(":")[-1]
            yield {
                "objname": objname,
                "data": data,
                "unit": "%",
                "freq": freq
            }, {
                "param": param
            }
            print("delete %s" % k)
            self._Rconn.delete(k)
Ejemplo n.º 2
0
    def parseSales(self, code, name, **kwargs):
        if kwargs['pid'] > 6: yield 0
        param9 = {"id": kwargs["pid"], "value": code}

        url = self.allow_domains[0] + self.obj_urls[9]
        response = Yiche.startRequest(url, data=param9)
        objdetail = jsonpath(response, "$..thead[*].name")[0]
        objtime = objdetail[0]
        objname = objdetail[2]
        objtime = EasyMethod.fuckMonthEnd(re.sub("[^0-9]", "", objtime))
        objdata = jsonpath(response, "$..tbody")[0]
        for obj in objdata:
            yield {
                "objname": "%s##%s##%s" % (name, objname, obj['name']),
                "data": {
                    objtime: obj['index']
                },
                "unit": "辆",
                "freq": 4
            }, {
                "param": param9
            }

        self.parseSales(code=code, name=name, pid=kwargs['pid'] + 1)