예제 #1
0
    def insert_lhb_detail_table(self, items):
        """
        This method inserts a list of items into table cinema_info
        Parameters
        ----------
        items: list of cinema items to insert

        Returns
        -------
        None
        """
        for item in items:
            row = (item['lhb_date'], item['stock_id'], item['stock_name'],
                   item['reason'].encode('utf-8'),
                   item['yyb_name'].encode('utf-8'), item['buy_or_sell'],
                   item['buy_or_sell_order'],
                   item['buy_value'] if item['buy_value'] != '-' else 0,
                   item['buy_value_percent']
                   if item['buy_value_percent'] != '-' else 0,
                   item['sell_value'] if item['sell_value'] != '-' else 0,
                   item['sell_value_percent'] if
                   item['sell_value_percent'] != '-' else 0, item['net_value'],
                   get_current_timestamp("Asia/Shanghai"))
            try:
                self.database_instance.insert_detail_info_dfcf(row)
            except mysql.connector.errors.IntegrityError as e:
                print(item)
                self.logger.info(item)
                self.logger.error(e)
예제 #2
0
    def insert_data(self, insert_ddl, insert_data):
        try:
            self.cursor.execute(insert_ddl, insert_data)
            self.connection.commit()
            self.logger.info('Insertion succeed! Timestamp: {0} {1}'
                             .format("UTC+08:00", get_current_timestamp("Asia/Shanghai")))
            return True
        except mysql.connector.errors.OperationalError as err:
            self.logger.exception('Insertion failed. Exception: {0}. Timestamp: {1} {2}'
                                  .format(err, "UTC+08:00", get_current_timestamp("Asia/Shanghai")))
            self.logger.info('====== Reconnet to mysql ======')
            self.connect_db()
            self.cursor.execute(insert_ddl, insert_data)
            self.connection.commit()
            self.logger.info('Insertion succeed! Timestamp: {0} {1}'
                             .format("UTC+08:00", get_current_timestamp("Asia/Shanghai")))

        except mysql.connector.Error as err:
            self.logger.exception('Insertion failed. Exception: {0}. Timestamp: {1} {2}'
                                  .format(err, "UTC+08:00", get_current_timestamp("Asia/Shanghai")))
            return False
예제 #3
0
    def insert_lhb_detail_table(self, items):
        """
        Parameters
        ----------
        items: list of cinema items to insert

        Returns
        -------
        None
        """
        for item in items:
            row = (item['stock_id'],
                   item['end_date'],
                   item['reason'].encode('utf-8'),
                   item['change_percent'],
                   item['buy_value'],
                   item['sell_value'],
                   item['net_value'],
                   get_current_timestamp("Asia/Shanghai"))
            self.database_instance.insert_detail_info(row)
예제 #4
0
    def insert_lhb_summary_table(self, items):
        """
        This method inserts a list of items into table cinema_info
        Parameters
        ----------
        items: list of cinema items to insert

        Returns
        -------
        None
        """
        for item in items:
            row = (item['stock_id'], item['end_date'],
                   item['reason'].encode('utf-8'), item['change_percent'],
                   item['buy_value'], item['sell_value'], item['net_value'],
                   get_current_timestamp("Asia/Shanghai"))
            try:
                self.database_instance.insert_summary_info(row)
            except Exception as e:
                self.logger.info(item)
                self.logger.error(e)
예제 #5
0
    def insert_lhb_summary_table(self, items):
        """
        This method inserts a list of items into table cinema_info
        Parameters
        ----------
        items: list of cinema items to insert

        Returns
        -------
        None
        """
        for item in items:
            row = (item['lhb_date'], item['stock_id'], item['stock_name'],
                   item['close_price'] if item['close_price'] != '' else -1,
                   decimal.Decimal("%.2f" % float(item['change_percent']))
                   if item['change_percent'] != '' else -10000,
                   item['lhb_net_value'] if item['lhb_net_value'] != '' else 0,
                   item['lhb_buy_value'] if item['lhb_buy_value'] != '' else 0,
                   item['lhb_sell_value'] if item['lhb_sell_value'] != '' else
                   0, item['lhb_total_value']
                   if item['lhb_total_value'] != '' else 0,
                   item['trade_amount'] if item['trade_amount'] != '' else -1,
                   decimal.Decimal("%.2f" % float(item['net_value_percent']))
                   if item['net_value_percent'] != '' else -1,
                   decimal.Decimal("%.2f" % float(item['total_value_percent']))
                   if item['total_value_percent'] != '' else -1,
                   decimal.Decimal("%.2f" % float(item['turnover_ratio']))
                   if item['turnover_ratio'] != '' else -1,
                   item['reason'].encode('utf-8'),
                   get_current_timestamp("Asia/Shanghai"))
            try:
                self.database_instance.insert_summary_info_dfcf(row)
            except Exception as e:
                print(item)
                self.logger.info(item)
                self.logger.error(e)
예제 #6
0
    def parse(self, response):
        """
        It's the method to pass the lhb detail info from response object
        Parameters
        ----------
        response

        Returns
        -------

        """
        stock_id = re.search(r'stockcode=(\d+)&', response.url).group(1)
        summary_tables = response.css('.tithd-s1.mt')
        summary_table_list = []
        reason_list = []
        for summary_table in summary_tables:
            # 抓上榜原因
            reason = summary_table.css('p')[0].xpath('text()').extract_first()
            reason_list.append(reason)
            # 上榜原因下面的总成交数据
            text = summary_table.css('i').xpath('text()').extract()
            summary_table_list.append(
                list(map(lambda x: re.sub('[^0-9\.]+', '', x), text)))

        detail_tables = response.css('.table-s1.mt')
        print(len(detail_tables))
        detail_table_lists = []
        i = 0
        for detail_table in detail_tables:
            trs = detail_tables.css('tr')
            detail_tables_list = []
            for tr in trs[2:7]:
                item = LhbDetailItem()
                td_list = tr.css('td').xpath('text()').extract()
                # institution name
                institution_name = tr.css('td.tl').css('a').xpath(
                    'text()').extract()
                item['institution_name'] = institution_name
                # trade detail url
                trade_detail_url = tr.css('td.last').css(
                    'a::attr(href)').extract()
                item['trade_detail_url'] = trade_detail_url
                row_list = list(map(lambda x: x.encode('utf8'), td_list))[3:8]
                numbers_list = list(
                    map(lambda x: re.sub('[^0-9\.\-]+', '', x.decode('utf8')),
                        row_list))
                # 买入金额
                item['buy_value'] = numbers_list[0]
                # 买入金额/总成交额
                item['buy_over_total_ratio'] = numbers_list[1]
                # 卖出金额
                item['sell_value'] = numbers_list[2]
                # 卖出金额/总成交额
                item['sell_over_total_ratio'] = numbers_list[3]
                # 净买入金额
                item['net_buy_value'] = numbers_list[4]
                #上榜原因
                item['reason'] = reason_list[i]
                # 收盘价
                item['close_price'] = summary_table_list[i][0]
                # 涨跌幅
                item['change_percent'] = summary_table_list[i][1]
                # 总成交量
                item['total_volume'] = summary_table_list[i][2]
                # 总成交金额
                item['total_amount'] = summary_table_list[i][3]
                # 爬取时间
                item['crawl_date'] = get_current_timestamp("Asia/Shanghai")
                yield item
            i += 1
예제 #7
0
    def insert_lhb_table(self, items):
        """
        This method inserts a list of items into table cinema_info
        Parameters
        ----------
        items: list of cinema items to insert

        Returns
        -------
        None
        """
        for item in items:
            detail_row = (item['lhb_date'], item['stock_id'],
                          item['stock_name'], item['reason'].encode('utf-8'),
                          item['yyb_name'].encode('utf-8'),
                          item['buy_or_sell'], item['buy_or_sell_order'],
                          item['buy_value'] if item['buy_value'] != '-' else 0,
                          item['buy_value_percent']
                          if item['buy_value_percent'] != '-' else 0,
                          item['sell_value'] if item['sell_value'] != '-' else
                          0, item['sell_value_percent']
                          if item['sell_value_percent'] != '-' else 0,
                          item['net_value'],
                          get_current_timestamp("Asia/Shanghai"))
            summary_item = item['summary_item']
            summary_row = (
                summary_item['lhb_date'], summary_item['stock_id'],
                summary_item['stock_name'], summary_item['close_price']
                if summary_item['close_price'] != '' else -1,
                decimal.Decimal("%.2f" % float(summary_item['change_percent']))
                if summary_item['change_percent'] != '' else -10000,
                summary_item['lhb_net_value']
                if summary_item['lhb_net_value'] != '' else 0,
                summary_item['lhb_buy_value']
                if summary_item['lhb_buy_value'] != '' else 0,
                summary_item['lhb_sell_value']
                if summary_item['lhb_sell_value'] != '' else 0,
                summary_item['lhb_total_value']
                if summary_item['lhb_total_value'] != '' else 0,
                summary_item['trade_amount']
                if summary_item['trade_amount'] != '' else -1,
                decimal.Decimal("%.2f" %
                                float(summary_item['net_value_percent']))
                if summary_item['net_value_percent'] != '' else -1,
                decimal.Decimal("%.2f" %
                                float(summary_item['total_value_percent']))
                if summary_item['total_value_percent'] != '' else -1,
                decimal.Decimal("%.2f" % float(summary_item['turnover_ratio']))
                if summary_item['turnover_ratio'] != '' else -1,
                summary_item['reason'].encode('utf-8'),
                get_current_timestamp("Asia/Shanghai"))

            try:
                if not self.database_instance.is_detail_info_existed(
                        item['stock_id'], item['lhb_date'], item['reason'],
                        item['yyb_name'], item['buy_or_sell'],
                        item['buy_or_sell_order']):
                    self.database_instance.insert_detail_info_dfcf(detail_row)
                if not self.database_instance.is_summary_info_existed(
                        summary_item['stock_id'], summary_item['lhb_date'],
                        summary_item['reason']):
                    self.database_instance.insert_summary_info_dfcf(
                        summary_row)
            except mysql.connector.errors.IntegrityError as e:
                self.logger.info(item)
                self.logger.error(e)