def results(): # build a request object req = request.get_json(force=True) # fetch meal and date from json packet meal = req.get('queryResult').get('parameters').get('meal') date = req.get('queryResult').get('parameters').get('date') formatted_date = '' #if no date specified from user, use today's date if date == '': formatted_date = get_date_today() else: formatted_date = format_date(date) #get menu data from database data = collection.find_one({"$and":[{"meal":meal},{"date":formatted_date}]}) resp_str = build_response(data, meal, formatted_date) return {'fulfillmentText':resp_str}
def parse_table(file_id, content_table_list, origin_title, origin_publish_date, db, logger): strip_list = [ '', '\xa0', '-', '——', '———', '—', '/', '---', '----', '--', '-----', '------' ] announcement_code = person_name = person_company = company_name = legal_representative \ = truth = punishment_basement = punishment_decision = organization = publish_date \ = litigant = '' for each_row in content_table_list: if re.search(r'行政处罚决定书?文书?号', remove_strip(each_row[0].strip())): announcement_code = each_row[-1].strip() if re.search(r'(被处罚当事人)', remove_strip(each_row[0].strip())) and \ re.search(r'(个人)', remove_strip(each_row[1].strip())) and \ re.search(r'(姓名|名称)', remove_strip(each_row[2].strip())): person_name = each_row[-1].strip() if re.search(r'(被处罚当事人)', remove_strip(each_row[0].strip())) and \ re.search(r'(个人)', remove_strip(each_row[1].strip())) and \ re.search(r'(单位)', remove_strip(each_row[2].strip())): person_company = each_row[-1].strip() if re.search(r'(被处罚当事人)', remove_strip(each_row[0].strip())) and \ re.search(r'(单位)', remove_strip(each_row[1].strip())) and \ re.search(r'(名称)', remove_strip(each_row[2].strip())): company_name = each_row[-1].strip() if re.search(r'(被处罚当事人)', remove_strip(each_row[0].strip())) and \ re.search(r'(单位)', remove_strip(each_row[1].strip())) and \ re.search(r'(法定代表人|主要负责人)', remove_strip(each_row[2].strip())): legal_representative = each_row[-1].strip() if re.search(r'(主要(违法)?违规事实|案由)', remove_strip(each_row[0].strip())): truth = each_row[-1].strip() if re.search(r'(^行政处罚依据$)', remove_strip(each_row[0].strip())): punishment_basement = each_row[-1].strip() if re.search(r'(^行政处罚决定$)', remove_strip(each_row[0].strip())): punishment_decision = each_row[-1].strip() if re.search(r'(作出.*?机关名称)', remove_strip(each_row[0].strip())): organization = each_row[-1].strip() if re.search(r'(作出.*?日期)', remove_strip(each_row[0].strip())): publish_date = each_row[-1].strip() if person_name not in strip_list: litigant += '个人姓名: ' + remove_strip(person_name) + '\n' if person_company not in strip_list: litigant += '个人就职单位: ' + remove_strip(person_company) + '\n' if company_name not in strip_list: litigant += '单位名称: ' + remove_strip(company_name) + '\n' if legal_representative not in strip_list: litigant += '单位法定代表人姓名: ' + remove_strip(legal_representative) if publish_date != '': publish_date = format_date(publish_date) else: publish_date = format_date(origin_publish_date) title = remove_strip(origin_title) result_map = { 'announcementTitle': title, 'announcementOrg': '广西银保监局', 'announcementDate': publish_date, 'announcementCode': remove_strip(announcement_code), 'facts': truth, 'defenseOpinion': '', 'defenseResponse': '', 'litigant': litigant.strip(), 'punishmentBasement': '', 'punishmentDecision': ('依据' + punishment_basement + ',' + punishment_decision).replace( '。,', ',').replace('依据根据', '依据').replace('依据依据', '依据'), 'type': '行政处罚决定', 'oss_file_id': file_id, 'status': 'not checked' } logger.info(result_map) if db.announcement.find({ 'announcementTitle': title, 'oss_file_id': file_id }).count() == 0: db.announcement.insert_one(result_map) logger.info('广西保监局 数据解析 ' + organization + ' -- 数据导入完成') else: logger.info('广西保监局 数据解析 ' + organization + ' -- 数据已经存在') db.parsed_data.update_one({'_id': file_id}, {'$set': {'parsed': True}}) logger.info('广西保监局 数据解析 ' + organization + ' -- 修改parsed完成')
def nafmii_parse(): for each_nafmii_document in db.nafmii_data.find( {'status': { '$nin': ['ignored'] }}): announcement_url = each_nafmii_document['url'] announcement_title = each_nafmii_document['title'] if '交易商协会组织召开自律处分体系讨论会' in announcement_title or \ '协会召开' in announcement_title or \ '后续管理督查纠正工作有效开展' in announcement_title: logger.warning(announcement_url + ' ' + announcement_title + ' 与监管处罚无关') db.nafmii_data.update_one({'_id': each_nafmii_document['_id']}, {'$set': { 'status': 'ignored' }}) logger.info('交易商协会' + ' 无关数据' + ' -- 修改status完成') continue if db.nafmii_data.find({ 'url': announcement_url, 'status': 'parsed' }).count() == 1 and db.parsed_data.find({ 'origin_url': announcement_url, 'oss_file_origin_url': announcement_url, 'parsed': True }).count() == 1: continue logger.info('Url to parse: ' + announcement_url) response = request_site_page(announcement_url) if response is None: logger.error('网页请求错误 %s' % announcement_url) continue soup = bs(response.content, 'lxml') if response else bs('', 'lxml') if db.parsed_data.find({ 'origin_url': announcement_url, 'oss_file_origin_url': announcement_url }).count() == 0: oss_file_map = { 'origin_url': announcement_url, 'oss_file_origin_url': announcement_url, 'origin_url_id': each_nafmii_document['_id'], 'oss_file_type': 'html', 'oss_file_name': announcement_title, 'oss_file_content': response.text.encode(response.encoding).decode('utf-8'), 'parsed': False } insert_response = db.parsed_data.insert_one(oss_file_map) file_id = insert_response.inserted_id oss_add_file( ali_bucket, str(file_id) + '/' + announcement_title + '.html', response.text.encode(response.encoding).decode('utf-8')) db.nafmii_data.update_one({'_id': each_nafmii_document['_id']}, {'$set': { 'status': 'parsed' }}) else: db.nafmii_data.update_one({'_id': each_nafmii_document['_id']}, {'$set': { 'status': 'parsed' }}) file_id = db.parsed_data.find_one({ 'origin_url': announcement_url, 'oss_file_origin_url': announcement_url })['_id'] if '“430”违规机构' not in announcement_title and \ '“831”和“1031”违规机构' not in announcement_title and \ '“1031”信息披露违规企业及信用增进机构' not in announcement_title and \ '“430”信息披露违规企业及信用增进机构' not in announcement_title and \ '协会对2011年年报及2012年一季报披露不合规机构进行自律处理' not in announcement_title and \ '协会对曲江文投等机构进行自律处分' not in announcement_title and \ '加强市场自律规范与管理,维护市场平稳健康发展--协会对特别会员山东海龙进行自律处分' not in announcement_title and \ '诫勉谈话' not in announcement_title: publish_date = format_date(each_nafmii_document['publishDate']) if len(soup.find_all(class_='Section1')) > 0: content_text = soup.find(class_='Section1').text.strip() else: content_text = soup.find(class_='TRS_PreAppend').text.strip() if re.search(r'(\d{4}年第\d+次自律处分会议)', content_text): document_code = re.search(r'(\d{4}年第\d+次自律处分会议)', content_text).group(1).strip() else: document_code = '' if document_code != '': litigant1 = re.search( r'\n(.*?)(作为(相关)?债务融资工具(发行人|主承销商|担保人)|' r'两家债务融资工具发行人在债务融资工具存续期间|' r'在债务融资工具|作为“12沈公用MTN1”的牵头主承销商及簿记管理人|在注册发行债务融资工具的过程中|' r'在银行间债券市场提供债务融资工具中介服务时)', content_text).group(1).strip() litigant = re.split('[—-]', announcement_title)[-1] else: if announcement_url == 'http://www.nafmii.org.cn/zlgl/zwrz/zlcf/201212/t20121203_18735.html': litigant1 = '在2012年第三季度财务信息披露工作中,内蒙古高等级公路建设开发有限责任公司和陕西煤业化工集团有限责任公司披露延迟' litigant = '内蒙古高等级公路建设开发有限责任公司和陕西煤业化工集团有限责任公司' else: litigant1 = re.search( r'^.*?\n(.*?)((|\(|作为(相关)?债务融资工具(发行人|主承销商|担保人)|两家债务融资工具发行人在债务融资工具存续期间|' r'在债务融资工具|作为“12沈公用MTN1”的牵头主承销商及簿记管理人|在注册发行债务融资工具的过程中|' r'在银行间债券市场提供债务融资工具中介服务时)', content_text).group(1).strip() litigant = re.split('[—-]', announcement_title)[-1] if re.search(r'(\d{4}\.\d{2}\.\d{2})', content_text): publish_date = re.search(r'(\d{4}\.\d{2}\.\d{2})', content_text).group(1).strip() publish_date = format_date(publish_date) truth = re.search(r'\n(' + litigant1 + r'[\s\S]*?)\n?(依据|根据).*?规定', content_text).group(1).strip() punishment_decision = re.search( truth.replace(r'(', r'\(').replace(r')', r'\)') + r'([\s\S]*?)$', content_text).group(1).strip() result_map = { 'announcementTitle': announcement_title, 'announcementOrg': '交易商协会', 'announcementDate': publish_date, 'announcementCode': document_code, 'facts': truth, 'defenseOpinion': '', 'defenseResponse': '', 'litigant': litigant, 'punishmentBasement': '', 'punishmentDecision': punishment_decision, 'type': '行政处罚决定', 'oss_file_id': file_id, 'status': 'not checked' } logger.info(result_map) if db.announcement.find({ 'announcementTitle': announcement_title, 'oss_file_id': file_id }).count() == 0: db.announcement.insert_one(result_map) logger.info('交易商协会 数据解析 ' + ' -- 数据导入完成') else: logger.info('交易商协会 数据解析 ' + ' -- 数据已经存在') db.parsed_data.update_one({'_id': file_id}, {'$set': { 'parsed': True }}) logger.info('交易商协会 数据解析 ' + ' -- 修改parsed完成')
def sichuan_circ(db, logger): for each_circ_data in db.circ_data.find({'origin': '四川保监局', 'status': {'$nin': ['ignored']}}): announcement_url = each_circ_data['url'] announcement_title = each_circ_data['title'] if '行政处罚实施情况' in announcement_title: logger.warning(announcement_url + ' ' + announcement_title + ' 与监管处罚无关') db.circ_data.update_one({'_id': each_circ_data['_id']}, {'$set': {'status': 'ignored'}}) logger.info('四川保监局' + ' 无关数据' + ' -- 修改status完成') continue if db.circ_data.find( {'url': announcement_url, 'status': 'parsed'}).count() == 1 and db.parsed_data.find( {'origin_url': announcement_url, 'oss_file_origin_url': announcement_url, 'parsed': True}).count() == 1: continue logger.info('四川保监局 ' + 'Url to parse: %s' % announcement_url) r = request_site_page(announcement_url) if r is None: logger.error('网页请求错误 %s' % announcement_url) continue content_soup = bs(r.content, 'lxml') if r else bs('', 'lxml') if db.parsed_data.find( {'origin_url': announcement_url, 'oss_file_origin_url': announcement_url}).count() == 0: oss_file_map = { 'origin_url': announcement_url, 'oss_file_origin_url': announcement_url, 'origin_url_id': each_circ_data['_id'], 'oss_file_type': 'html', 'oss_file_name': announcement_title, 'oss_file_content': r.text.encode(r.encoding).decode('utf-8'), 'parsed': False } insert_response = db.parsed_data.insert_one(oss_file_map) file_id = insert_response.inserted_id oss_add_file(ali_bucket, str(file_id) + '/' + announcement_title + '.html', r.text.encode(r.encoding).decode('utf-8')) db.circ_data.update_one({'_id': each_circ_data['_id']}, {'$set': {'status': 'parsed'}}) else: db.circ_data.update_one({'_id': each_circ_data['_id']}, {'$set': {'status': 'parsed'}}) file_id = db.parsed_data.find_one({'origin_url': announcement_url, 'oss_file_origin_url': announcement_url})['_id'] table_content = content_soup.find(id='tab_content') if not table_content: logger.error('网页请求错误 %s' % announcement_url) continue content_text = get_content_text(table_content.find_all('tr')[3]) if content_text == '': continue title = table_content.find_all('tr')[0].text.strip() if '行政处罚事项' in title or '行政处罚公开信息' in title: table_list = table_to_list(table_content.find_all('tr')[3].find_all('table')[-1]) result_map_list = [] for each_table_list in table_list: if each_table_list[0] == '序号': continue result_map_list.append({ 'announcementTitle': '四川银保监局行政处罚决定书(' + each_table_list[2] + ')', 'announcementOrg': '四川银保监局', 'announcementDate': format_date(each_table_list[1]), 'announcementCode': each_table_list[2], 'facts': each_table_list[4], 'defenseOpinion': '', 'defenseResponse': '', 'litigant': each_table_list[3], 'punishmentBasement': each_table_list[5], 'punishmentDecision': '依据' + each_table_list[6] + ',' + each_table_list[7], 'type': '行政处罚决定', 'oss_file_id': file_id, 'status': 'not checked' }) logger.info(result_map_list) if len(result_map_list) > 0: logger.info('四川保监局' + '解析 -- 一共有%d条数据' % len(result_map_list)) db.announcement.insert_many(result_map_list) logger.info('四川保监局' + '解析 -- 数据导入完成') db.parsed_data.update_one({'_id': file_id}, {'$set': {'parsed': True}}) logger.info('四川保监局' + '解析 -- 修改parsed完成') else: logger.warning('四川保监局' + '解析 -- 解析未能完成') else: if '处罚决定书送达公告' in title or '事先告知书送达公告' in title: document_code_compiler = re.compile(r'(川保监公告.\d{4}.\d+号)') document_code = document_code_compiler.search(title).group(1).strip() litigant_compiler = re.compile(r'^([\s\S]*?):\n' + '(经查|经检查|依据.*?有关规定)') litigant = litigant_compiler.search(content_text).group(1).replace('四川保监局行政处罚事先告知书送达公告', '').strip() else: document_code_compiler = re.compile(r'((川|宜宾)银?保监罚决?字?.\d{4}.\d+号)') if document_code_compiler.search(content_text): document_code = document_code_compiler.search(content_text).group(1).strip() litigant_compiler = re.compile( document_code.replace(r'[', r'\[').replace(r']', r'\]') + r'\n([\s\S]*?)\n' + r'(经查|经检查|依据.*?有关规定|' r'.*?期间|经我局查实|' r'.*?存在.*?违[法规]行为|' r'.*?委托未取得合法资格的个人从事保险销售活动|' r'.*?我局对.*?(开展|进行)了.*?现场检查|' r'财政部驻四川财政监察专员办事处检查发现|' r'根据举报,我局查实)') litigant = litigant_compiler.search(content_text).group(1).strip() else: if document_code_compiler.search(title): document_code = document_code_compiler.search(title).group(1).strip() else: document_code = '' litigant_compiler = re.compile(r'^([\s\S]*?)\n' + r'(经查|经检查|依据.*?有关规定|.*?期间|.*?存在.*?违[法规]行为|' r'.*?委托未取得合法资格的个人从事保险销售活动|经我局查实|' r'.*?我局对.*?(开展|进行)了.*?现场检查|' r'财政部驻四川财政监察专员办事处检查发现|' r'根据举报,我局查实)') litigant = litigant_compiler.search(content_text).group(1).strip() truth_text_str = r'(经查,|经查,|经检查,|经查实,|检查发现,|现场检查,发现|检查发现:|现场检查。检查发现|我局查实|经我局查实,)' \ r'([\s\S]*?)' \ r'(上述(违法|违规)?(事实|行为)(及相关人员责任)?(,|,)?有.*?等证据(在案)?证明(,|,|。)(足以认定。)?|' \ r'根据《中华人民共和国保险法》第一百七十一条的规定|当事人唐晓峰在申辩材料中辩称:|' \ r'中国平安财产保险股份有限公司成都市锦城支公司的上述违法行为中|' \ r'(该|你)公司.*?存在的.*?的.*?行为|上述行为违反了.*?第.*?条.*?规定|' \ r'2009年10月1日前经营活动中存在的上述违法行为,违反了《中华人民共和国保险法》(修订前)第122条的规定|' \ r'上述行为分别违反了《人身保险新型产品信息披露管理办法》(保监会令〔2009〕3号)第10条和第33条的规定|' \ r',违反了《中华人民共和国保险法》(2009年2月28日修订)第一百三十三条、《保险专业代理机构监管规定》第六十一条的规定|' \ r'你的行为违反了《中华人民共和国保险法》(2009年2月28日修订)第一百二十二条的规定|' \ r'分别违反了《保险专业代理机构监管规定》第四十九条、第六十一条和《中华人民共和国保险法》(2009年2月28日修订)第一百三十三条的规定|' \ r'上述行为分别违反了《中华人民共和国保险法》第116条第(八)款和《保险统计管理暂行规定》(保监会令〔2004〕11号)第25条的规定|' \ r'上述行为违反了《中华人民共和国保险法》第116条第(十\n三)项和《机动车交通事故责任强制保险条例》第10条的规定|' \ r',应该按照该法第一百七十三条予以处罚|' \ r'你公司的上述违法行为中,保费收入不真实、车辆使用费不真实的行为违反了《中华人民共和国保险法》(2009年2月28日修订)第八十六条的规定,应当按照该法第一百七十二条予以处罚|' \ r'上述行为分别违反了《中华人民共和国保险法》(2002年修正版)第122条、《中华人民共和国保险法》' \ r'(2009年修订版)第116条规定和《保险统计管理暂行规定》(保监会令(2004)11号)第25条规定|' \ r'上述行为违反了《中华人民共和国保险法》(修订前,下同)第106条的规定|' \ r'上述行为违反了原《保险法》第107条、第122条及《保险营销员管理规定》第43条的规定,新《保险法》第86条、第136条也作出了相应规定|' \ r'该行为违反了《保险代理机构管理规定》第2条的规定。依据《保险代理机构管理规定》第130条第一款的规定|' \ r',该行为违反《保险代理机构管理规定》第56条的规定|' \ r'上述行为违反了《中华人民共和国保险法》第122条的规定|' \ r'上述行为违反了《中华人民共和国保险法》第107条的规定|' \ r'依据《保险代理机构管理规定》第141条,我局决定|' \ r'上述行为违反了《中华人民共和国保险法》第132条|' \ r'上述行为违反了《中华人民共和国保险法》第80条规定)' truth_compiler = re.compile(truth_text_str) if truth_compiler.search(content_text): truth = truth_compiler.search(content_text).group(2).strip() else: truth_text_str = litigant + r'([\s\S]*?)' \ r'(\n上述(违规|违法)?(事实|行为)(及相关人员责任)?(,|,)?有.*?等证据(在案)?证明(,|,|。)(足以认定。)?|' \ r'上述行为分别违反了《保险营销员管理规定》第三十六条第(十八)项和第(二十一)项的规定|' \ r'上述行为违反了《中华人民共和国保险法》(修订前,下同)第107条的规定|' \ r'综上,决定对你公司处以罚款人民币壹万伍仟元(¥15,000.00)的行政处罚。)' truth_compiler = re.compile(truth_text_str) truth = truth_compiler.search(content_text).group(1).strip() if '申辩' in content_text: defense_text_str = r'((针对.*?行为.*?申辩意见|(当事人)?[^,。,;\n]*?(未)?提出(了)?陈述申辩(意见)?|' \ r'[^,。,;\n]*?向我局(报送|递交|提出)[^,。,;\n]*?|本案在审理过程中.*?提出陈述申辩|' \ r'[^,。,;\n]*?在(申辩材料|陈述申辩|陈述申辩意见|申辩意见)中(辩)?称|[^,。,;\n]*?在听证阶段提出|' \ r'[^,。,;\n]*?在法定期限内(未)?提出(了)?(听证要求|陈述申辩|陈述申辩及听证要求)|' \ r'在规定的?期限内,[^,。,;\n]*?提交了(陈述申辩材料|陈述申辩书面材料|书面陈述申辩材料))' \ r'([\s\S]*?))' \ r'(因此,我局决定|' \ r'我局经复核(认为|决定)|' \ r'本案现已审理终结|' \ r'我局经复查[^,。,;\n]*?情况|' \ r'我局[^,。,;\n]*?认真复核|' \ r'经研究,对[^,。,;\n]*?予以采纳。|' \ r'我局认为.*?申辩理由|' \ r'依据.*?我局认为.*?的申辩理由|' \ r'经研究,我局认为.*?申辩意见|' \ r'经我局审核,决定|' \ r'我局认为,上述违法行为事实清楚、证据确凿、法律法规适当|' \ r'我局对陈述申辩意见进行了复核|' \ r'经我局审核|' \ r'针对[^,。,;\n]*?的(陈述)?申辩意见,我局进行了核实|' \ r'经查,我局认为|' \ r'依据现场检查及听证情况|' \ r'经复核)' defense_compiler = re.compile(defense_text_str, re.MULTILINE) defense_list = defense_compiler.findall(content_text) if len(defense_list) != 0: defense = defense_list[-1][0] defense_response_str = defense.replace(r'[', r'\[').replace(r']', r'\]') \ + r'(([\s\S]*?)' + r'(本案现已审理终结。|不符合.*?情形。|根据.*?依法可从轻或者减轻行政处罚。|' \ r'对[^,。,;\n]*?申辩意见(不予|予以)采纳。|因此.*?申辩理由.*?成立。|' \ r'我局认为.*?申辩(理由|意见).*?符合.*?第.*?条.*?的条件.(予以采纳。)?|' \ r'不予处罚的情形。|足以认定其并非违法行为的直接责任人。|' \ r'我局对.*?请求不予采纳。))' defense_response_compiler = re.compile(defense_response_str, re.MULTILINE) if defense_response_compiler.search(content_text): defense_response = defense_response_compiler.search(content_text).group(1).strip() else: if '未' in defense: defense_response = '' else: defense_text_str = r'(你享有陈述和申辩的权利,可在送达之日起10个工作日内将陈述和申辩的书面材料提交至中国保险监督管理委员会四川监管局。逾期视为放弃陈述权和申辩权。|' \ r'在规定的?期限内.*?(未|没有)进行陈述和?申辩。|' \ r'在规定的期限内.*?既未进行陈述和申辩,也未要求举行听证。)' defense_compiler = re.compile(defense_text_str, re.MULTILINE) defense = defense_compiler.search(content_text).group(1).strip() defense_response = '' else: defense = defense_response = '' punishment_decision_text_str = r'(((依据|根据|按照).*?第.*?条.*?规定,(我局决定)?|依据前述法律规定,我局决定|' \ r'我局经复核认为|我局决定.*?作出(如下|以下)(行政)?处罚:|' \ r'依据《中华人民共和国保险法》第172条、《保险营销员管理规定》第57条,我局决定|' \ r'依据《保险营销员管理规定》第57条,我局决定|' \ r'依据《中华人民共和国保险法》第147条和《行政处罚法》第27条,我局决定|' \ r'依据《中华人民共和国保险法》第145条的规定,我局决定|' \ r'依据《保险代理机构管理规定》第141条,我局决定|' \ r'依据《中华人民共和国保险法》第145条和《保险代理机构管理规定》第138条的规定,我局决定|' \ r'依据《中华人民共和国保险法》第145条,我局决定)' \ r'([\s\S]*?))' \ r'(\n.*?本处罚决定书之日|现依法向你公告送达上述决定,自公告之日起经过60日视为送达。|' \ r'如不服本处罚决定|请严格按照《关于调整非税收入执行单位和管理办法的通知》(川保监发〔2007〕212号)规定)' punishment_decision_compiler = re.compile(punishment_decision_text_str, re.MULTILINE) punishment_decision = punishment_decision_compiler.search(content_text).group(1).strip() punishment_basis_str_list = [ r'([^\n。;]*?)(问题|行为|事项|情况|事实)([^\n。;\s]*?)违反.*?\n?.*?第.*?条?\n?.*?((的|之|等)(相关)?规定)?', r'我局认为,阳光人寿四川分公司利用保险代理人,从事以虚构保险中介业务方式套取费用等违法活动,违反了《保险法》第116条第(十)项的规定', r'我局认为,人保隆昌支公司故意编造未曾发生的保险事故、故意夸大已经发生的保险事故的损失程度进行虚假理赔,骗取保险金或者牟取其他不正当利益,违反了《保险法》第116条第(六)项的规定', r'经查,成都五丰保险代理有限公司存在编制并提供虚假的业务台帐的违法违规行为,违反了《中华人民共和国保险法》' r'(2009年2月28日修订)第一百三十三条、《保险专业代理机构监管规定》第六十一条的规定。你时任成都五丰保险代理有限公司总经理,系对该违法违规行为直接负责的主管人员', r'经查,成都五丰保险代理有限公司存在编制并提供虚假的业务台帐的违法违规行为,违反了《中华人民共和国保险法》' r'(2009年2月28日修订)第一百三十三条、《保险专业代理机构监管规定》第六十一条的规定。你时任成都五丰保险代理有限公司业务主任,系该违法违规行为的直接责任人员' ] punishment_basis_str = '|'.join(punishment_basis_str_list) punishment_basis_compiler = re.compile(r'[。\n;]' + '(' + punishment_basis_str + ')' + '.(\n?依据|\n?根据|\n?鉴于|\n?(应当)?按照)', re.MULTILINE) punishment_basis_list = punishment_basis_compiler.findall(content_text) punishment_basis = ';'.join([kk[0].strip() for kk in punishment_basis_list]) publish_date_text = re.search( punishment_decision.replace(r'(', r'\(').replace(r')', r'\)').replace(r'[', r'\[').replace(r']', r'\]'). replace(r'*', r'\*') + r'([\s\S]*?)$', content_text).group(1).replace('\n', '') if re.search(r'.{4}年.{1,2}月.{1,3}日', publish_date_text): publish_date = re.findall('.{4}年.{1,2}月.{1,3}日', publish_date_text)[-1] m = re.match("([0-9零一二两三四五六七八九十〇○OO]+年)?([0-9一二两三四五六七八九十]+)月?([0-9一二两三四五六七八九十]+)[号日]?", publish_date) real_publish_date = get_year(m.group(1)) + str(cn2dig(m.group(2))) + '月' + str(cn2dig(m.group(3))) + '日' else: publish_date_text = table_content.find_all('tr')[1].text publish_date = re.findall(r'\d{4}-\d{1,2}-\d{1,2}', publish_date_text)[-1] real_publish_date = publish_date.split('-')[0] + '年' + str(int(publish_date.split('-')[1])) + '月' + str( int(publish_date.split('-')[2])) + '日' result_map = { 'announcementTitle': title, 'announcementOrg': '四川银保监局', 'announcementDate': real_publish_date, 'announcementCode': document_code, 'facts': truth, 'defenseOpinion': defense, 'defenseResponse': defense_response, 'litigant': litigant[:-1] if litigant[-1] == ':' else litigant, 'punishmentBasement': punishment_basis, 'punishmentDecision': punishment_decision, 'type': '行政处罚决定', 'oss_file_id': file_id, 'status': 'not checked' } logger.info(result_map) if db.announcement.find( {'announcementTitle': result_map['announcementTitle'], 'oss_file_id': file_id, 'litigant': result_map['litigant']}).count() == 0: db.announcement.insert_one(result_map) logger.info('四川保监局 数据解析 ' + ' -- 数据导入完成') else: logger.info('四川保监局 数据解析 ' + ' -- 数据已经存在') db.parsed_data.update_one({'_id': file_id}, {'$set': {'parsed': True}}) logger.info('四川保监局 数据解析 ' + ' -- 修改parsed完成')
def parse_csrc(url, doc_type, data_id, org): logger.info(doc_type) logger.info('url to parse ' + url) r = request_site_page(url) if r is None: logger.error('网页请求错误') return content_soup = bs(r.text.encode(r.encoding).decode('utf-8'), 'lxml') if doc_type != '要闻': content_text = get_content_text(content_soup.find(class_='mainContainer')) head_info = content_soup.find(class_='headInfo') title = head_info.find_all('tr')[4].text.split(':')[1].strip() if db.parsed_data.find({'origin_url': url, 'oss_file_origin_url': url}).count() == 0: oss_file_map = { 'origin_url': url, 'oss_file_origin_url': url, 'origin_url_id': data_id, 'oss_file_type': 'html', 'oss_file_name': title, 'oss_file_content': r.text.encode(r.encoding).decode('utf-8'), 'parsed': False } response = db.parsed_data.insert_one(oss_file_map) file_id = response.inserted_id oss_add_file(ali_bucket, str(file_id) + '/' + title + '.html', r.text.encode(r.encoding).decode('utf-8')) db.csrc_data.update_one({'_id': data_id}, {'$set': {'status': 'parsed'}}) else: db.csrc_data.update_one({'_id': data_id}, {'$set': {'status': 'parsed'}}) file_id = db.parsed_data.find_one({'origin_url': url, 'oss_file_origin_url': url})['_id'] if doc_type == '行政处罚决定': real_publish_date = format_date(head_info.find_all('tr')[2].find_all('td')[2].text.split(':')[1].strip()) document_code = re.search(r'\n((证监罚字)?.\d{4}.\d+号)\n', content_text).group(1).strip() litigant_compiler = re.compile(document_code.replace(r'[', r'\[').replace(r']', r'\]') + r'\n([\s\S]*?)' r'(依据[\s\S]*?规定|经查明|经查|.*?对.*?进行.*?调查|' r'张家界旅游开发股份有限公司(以下简称张家界公司)有关人员信息披露违法案|' r'泰阳证券有限责任公司(以下简称“泰阳证券”)证券违法案|' r'民安证券挪用客户交易结算资金一案,我会于2005年6月7日决定立案调查|' r'长沙市商业银行非法划扣泰阳证券有限责任公司(以下简称泰阳证券)客户交易结算资金一案|' r'上海大众公用事业(集团)股份有限公司\(以下简称大众公用\)证券违法案|' r'广东科龙电器股份有限公司(以下简称科龙公司)|' r'武汉证券有限责任公司(以下简称武汉证券)责任人员违法案|' r'日前,深大通违法一案, 已由我会调查、审理终结,并依法向当事人履行了事先告知程序。|' r'四通集团高科技股份有限公司(以下简称四通高科)信息披露违法案|' r'日前|.*?一案,现已|.*?已由我会调查审理终结|.*?立案调查|.*?一案)') if litigant_compiler.search(content_text): litigant = litigant_compiler.search(content_text).group(1).strip() else: litigant = re.search(r'^.*?\n\n\n\n.*?\n([\s\S]*?)依据.*?规定', content_text).group(1).strip() if litigant == '': litigant = re.search(r'关于(.*?)违反.*?处罚决定', title).group(1).strip() truth_text_str = r'((.*?经查|二、|三、|四、|(二)|五、|司法机关认定.*?存在以下违法事实:|现查明|一、(违规|违法| 违规)(事实|行为))' \ r'[\s\S]*?)' \ r'((上述|以上)(违法(违规)?)?(事实|情况|行为)[\s\S]*?等?[^。,\n]*?(证据|佐证|谈话笔录等|作证)|' \ r'陈述等证据证明,事实清楚,证据充分,足以认定。|' \ r'以上事实,有相关公告、《评估报告》、相关协议、评估工作底稿、汽车厂商出具的相关说明、保千里电子业务员出具的相关说明、相关人员询问笔录、支付凭证等证据证明,足以认定。|' \ r'虞凌云的上述行为,违反了《证券法》第七十三条、第七十六条第一款的规定,构成第二百零二条所述内幕交易行为。|' \ r'我会认为,刘长鸿、冯文渊使用其控制的账户组,操纵“南通锻压”、“北京旅游”等两只股票|' \ r'苏彩龙在知悉内幕信息且该内幕信息未公开的情况下,建议梁准买入“和佳股份”,而梁准在明知苏彩龙和佳股份董秘身份的情况下,' \ r'在内幕信息公开前、与苏彩龙联络之后交易了“和佳股份”。|' \ r'朱继华上述交易“德豪润达”股票的行为违反了《证券法》第七十三条、七十六条的规定,构成《证券法》第二百零二条所述“内幕交易”的情形。|' \ r'张彦上述交易“德豪润达”股票的行为违反了《证券法》第七十三条、七十六条的规定|' \ r'吴建敏使用“苏某某”账户交易红太阳股票的行为违反了《证券法》第四十五条第二款“为上市公司出具审计报告|' \ r'徐东波的上述行为违反了《证券法》第七十六条的规定,构成《证券法》第二百零二条所述“内幕交易”的情形。|' \ r'李国东的上述行为违反了《证券法》第七十七条的规定,构成《证券法》第二百零三条所述“操纵证券市场”的情形。|' \ r'舒文胜、朱项平身为从业人员期间买卖股票的行为违反了《证券法》第四十三条的规定|' \ r'《补充协议》中有天目药业应收账款清收等内容,属于《上市公司信息披露管理办法》第三十条第二款第(三)项“公司订立重要合同|' \ r'我会认为,李德胜、丁彦森出租个人业务资格的行为违背了其作为执业人员应负的诚信义务|' \ r'国能集团\n2005\n年年度报告、\n2006\n年年度报告|' \ r'方向光电未按规定披露信息、所披露的信息存在虚假记载和重大遗漏的行为|' \ r'万基集团利用他人账户买卖证券的行为,违反了《证券法》第八十条的规定|' \ r'按照《证券法》第六十七条关于“发生可能对上市公司股票交易价格产生较大影响的重大事件|' \ r'韩偲铭编造、传播虚假信息的行为|' \ r'当事人劲嘉股份及其代理人在提交的书面申辩材料中及在听证会上提出|' \ r'在听证会上,海纳通投资有限公司崔某某作为证人提供证言称|' \ r'根据当事人违法行为的事实、性质、情节与社会危害程度,依据《证券法》第一百九十三条的规定,我会决定|' \ r'叶志刚在陈述、申辩意见中提出|' \ r'岳远斌提出了自己不知悉、未利用内幕信息的辩解|' \ r'对于上述违法情况,对照|' \ r'林文清未履行相关披露义务的行为|' \ r'经过调查与审理,我会认定|' \ r'我会认为,华寅所及其注册会计师刘文俊|' \ r'我会认为,“中农化重组大成股份”、“中农资重组大成股份”这两个事项所涉及的情况|' \ r'我会认为,永华所及其执业人员,未能勤勉尽责|' \ r'我会认为,南京中北2003年、2004年的年报披露行为|' \ r'综合上述情况,审理认为,佘鑫麒身为上市公司董事、总经理,无视法律的多项禁止性规定|' \ r'我会认为,精工科技研制成功结晶炉一事,是对其股票交易价格有显著影响的重要信息|' \ r'我会认为,ST黄海申请免除亚洲开发银行青岛轮胎开发项目贷款中青岛市财政局代公司偿还的人民币债务|' \ r'我会认为,捷利股份收购辽宁中期这一事项|' \ r'根据《暂行条例》第五十九条和第六十条的规定,我会决定|' \ r'广东证券及其相关人员的上述行为,违反了原《证券法》第二十四条关于“证券公司承销证券|' \ r'富成证券的上述行为违反了原《证券法》第一百三十条|' \ r'中科健的上述行为违反了《中华人民共和国证券法》|' \ r'根据《证券法》第二百零一条“证券公司在证券交易中有严重违法行为|' \ r'对上述行为负有直接责任的是在天一科技2003年审计报告上签字的注册会计师李海来、唐爱清。|' \ r'科大创新2002年度虚增销售收入、利润以及以账外资金处理管理费用和股票发行费用|' \ r'璐通期货未经客户委托和授权,代理客户进行交易的行为违反了|' \ r'(以上|上述)各项证据充分、确实,足以认定当事人各项(违法|违规)行为|' \ r'我会认为,原海南港澳国际信托公司沈阳证券营业部的上述行为违反了《中华人民共和国证券法》|' \ r'本会认为,华信会计师所上述行为违反了《股票发行与交易管理暂行条例》第三十五条的规定|' \ r'当事人以上违法行为有相关年报、中报、相关董事会决议、相关担保合同、有关信息披露文件、相关谈话笔录等主要证据在案佐证。各项证据充分、确凿,足以认定当事人上述违法行为。|' \ r'证实当事人(以上|上述|此项)违法行为的主要证据有|' \ r'以上各项证据充分、确实,足以认定当事人上述.*?违法行为。|' \ r'本会认为.*?上述行为违反了《证券法》第六十一条|' \ r'证明上述违法事实的证据材料|证实此项事实的主要证据有|' \ r'上述证据充分、确实,足以认定当事人各项违规事实。|' \ r'三九医药的上述行为,违反了《中华人民共和国证券法》(以下简称“《证券法》”)第一百七十七条的规定|' \ r'上述问题.*?不符合.*?第.*?条.*?规定.*?作为.*?对上述问题负有主要责任。|' \ r'二、处罚决定?|' \ r'根据当事人的违法事实、性质、情节与社会危害程度|' \ r'曾国波的上述行为,违反了《证券法》第七十六条的规定,|' \ r'以上事实,有涉案人员询问笔录,涉案人员三方存管银行账户资金往来记录,涉案账户委托下单\nIP\n、\nMAC\n记录,' \ r'涉案账户交易记录以及相关账户借用配资协议等证据证明,足以认定。|' \ r'以上违法事实,有宏磊股份《\n2012\n年半年度报告》、《\n2012\n年年度报告》,宏磊股份的会计记录,相关董事会决议,相关人员的谈话笔录等证据证明\n,足以认定。|' \ r'以上事实,有交易流水、当事人询问笔录、电脑\nIP\n、\nMAC\n取证信息等证据证明,足以认定。|' \ r'以上违法事实,有账户开户、交易、资金流水记录及相关银行凭证,委托下单\nIP\n地址,下单电脑硬盘序列号记录,相关协议,询问笔录等证据证明,足以认定。|' \ r'以上违法事实,有科伦药业披露的相关临时信息,科伦药业《\n2010\n年年度报告》和《\n2011\n年年度报告》\n,' \ r'相关工商登记资料,相关会议记录,相关董事会决议,相关会计记录,相关人员的谈话笔录等证据证明,足以认定。|' \ r'上述事实有重组相关协议、公告、询问笔录、证券账户开户及交易资料、资金凭证、\nMAC\n地址等证据证实,足以认定。|' \ r'以上违法事实,有南纺股份\n2006\n年、\n2007\n年、\n2008\n年、\n2009\n年、\n2010\n年年度报告,南纺股份的会计记录,' \ r'相关部门提供的书证,相关董事会决议,相关人员的谈话笔录等证据证明\n,足以认定。|' \ r'以上违法事实,有袁郑健交易中茵股份股票所使用的\nIP\n地址、袁郑健交易\n中茵股份股票的资金往来、相关博客文章发表的\nIP\n地址\n及阅读情况、' \ r'袁郑健交易中茵股份股票的数据、中茵股份股票交易价格变化情况等证据证明,足以认定。|' \ r'以上违法事实,有贤成矿业\n2009\n年半年度报告、\n2009\n年年度报告、\n2010\n年半年度报告、\n2010\n年年度报告、\n2011' \ r'\n年半年度报告、\n2011\n年年度报告、\n2012\n年半年度报告,贤成矿业临时公告,贤成矿业的会计凭证,相关银行的资金划转凭证,' \ r'相关担保合同,相关司法文书,相关机构的说明,相关人员的询问笔录等证据证明\n,足以认定。)' truth_compiler = re.compile(truth_text_str, re.MULTILINE) truth_list = truth_compiler.findall(content_text) truth = '\n'.join([kk[0] for kk in truth_list]) punishment_decision = re.search( r'(((根据|属于|基于|考虑|按照|依照|鉴于).*?(依据|根据|依照|按照).*?第.*?[条之].*?(我会|中国证监会、财政部|本会)(决定|对.*?处以|作出|对.*?作出|拟决定)|' r'根据当事人违法行为的事实、性质、情节[和与]社会危害程度,(我会|中国证监会、财政部|本会)(决定|对.*?处以|作出|对.*?作出)|' r'(经研究,)?(依据|根据|依照|按照).*?第.*?[条之].*?(我会|中国证监会、财政部|本会)(决定|对.*?处以|作出|对.*?作出)|' r'根据当事人违法行为的事实、性质、情节[和与]社会危害程度.*?(依据|根据|依照|按照).*?第?.*?[条之].*?(我会|中国证监会、财政部|本会)(决定|对.*?处以|作出|对.*?作出)|' r'根据当事人违法行为的事实、性质、情节与社会危害程度,以及宏磊股份\n2013\n年上半年收回了宏磊集团占用的全部资金\n508,715,650.54\n元,' r'并向宏磊集团收取了资金占用费\n25,414,971.69\n元的情况,依据《证券法》第一百九十三条和《中华人民共和国行政处罚法》\n第二十七条从轻和减轻行政处罚的相关规定,我会决定:|' r'综上,我会决定|' r'鉴于上述情况,同时考虑到潘海深在交易行为发生后曾主动向上海证券交易所报告、案发后能够积极配合监管部门调查,而且内幕交易违法所得金额不大等情节,我会决定|' r'根据.*?条.*?规定.*?经研究决定|' r'根据上述法律规定关于“吊销责任人员的从业资格证书”罚则,经研究决定|' r'根据《证券法》第二百零一条“证券公司在证券交易中有严重违法行为,不再具备经营资格的,由证券监督管理机构取消其证券业务许可,并责令关闭”的规定,取消|' r'基于以上(违法)事实,本会.*?决定|据此,根据上述法律规定,经研究决定|' r'经研究决定,对.*?处以|根据上述法律规定,经研究,对.*?处以|' r'根据上述法律规定,经研究决定:责令|根据.*?第.*?条规定,对当事人作出如下处罚决定:|' r'根据上述法律规定,经研究决定|根据.*?第.*?条规定,对各当事人作出如下处罚决定|' r'根据.*?第.*?条的规定,对.*?处以|经研究决定,根据《办法》第34条的规定,撤销|' r'根据《股票发行与交易管理暂行条例》第七十四条第\(二\)项及《证券法》第一百七十七条的规定,决定|' r'根据上述法律规定,本会决定|据此,根据《股票条例》第七十一条第二款的规定,对平安乌鲁木齐营业部处以|' r'根据《证券法》第201条“证券公司在证券交易中有严重违法行为,不再具备经营资格的,由证券监督管理机构取消其证券业务许可,并责令关闭”的规定,取消大连证券的证券业务许可,并责令其关闭。|' r'根据《期货条例》第五十九条规定之规定,对当事人作出如下处罚决定|' r'根据《股票条例》第七十三条,对当事人作出如下处罚决定|' r'根据《证券法》第一百七十七条第一款之规定,对当事人作出如下决定|' r'二、处罚决定|二、处罚决|' r'基于以上事实,本会决定向)' r'[\s\S]*?)\n' r'(.*?应自收到本处罚决定书之日|(当事人)?.*?[如若](果)?对本(处罚)?决定不服)', content_text).group(1).strip() if '申辩' in content_text: defense_text_str = r'((\n[^。\n]*?(听证|申辩|辩称|提出)|应有关当事人要求,我会于2007年11月2日召开听证会,听取了当事人的陈述与申辩,|' \ r'应有关当事人要求,我会于2007年3月21日召开听证会,听取了当事人的陈述与申辩,|' \ r'听取了当事人的陈述和申辩意见,|应当事人的申请,召开了听证会,听取了其陈述和申辩,|' \ r'应部分当事人的要求举行了听证会,听取了当事人的陈述、申辩意见,|' \ r'部分当事人提交了陈述和申辩意见,我们进行了审查。应当事人宫云科的申请,我们依法举行了听证,听取了其陈述和申辩。|' \ r'[^。,\n]*?(未|不)?(提出|要求|提交|进行)?陈述[^。,\n]*?申辩[^。\n]*?(未|不|并)(要求|申请)[^。\n]*?听证|' \ r'当事人未要求听证,(也未|但)(提交|提出了?)(陈述)?[^。,\n]*?申辩意见。|当事人未提交陈述和申辩意见。|' \ r'当事人[^。,\n]*?未(要求|申请)陈述[^。,\n]*?申辩和听证|当事人不要求陈述、申辩和听证。|' \ r'[^。,\n]*?在听证及陈述申辩中提出|' \ r'[^。,\n]*?未提出陈述、申辩意见。|[^。,\n]*?未(提交|提出)陈述、申辩意见及听证申请。|' \ r'应当事人宁波富邦等要求,我会依法举行了听证会,听取了当事人及其代理人的陈述和申辩。|' \ r'应当事人申请,我会举行了听证会,听取并复核了当事人的陈述与申辩意见,|时任独立董事夏建林在陈述申辩中提出其在审议资产置换事项的董事会上|' \ r'当事人提交了陈述和申辩意见,我们进行了审查。应当事人申请,我们依法举行了听证会。|' \ r'应当事人惠顺装饰的要求,我会举行了听证会,听取了惠顺装饰的陈述申辩。|' \ r'并依法向各当事人事先告知了具体违法事项,听取了有关当事人的陈述申辩。|' \ r'公告期满[^。\n]*?未提出陈述申辩|当事人未申请听证,也未提交陈述和申辩意见。|' \ r'当事人没有提出听证要求,也没有提出陈述申辩意见。|张野在个人陈述材料中提出|' \ r'当事人[^。,\n]*?提出|唐建平的代理人在听证会上提出|李际滨提出自己的交易行为没有利用内幕信息|' \ r'我会应赵伟平的要求举行了听证会,听取了赵伟平的陈述和申辩。广州攀达放弃听证。|' \ r'应当事人的申请,行政处罚委员会于2009年1月12日举行听证会,听取了当事人的陈述和申辩。听证会后,行政处罚委员会进行了复核。|' \ r'周良超未按要求在公告发布60日内领取《行政处罚事先告知书》,逾期未领取的,视为送达,同时,视为放弃陈述申辩及听证的权利。|' \ r'根据当事人的申请,我会2018年3月6日召开听证会,听证会当日,当事人无故缺席也未委托代理人出席,亦未提交陈述申辩意见。|' \ r'公告期满,李晓明未在规定的时间内领取告知书,亦未提出陈述申辩或要求听证。|' \ r'嘉宇实业在申辩意见中提出其在案件调查期间积极配合,主动提交相应材料,并在事后积极整改,请求减轻处罚。|' \ r'听证会上,当事人对《事先告知书》认定的事实予以承认,但认为该事实不构成未勤勉尽责情形。|' \ r'沃克森评估公司、李文军和黄立新在陈述申辩和听证过程中,提出了如下陈述和申辩意见:|' \ r'当事人吕美庆及其代理人在陈述、申辩材料及听证中否认吕美庆操控涉案账户组交易股票操纵股价,请求对吕美庆免予处罚。|' \ r'黄芝颢提出听证,2015年12月1日,我会组织听证,当事人未到场,亦未提出陈述、申辩意见。按照《中国证券监督管理委员会行政处罚听证规则》' \ r'(证监法律字〔2007〕8号)第九条第二款规定,当事人未按期参加听证的,视为放弃听证权利。|' \ r'当事人在《事先告知书回执》中要求陈述申辩和举行听证会,2017年2月28日,当事人向我会递交《放弃听证及申辩意见》等材料,' \ r'表示放弃听证。截至3月22日,其陆续向我会递交了《呈递证监会材料》《鲜言关于放弃行政诉讼权利声明书》《法律自首申请书》及《积极交纳罚款的承诺书》等材料。)' \ r'([\s\S]*?))' \ r'((经复核,)?(本案)?现已调查、审理(并复核)?终结。|' \ r'\n[^。\n]*?我会.*?(认为|认定)|' \ r'\n经复核|\n经核实|经复核,我会认为|经复核,根据|经核实|' \ r'对于上述申辩意见,我会在审理与复核过程中已经充分考虑。|' \ r'我会认为,评估师在实际执业过程中|根据现有证据,我会对[^。\n]*?申辩意见不予采纳。|' \ r'我会复核认为,本案客观证据|' \ r'我会认定王明华知悉内幕信息|' \ r'因此,我会对于天澄门在绿大地欺诈发行上市时未勤勉尽责|' \ r'我会认为,\nA381XXX355\n等\n19\n个证券账户网上委托交易的地址具有关联性|' \ r'我会认为,由于利安达对华阳科技|' \ r'我会认为,2011年5月4日|' \ r'经我会核查|' \ r'我会认为,袁郑健采取连续交易|' \ r'我会认为,霍峰时任|' \ r'我会认为,根据《证券法》的规定|' \ r'我会认为,投资者从事证券|' \ r'我会认为,根据|' \ r'我会认为,《证券法》设定|' \ r'我会认为,第一|' \ r'我会认为,安泰期货在听证中提供的证据材料|' \ r'基于前述查明的情况|' \ r'我会认为,瞿湘的辩解|' \ r'经查明,大业期货存在以下违法行为:|' \ r'经查明,格林期货存在以下违法行为:|' \ r'经审理|' \ r'经查明,张家界公司信息披露存在如下违法行为|' \ r'我会复核意见如下)' defense_compiler = re.compile(defense_text_str, re.MULTILINE) defense_list = [kk for kk in defense_compiler.findall(content_text) if '我会同时认为' not in kk[0]] if len(defense_list) != 0: defense = defense_list[-1][0].strip() defense_response_str = defense.replace(r'(', r'\(').replace(r')', r'\)').replace(r'.', r'\.') \ .replace(r'[', r'\[').replace(r']', r'\]').replace(r'*', r'\*') \ .replace(r'+', r'\+') + \ r'([\s\S]*?)' \ + r'((经复核,)?本案现已调查、审理(并复核)?终结。|' \ + punishment_decision.replace(r'(', r'\(').replace(r')', r'\)') \ .replace(r'.', r'\.') \ .replace(r'[', r'\[').replace(r']', r'\]').replace(r'*', r'\*') \ .replace(r'+', r'\+') \ + ')' defense_response_compiler = re.compile(defense_response_str, re.MULTILINE) if defense_response_compiler.search(content_text): defense_response = defense_response_compiler.search(content_text).group(1).strip() else: defense_response = '' else: defense = re.search(r'(上述当事人均未向我会提交陈述申辩意见或者要求听证。|' r'2006年9月21日召开听证会,听取了当事人的陈述申辩。|' r'2006年7月26日召开听证会,听取了当事人的陈述申辩。|' r'我会于2006年10月20日召开听证会,听取了当事人的陈述与申辩。|' r'于2006年4月29日召开了听证会,听取了当事人的陈述申辩。|' r'当事人没有陈述申辩,也没有要求听证。|' r'我会于2005年10月9日召开听证会,听取了当事人的陈述与申辩。|' r'应相关当事人要求,召开了听证会,听取了当事人的陈述与申辩。|' r'应.*?当事人.*?要求,我会于.*?听证.*?听取了当事人.*?的陈述与申辩。|' r'根据当事人的申请,召开了听证会,听取了其陈述和申辩。' r'我会依法向当事人告知了作出行政处罚的事实、理由及依据,并对当事人的陈述、申辩意见进行了复核。|' r'根据当事人陈宗海和马贤明的申请,召开了听证会,听取了其陈述和申辩。|' r'当事人未提出陈述申辩意见和听证要求。|' r'应当事人要求,我会于2004年10月22日依法举行听证,听取了当事人及其代理人的陈述与申辩。|' r'根据当事人.*?申请,召开了听证会,听取了其陈述和申辩。|' r'当事人.*?要求听证,我会.*?听证会,听取了.*?申辩和陈述意见。|' r'应当事人的要求举行了听证会,听取了当事人的陈述和申辩意见。|' r'根据.*?申请召开了听证会,听取了.*?陈述和申辩。|' r'举行了听证会,听取了当事人的陈述申辩。|' r'举行了听证会,听取了当事人的陈述申辩。|' r'其中当事人周家银要求听证,我部于2004年5月18日组织了对周家银的听证会,听取了周家银的申辩和陈述意见。|' r'依法履行了事先告知程序,听取了当事人的陈述和申辩。|' r'本会已调查终结,并听取了当事人的陈述与申辩。|' r'当事人未要求举行听证,也未进行陈述与申辩。|' r'现已调查终结,并于2004年3月4日依法举行听证,听取了有关当事人及其代理人的陈述及申辩。|' r'经研究,我会认为,宁城老窖提出的申辩意见事实和理由不成立,不予采纳。|' r'各当事人均未要求听证。当事人冯勇和梁伟斌向我会提出了书面陈述、申辩意见,但申辩理由不充分,本会不予采纳。|' r'于2003年10月24日依法举行听证,听取了当事人及其代理人的陈述和申辩。|' r'应各当事人要求,我会于2003年6月25日依法举行听证,听取了联合证券及其他当事人及其代理人的陈述与申辩。|' r'于.*?举行听.*?听取了.*?陈述与申辩。|' r'当事人未在法定期限内提出听证、陈述和申辩的要求。|' r'案件处理过程中听取了当事人的陈述及申辩。|' r'本会2002年7月30日依法举行了听证会,听取了尹文健及其代理人的陈述与申辩。|' r'听取了当事人的陈述及申辩。|' r'应有关当事人申请,我会于2005年12月13日召开听证会,听取了当事人的陈述与申辩。|' r'我会依法向当事人告知了作出行政处罚的事实、理由及依据,并对当事人的陈述、申辩意见进行了复核。|' r'于2002年7月30日举行听证会,听取了当事人及其代理人的陈述和申辩。)', content_text).group(1).strip() defense_response = '' else: defense = defense_response = '' punishment_basis_text_str = truth_list[-1][0].replace(r'(', r'\(').replace(r')', r'\)') \ .replace(r'.', r'\.') \ .replace(r'[', r'\[').replace(r']', r'\]').replace(r'*', r'\*') \ .replace(r'+', r'\+') \ + r'([\s\S]*?)' \ + r'(' + punishment_decision.replace(r'(', r'\(').replace(r')', r'\)') \ .replace(r'.', r'\.') \ .replace(r'[', r'\[').replace(r']', r'\]').replace(r'*', r'\*') \ .replace(r'+', r'\+') \ + r'|' + defense.replace(r'(', r'\(').replace(r')', r'\)') \ .replace(r'.', r'\.') \ .replace(r'[', r'\[').replace(r']', r'\]').replace(r'*', r'\*') \ .replace(r'+', r'\+') \ + r')' punishment_basis_compiler = re.compile(punishment_basis_text_str, re.MULTILINE) punishment_basis_list = punishment_basis_compiler.findall(content_text) if len(punishment_basis_list) > 0: punishment_basis = punishment_basis_list[-1][0] punishment_basis = re.sub('((上述|以上)(违法(违规)?)?(事实|情况|行为).*?等?[^。,\n]*?(证据|佐证).*?。|' '陈述等证据证明,事实清楚,证据充分,足以认定。|' '上述违法事实,有.*?谈话笔录等。|' '上述事实有.*?等在案作证。)', '', punishment_basis).strip() else: punishment_basis = '' result_map = { 'announcementTitle': title, 'announcementOrg': org, 'announcementDate': real_publish_date, 'announcementCode': document_code, 'facts': truth, 'defenseOpinion': defense, 'defenseResponse': defense_response, 'litigant': litigant[:-1] if litigant[-1] == ':' else litigant, 'punishmentBasement': punishment_basis, 'punishmentDecision': punishment_decision, 'type': '行政处罚决定', 'oss_file_id': file_id, 'status': 'not checked' } logger.info(result_map) if db.announcement.find({'announcementTitle': title, 'oss_file_id': file_id}).count() == 0: db.announcement.insert_one(result_map) logger.info('证监会 数据解析 ' + doc_type + ' -- 数据导入完成') else: logger.info('证监会 数据解析 ' + doc_type + ' -- 数据已经存在') db.parsed_data.update_one({'_id': file_id}, {'$set': {'parsed': True}}) logger.info('证监会 数据解析 ' + doc_type + ' -- 修改parsed完成') elif doc_type == '责令整改通知': real_publish_date = format_date(head_info.find_all('tr')[2].find_all('td')[2].text.split(':')[1].strip()) document_code = re.search(r'(证监责改字.\d{4}.\d+号)', content_text).group(1).strip() litigant = re.search(document_code.replace(r'[', r'\[').replace(r']', r'\]') + r'\n([\s\S]*?):', content_text).group(1).strip() truth_text_str = litigant + ':' + r'([\s\S]*?)' \ r'(对此,我会将依据有关规定对你公司进行处罚。|' \ r'依据|经.*?审核.*?及约见公司董事长谈话,我会认为|' \ r'你行上述行为严重违反|' \ r'你公司以个人名义开立账户买卖证券的行为,违反了|' \ r'你公司的上述行为违反了《中华人民共和国证券法》第七十四条的规定|' \ r'现决定)' truth_compiler = re.compile(truth_text_str, re.MULTILINE) truth_list = truth_compiler.findall(content_text) truth = '\n'.join([kk[0] for kk in truth_list]) punishment_decision = re.search(r'(([^。\n]*?(根据|依据).*?规定.*?(责令|作出了行政处罚决定)|[^。\n]*?现责令|' r'经研究决定,责令|对此,我会将依据有关规定对你公司进行处罚。|现决定)' r'[\s\S]*?)' r'(中国证券监督管理委员会|$)', content_text).group(1).strip() defense = defense_response = '' punishment_basis_text_str = truth_list[-1][0].replace(r'(', r'\(').replace(r')', r'\)') \ .replace(r'.', r'\.') \ .replace(r'[', r'\[').replace(r']', r'\]').replace(r'*', r'\*') \ .replace(r'+', r'\+') \ + r'([\s\S]*?)' \ + punishment_decision.replace(r'(', r'\(').replace(r')', r'\)') \ .replace(r'.', r'\.') \ .replace(r'[', r'\[').replace(r']', r'\]').replace(r'*', r'\*') \ .replace(r'+', r'\+') punishment_basis_compiler = re.compile(punishment_basis_text_str, re.MULTILINE) punishment_basis = punishment_basis_compiler.search(content_text).group(1).strip() result_map = { 'announcementTitle': title, 'announcementOrg': org, 'announcementDate': real_publish_date, 'announcementCode': document_code, 'facts': truth, 'defenseOpinion': defense, 'defenseResponse': defense_response, 'litigant': litigant[:-1] if litigant[-1] == ':' else litigant, 'punishmentBasement': punishment_basis, 'punishmentDecision': punishment_decision, 'type': '责令整改通知', 'oss_file_id': file_id, 'status': 'not checked' } logger.info(result_map) if db.announcement.find({'announcementTitle': title, 'oss_file_id': file_id}).count() == 0: db.announcement.insert_one(result_map) logger.info('证监会 数据解析 ' + doc_type + ' -- 数据导入完成') else: logger.info('证监会 数据解析 ' + doc_type + ' -- 数据已经存在') db.parsed_data.update_one({'_id': file_id}, {'$set': {'parsed': True}}) logger.info('证监会 数据解析 ' + doc_type + ' -- 修改parsed完成') elif doc_type == '市场禁入决定': real_publish_date = format_date(head_info.find_all('tr')[2].find_all('td')[2].text.split(':')[1].strip()) document_code = re.search( r'(\n(证监罚字|证监禁入字|证监法律字)?.\d{3,4}..?\d+.?号)\n', content_text).group(1).strip() litigant = re.search(document_code.replace(r'[', r'\[').replace(r']', r'\]') + r'\n([\s\S]*?)' r'(\n依据|\n经查|\n.*?一案.*?调查|\n.*?案.*调查)', content_text).group(1).strip() truth_text_str = r'((.*?经查|二、|三、|四、|(二)|五、|(二)|司法机关(依法)?认定)[\s\S]*?)' \ r'(\n(上述|以上)(违法(违规)?)?(事实|情况|行为)[\s\S]*?等?[^。,\n]*?(证据|佐证|谈话笔录等|作证|询问笔录|相关年报)|' \ r'以上违法事实,有.*?刑事判决书证明,足以认定。|' \ r'以上事实,有五洋建设发布的公告清单等证据证明,足以认定。|' \ r'上述事实,有相关当事人的工商档案登记材料、证券营业部出具的有关账户开户资料、授权委托书、股票交易清单、' \ r'资金存取凭证、上海证券交易所出具的有关证明材料等证据在案证实,证据确实、充分,足以认定。|' \ r'根据上述事实与证据,经审理,作出以下认定|' \ r'以上违法事实,有账户开户、交易、资金流水记录及相关银行凭证,委托下单\nIP\n地址,下单电脑硬盘序列号记录,相关协议,询问笔录等证据证明,足以认定。|' \ r'以上违法事实,有南纺股份\n2006\n年、\n2007\n年、\n2008\n年、\n2009\n年、\n2010\n年年度报告,' \ r'南纺股份的会计记录,相关部门提供的书证,相关董事会决议,相关人员的谈话笔录等证据证明\n,足以认定。|' \ r'国能集团2005\n年年度报告、\n2006\n年年度报告、\n2007\n年年度报告和\n2008\n年年度报告及\n国能集团2006\n年|' \ r'在听证会上,海纳通投资有限公司崔某某作为证人提供证言称|' \ r'冯久田、袁金亮、吴玉瑞、田玉新是对鲁北化工多项信息披露违法行为直接负责的主管人员。|' \ r'叶志刚在陈述申辩意见中提出|' \ r'岳远斌提出了自己不知悉、未利用内幕信息的辩解|' \ r'同时,我会还关注到,沧州化工信息披露违法行为持续时间长,违法次数多,涉及金额特别巨大,情节严重,应当对相关责任人员予以从重处罚。|' \ r'我会还进一步查明了银河科技有关董事、监事、高级管理人员的涉案情况|' \ r'我会认为,根据上述第一项至第十项事实|' \ r'我会认为,上海科技在2004年年报中未披露重大银行借款与应付票据事项|' \ r'我会认为,南京中北2003年、2004年的年报披露行为,违反了原《证券法》第六十一条的规定|' \ r'陈克根是昌源投资的实际控制人之一|' \ r'证明以上违法事实的证据有|' \ r'时任副董事长、董事长黄先锋|' \ r'我会认为,王艳平、毛义等人的上述行为违反了原《证券法》第七十一条的规定|' \ r'我会认为,董宗祺、何平等人的上述行为违反了原《证券法》第七十一条的规定|' \ r'我会认为,辛乃奇、刘军等人的上述行为违反了原《证券法》第七十一条的规定|' \ r'郝一平、朱格利等人的上述行为违反了原《中华人民共和国证券法》第七十一条的规定|' \ r'徐水师、卫建华等人的上述行为违反了原《中华人民共和国证券法》第七十一条的规定|' \ r'富成证券的上述行为违反了原《证券法》第一百三十条|' \ r'我会认定上述事实的主要证据有|' \ r'高建华、高建民所控制的上述3家公司以个人名义开立账户买卖“ST宏峰”股票的行为违反了原《中华人民共和国证券法》|' \ r'刘大力是民安证券违反证券法律法规及涉嫌犯罪行为的主要决策人及组织者|' \ r'上述行为违反《证券法》第一百三十八条“证券公司办理经纪业务|' \ r'孙成刚的行为违反了《证券、期货投资咨询管理暂行办法》第二十四条|' \ r'宋如华作为托普软件的时任董事长,对托普软件的违法行为负有不可推卸的法律责任|' \ r'天歌科技上述信息披露虚假的行为违反了《中华人民共和国证券法》|' \ r'达尔曼的上述行为违反了《证券法》第五十九条|' \ r'上述行为分别违反了《股票发行和交易管理暂行条例》|' \ r'天发股份的上述行为违反了《证券法》第五十九条|' \ r'陈克根、陈克恩作为福建省神龙企业集团有限公司(神龙发展的控股股东,以下简称“神龙集团”)仅有的两名股东|' \ r'雷立军上述行为违反了《证券、期货投资咨询管理暂行办法》第三条之规定|' \ r'同时,周林辉骗取并挪用该营业部客户账户上的资金后携款潜逃,至今未归案|' \ r'上述问题.*?不符合.*?第.*?条.*?规定.*?作为.*?对上述问题负有主要责任。|' \ r'在公司对外签署了大量担保协议后,公司未及时向公众投资者披露相关信息,使投资者无法了解公司经营风险)' truth_compiler = re.compile(truth_text_str, re.MULTILINE) truth_list = truth_compiler.findall(content_text) truth = '\n'.join([kk[0] for kk in truth_list]) punishment_decision = re.search( r'((\n.*?(根据|属于|按照|依照|鉴于|依据).*?(我会决定|对郭建兴采取|(我会|本会)认定.*?市场禁入|本会决定|认定刘敏为市场禁入者|' r'经研究决定|对张晓伟、黄玉麟实施永久性市场禁入|决定认定其为市场禁入者|我会决定对许宗林、高芳实施永久性市场禁入))' r'[\s\S]*?)\n' r'(.*?应自收到本处罚决定书之日|(当事人)?.*?[如若](果)?对本(市场禁入|处罚|决定)?决定不服|' r'中国证券监督管理委员会|二○○六年二月二十二日|二○○五年五月十七日|二○○四年八月九日)', content_text).group(1).strip() if '申辩' in content_text: defense_text_str = r'(((\n|。).*?(申辩|听证).*?(提出|认为|称|陈述)|' \ r'(\n|。)[^。\n]*?(提出|要求|陈述).*?(申辩|辩解)|(\n|。).*?辩称|' \ r'当事人未提交陈述、申辩意见,也未申请听证。|' \ r'李友收到我会《行政处罚事先告知书》和《市场禁入事先告知书》后,委托代理人参加了听证会,并向我会递交了陈述申辩材料|' \ r'余丽收到我会《行政处罚事先告知书》和《市场禁入事先告知书》后,向我会递交了相关的陈述申辩材料。|' \ r'上述当事人未提交陈述和申辩意见,也未要求听证。|' \ r'鲜言在提交我会的材料中提出|当事人提出,|' \ r'[^。,\n]*?在听证及陈述申辩中提出|' \ r'针对涉案违法事实,曹春华认为我会认定事实不够准确|' \ r'当事人周山、李纪、王海棠在陈述、申辩材料中对涉案违法行为造成的不良影响表示歉意|' \ r'在听证会上,银河证券屈某作为证人提供证言称|' \ r'应当事人冯斌的申请,我会举行了听证会,听取了冯斌的陈述和申辩。)' \ r'([\s\S]*?))' \ r'(经复核|本案现已调查、审理终结。|经复核,本案现已调查、审理终结。|现已调查、审理终结。|' \ r'我会复核认为|' \ r'\n我会认为|' \ r'针对.*?申辩意见,基于下述事实和理由,我会|' \ r'针对关于违法事实的申辩意见,经复核,我会意见如下|' \ r'根据何学葵违法行为的严重性|对此我会予以部分采纳|' \ r'我会对部分意见予以采纳。|' \ r'因此,我会对|' \ r'经审理.*?申辩理由不成立|' \ r'我会认为,作为上市公司的董事|' \ r'综上,|' \ r'我会认为,张钢、王邦志虽然对中科证券违法行为的历史形成负有责任|' \ r'我会复核意见如下)' defense_compiler = re.compile(defense_text_str, re.MULTILINE) defense_list = [kk for kk in defense_compiler.findall(content_text) if '我会同时认为' not in kk[0]] if len(defense_list) != 0: defense = defense_list[-1][0].strip() defense_response_str = defense.replace(r'(', r'\(').replace(r')', r'\)').replace(r'.', r'\.') \ .replace(r'[', r'\[').replace(r']', r'\]').replace(r'*', r'\*') \ .replace(r'+', r'\+') + \ r'([\s\S]*?)' \ + r'((经复核,)?本案现已调查、审理(并复核)?终结。|现已调查、审理终结。|' \ + punishment_decision.replace(r'(', r'\(').replace(r')', r'\)') \ .replace(r'.', r'\.') \ .replace(r'[', r'\[').replace(r']', r'\]').replace(r'*', r'\*') \ .replace(r'+', r'\+') \ + ')' defense_response_compiler = re.compile(defense_response_str, re.MULTILINE) defense_response = defense_response_compiler.search(content_text).group(1).strip() else: defense = re.search(r'(严芳、卞明二人未提出陈述、申辩意见,也未要求听证。|' r'毕杰善在公告送达期限内既未提出陈述、申辩意见,也未要求听证。|' r'应当事人申请,我会举行了听证会,听取并复核了当事人的陈述与申辩意见,现已调查、审理终结。|' r'复核了当事人的陈述、申辩意见,现已调查、审理终结。|' r'应当事人申请,我会举行了听证会,听取了当事人及其代理人的陈述与申辩意见,现已调查、审理终结。|' r'复核了当事人的陈述与申辩意见,现已调查、审理终结。|' r'于2006年9月21日召开听证会,听取了当事人的陈述申辩。|' r'我会已经向陈克根、陈克恩送达了行政处罚及市场禁入事先告知书,并应其要求举行了听证会,听取了他们的陈述和申辩意见。|' r'我会已经向周林辉公告送达了《行政处罚及市场禁入事先告知公告书》,其未向我会提出陈述、申辩意见,也未要求听证。|' r'我会已经向艾克拉木\?艾沙由夫公告送达了行政处罚及市场禁入事先告知书,其未在法定期限内向我会提出陈述、申辩意见,也未要求听证。)', content_text).group(1).strip() defense_response = '' else: defense = defense_response = '' if defense != '': punishment_basis_text_str = truth_list[-1][0].replace(r'(', r'\(').replace(r')', r'\)') \ .replace(r'.', r'\.') \ .replace(r'[', r'\[').replace(r']', r'\]').replace(r'*', r'\*') \ .replace(r'+', r'\+') \ + r'([\s\S]*?)' \ + r'(' + defense.replace(r'(', r'\(').replace(r')', r'\)') \ .replace(r'.', r'\.') \ .replace(r'[', r'\[').replace(r']', r'\]').replace(r'*', r'\*') \ .replace(r'+', r'\+') \ + r'|' \ + punishment_decision.replace(r'(', r'\(').replace(r')', r'\)') \ .replace(r'.', r'\.') \ .replace(r'[', r'\[').replace(r']', r'\]').replace(r'*', r'\*') \ .replace(r'+', r'\+') \ + r')' else: punishment_basis_text_str = truth_list[-1][0].replace(r'(', r'\(').replace(r')', r'\)') \ .replace(r'.', r'\.') \ .replace(r'[', r'\[').replace(r']', r'\]').replace(r'*', r'\*') \ .replace(r'+', r'\+') \ + r'([\s\S]*?)' \ + r'(' + punishment_decision.replace(r'(', r'\(').replace(r')', r'\)') \ .replace(r'.', r'\.') \ .replace(r'[', r'\[').replace(r']', r'\]').replace(r'*', r'\*') \ .replace(r'+', r'\+') \ + r')' punishment_basis_compiler = re.compile(punishment_basis_text_str, re.MULTILINE) if punishment_basis_compiler.search(content_text): punishment_basis = punishment_basis_compiler.search(content_text).group(1).strip() punishment_basis = re.sub( r'((上述|以上)(违法(违规)?)?(事实|情况|行为)[\s\S]*?等?[^。,\n]*?(证据|佐证|谈话笔录等|作证|询问笔录|相关年报).*?。|' r'以上违法事实,有.*?刑事判决书证明,足以认定。|' r'以上违法事实,有账户开户、交易、资金流水记录及相关银行凭证,委托下单\nIP\n地址,下单电脑硬盘序列号记录,相关协议,询问笔录等证据证明,足以认定。|' r'以上违法事实,有南纺股份\n2006\n年、\n2007\n年、\n2008\n年、\n2009\n年、\n2010\n年年度报告,' r'南纺股份的会计记录,相关部门提供的书证,相关董事会决议,相关人员的谈话笔录等证据证明\n,足以认定。)', '', punishment_basis).strip() else: punishment_basis = '' result_map = { 'announcementTitle': title, 'announcementOrg': org, 'announcementDate': real_publish_date, 'announcementCode': document_code, 'facts': truth, 'defenseOpinion': defense, 'defenseResponse': defense_response, 'litigant': litigant[:-1] if litigant[-1] == ':' else litigant, 'punishmentBasement': punishment_basis, 'punishmentDecision': punishment_decision, 'type': '市场禁入决定', 'oss_file_id': file_id, 'status': 'not checked' } logger.info(result_map) if db.announcement.find(result_map).count() == 0: db.announcement.insert_one(result_map) logger.info('证监会 数据解析 ' + doc_type + ' -- 数据导入完成') else: logger.info('证监会 数据解析 ' + doc_type + ' -- 数据已经存在') db.parsed_data.update_one({'_id': file_id}, {'$set': {'parsed': True}}) logger.info('证监会 数据解析 ' + doc_type + ' -- 修改parsed完成') else: content_text = get_content_text(content_soup.find(class_='content')) title = content_soup.find(class_='title').text if db.parsed_data.find({'origin_url': url, 'oss_file_origin_url': url}).count() == 0: oss_file_map = { 'origin_url': url, 'oss_file_origin_url': url, 'origin_url_id': data_id, 'oss_file_type': 'html', 'oss_file_name': title, 'oss_file_content': r.text.encode(r.encoding).decode('utf-8'), 'parsed': False } response = db.parsed_data.insert_one(oss_file_map) file_id = response.inserted_id oss_add_file(ali_bucket, str(file_id) + '/' + title + '.html', r.text.encode(r.encoding).decode('utf-8')) db.csrc_data.update_one({'_id': data_id}, {'$set': {'status': 'parsed'}}) else: db.csrc_data.update_one({'_id': data_id}, {'$set': {'status': 'parsed'}}) file_id = db.parsed_data.find_one({'origin_url': url, 'oss_file_origin_url': url})['_id'] result_map_list = [] if db.punishAnnouncement.find({'url': url, 'announcementType': '要闻'}).count() == 0: return for each_punishment in db.punishAnnouncement.find({'url': url, 'announcementType': '要闻'}): result_map = { 'announcementTitle': each_punishment['announcementTitle'], 'announcementOrg': each_punishment['announcementOrg'], 'announcementDate': each_punishment['announcementDate'], 'announcementCode': each_punishment['announcementCode'], 'facts': each_punishment['facts'], 'defenseOpinion': each_punishment['defenseOpinion'], 'defenseResponse': each_punishment['defenseResponse'], 'litigant': each_punishment['litigant'], 'punishmentBasement': each_punishment['punishmentBasement'], 'punishmentDecision': each_punishment['punishmentDecision'], 'type': '要闻', 'oss_file_id': file_id, 'status': 'checked' } result_map_list.append(result_map) logger.info('证监会 数据解析 ' + doc_type + ' -- 一共有%d条数据' % len(result_map_list)) db.announcement.insert_many(result_map_list) logger.info('证监会 数据解析 ' + doc_type + ' -- 数据导入完成') db.parsed_data.update_one({'_id': file_id}, {'$set': {'parsed': True}}) logger.info('证监会 数据解析 ' + doc_type + ' -- 修改parsed完成') db.punishAnnouncement.update_many({'url': url, 'announcementType': '要闻'}, {'$set': {'status': 'transfer'}})
def sac_parse(): for each_sac_document in db.sac_data.find( {'status': { '$nin': ['ignored'] }}): announcement_url = each_sac_document['url'] announcement_title = each_sac_document['title'] announcement_type = each_sac_document['type'] title = announcement_title announcement_date = '' announcement_code = '' facts = '' defense_opinion = '' defense_response = '' litigant = '' punishment_basement = '' punishment_decision = '' if db.sac_data.find({ 'title': announcement_title }).count() >= 2 and each_sac_document['type'] == '监管措施': logger.warning(announcement_url + ' ' + announcement_title + ' 在通知公告与信息公示中一起出现') db.sac_data.update_one({'_id': each_sac_document['_id']}, {'$set': { 'status': 'ignored' }}) logger.info('证券业协会' + ' 重复数据' + ' -- 修改status完成') continue if db.sac_data.find({ 'url': announcement_url, 'status': 'parsed' }).count() == 1 and db.parsed_data.find({ 'origin_url': announcement_url, 'oss_file_origin_url': announcement_url, 'parsed': True }).count() == 1: continue logger.info('Url to parse: ' + announcement_url) response = request_site_page(announcement_url) if response is None: logger.error('网页请求错误') continue content_soup = bs( response.text.encode(response.encoding).decode('utf-8'), 'lxml') if db.parsed_data.find({ 'origin_url': announcement_url, 'oss_file_origin_url': announcement_url }).count() == 0: oss_file_map = { 'origin_url': announcement_url, 'oss_file_origin_url': announcement_url, 'origin_url_id': each_sac_document['_id'], 'oss_file_type': 'html', 'oss_file_name': announcement_title, 'oss_file_content': response.text.encode(response.encoding).decode('utf-8'), 'parsed': False } insert_response = db.parsed_data.insert_one(oss_file_map) file_id = insert_response.inserted_id oss_add_file( ali_bucket, str(file_id) + '/' + announcement_title + '.html', response.text.encode(response.encoding).decode('utf-8')) db.sac_data.update_one({'_id': each_sac_document['_id']}, {'$set': { 'status': 'parsed' }}) else: db.sac_data.update_one({'_id': each_sac_document['_id']}, {'$set': { 'status': 'parsed' }}) file_id = db.parsed_data.find_one({ 'origin_url': announcement_url, 'oss_file_origin_url': announcement_url })['_id'] if announcement_type == '监管措施': if re.search(r'公告', announcement_title): title = content_soup.find(class_='xl_cen').find( class_='xl_h').text.strip() announcement_code_raw = re.search(r'.*?(.{4}第.*号).*?$', title) if announcement_code_raw is not None: announcement_code = announcement_code_raw.group(1).strip() else: announcement_code = '' article = content_soup.find(class_='TRS_Editor').text.strip() find_result = re.search(r'.*处理(结果|情况)公告如下[::]([\s\S]*?)特此公告', article) if find_result is not None: punishment_decision = re.search( r'.*处理(结果|情况)公告如下[::]([\s\S]*?)特此公告', article).group(2).strip() else: if re.search(r'([\s\S]*?)特此公告', article) is not None: punishment_decision = re.search( r'([\s\S]*?)特此公告', article).group(1).strip() else: punishment_decision = re.search( r'公告如下[::](([\s\S]*)诚信信息管理系统。)', article).group(1).strip() publish_date = re.findall('.{4}年.{1,2}月.{1,3}日', article)[-1].strip() m = re.match( "([0-9零一二两三四五六七八九十〇○]+年)?([0-9一二两三四五六七八九十]+)月?([0-9一二两三四五六七八九十]+)[号日]?", publish_date) announcement_date = get_year(m.group(1)) + str( cn2dig(m.group(2))) + '月' + str(cn2dig(m.group(3))) + '日' else: td_content = content_soup.find(class_='xl_cen') title = td_content.find(class_='xl_h').text.strip() content_text = td_content.find(class_='hei14').text.strip() content_text = re.sub(r'.TRS_Editor.*font-size:12pt;}\n', '', content_text) content_text_list = content_text.split('\n') announcement_code = content_text_list[0].strip() announcement_date = format_date(content_text_list[-1].strip()) # mechanism = content_text_list[-2] 该变量定义后并未使用 litigant_raw = content_text_list[1].replace(':', '').replace( ':', '') litigant = litigant_raw[:-1].strip( ) if litigant_raw[-1] == ':' or litigant_raw[ -1] == ':' else litigant_raw.strip() facts = re.sub( '你|,(既)?违反', '', re.search(r'你(.*?)(。|,(既)?违反)', content_text_list[2]).group(0)) if re.search(r'我会认为.*。', content_text): punishment_basement = re.search(r'我会认为.*。', content_text).group(0) else: punishment_basement = re.search(r'(既)?违反了.*。', content_text).group(0) punishment_decision = re.search(r'(依据.*?规定.*?)\n你对本决定如有异议', '\n'.join(content_text_list[3:])) \ .group(1).strip() elif announcement_type == '自律惩戒': article = content_soup.find_all( attrs={"class": 'TRS_Editor'})[-1].text.strip() title = content_soup.find(attrs={ "class": 'xl_cen' }).find(attrs={ "class": 'xl_h' }).text.strip() multi_announce = re.search(r'关于对.*名证券从业人员.*', title) announcement_code_raw = re.search(r'.*(.{4}第.*号).$', title) if announcement_code_raw is not None: announcement_code = announcement_code_raw.group(1).strip() elif re.search(r'(.*号)', article) is not None: announcement_code = re.search(r'(.*号)', article).group(1).strip() publish_date = re.findall('.{4}年.{1,2}月.{1,3}日', article)[-1].strip() m = re.match( "([0-9零一二两三四五六七八九十〇○]+年)?([0-9一二两三四五六七八九十]+)月?([0-9一二两三四五六七八九十]+)[号日]?", publish_date) announcement_date = get_year(m.group(1)) + str(cn2dig( m.group(2))) + '月' + str(cn2dig(m.group(3))) + '日' if multi_announce is None: # 单人处罚 litigant = re.search(r'.*号([\s\S]*)[::]([\s\S]*)根据', article).group(1).strip() defense_opinion_raw = re.search(r'.*(我会认为,.*规定。)', article) if defense_opinion_raw is not None: defense_opinion = defense_opinion_raw.group(1).strip() elif re.search(r'[::]([\s\S]*)规定。', article) is not None: defense_opinion = re.search(r'[::]([\s\S]*规定。)', article).group(1).strip() elif re.search(r'(我会认为([\s\S]*))(综上|依据)', article): defense_opinion = re.search(r'(我会认为([\s\S]*))(综上|依据)', article).group(1).strip() punishment_decision_raw = re.search(r'规定。(([\s\S]*)申请。)', article) if punishment_decision_raw is not None: punishment_decision = punishment_decision_raw.group( 1).strip() else: punishment_decision = re.search( r'((依据|根据).*?(规定|现决定对).*?)\s* *(你对本决定如有异议|本(自律惩戒)?决定书为最终决定|中国证券业协会|对本决定如有异议)', article).group(1).strip() else: # 多人处罚 litigant_raw = re.search( r'取消(.*).人的从业资格考试成绩', article) # 对于多个段落的公告,仅提取了第一个段落的当事人,其余当事人在处罚决定中 if litigant_raw is not None: litigant = litigant_raw.group(1).strip() punishment_decision_raw = re.search( r'具体内容如下[::]([\s\S]*)特此公告。', article) if punishment_decision_raw is not None: punishment_decision = punishment_decision_raw.group( 1).strip() elif announcement_type == '公开谴责': title = content_soup.find(attrs={ "class": 'xl_cen' }).find(attrs={ "class": 'xl_h' }).text.strip() article = content_soup.find(attrs={ "class": 'TRS_Editor' }).text.strip() litigant = re.search(r'(.*)[::]', article).group(1).strip() facts = re.search(r'(根据中国证监会.*有关规定。)', article).group(1).strip() defense_opinion = re.search(r'(我会认为.*抵制协会的调查。)', article).group(1).strip() punishment_decision = re.search(r'(为了严肃协会自律规则.*信息记录。)', article).group(1).strip() publish_date = re.findall('.{4}年.{1,2}月.{1,3}日', article)[-1].strip() m = re.match( "([0-9零一二两三四五六七八九十〇○]+年)?([0-9一二两三四五六七八九十]+)月?([0-9一二两三四五六七八九十]+)[号日]?", publish_date) announcement_date = get_year(m.group(1)) + str(cn2dig( m.group(2))) + '月' + str(cn2dig(m.group(3))) + '日' elif announcement_type == '纪律处分': title = content_soup.find(attrs={ "class": 'xl_cen' }).find(attrs={ "class": 'xl_h' }).text.strip() article = content_soup.find(attrs={ "class": 'TRS_Editor' }).text.strip() announcement_code = re.search(r'(.*号)', article).group(1).strip() litigant = re.search(r'当事人[::](.*)[,,]', article).group(1).strip() defense_opinion = re.search(r'(作为.*条。)', article).group(1).strip() facts = re.search(r'(深圳.*元。)', article).group(1).strip() punishment_decision = re.search(r'(依据.*注册申请。)', article).group(1).strip() publish_date = re.findall('.{4}年.{1,2}月.{1,3}日', article)[-1].strip() m = re.match( "([0-9零一二两三四五六七八九十〇○]+年)?([0-9一二两三四五六七八九十]+)月?([0-9一二两三四五六七八九十]+)[号日]?", publish_date) announcement_date = get_year(m.group(1)) + str(cn2dig( m.group(2))) + '月' + str(cn2dig(m.group(3))) + '日' result_map = { 'announcementTitle': announcement_title, 'announcementOrg': '证券业协会', 'announcementDate': announcement_date, 'announcementCode': announcement_code, 'facts': facts, 'defenseOpinion': defense_opinion, 'defenseResponse': defense_response, 'litigant': litigant, 'punishmentBasement': punishment_basement, 'punishmentDecision': remove_special_char(punishment_decision), 'type': announcement_type, 'oss_file_id': file_id, 'status': 'not checked' } logger.info(result_map) if db.announcement.find({ 'announcementTitle': title, 'oss_file_id': file_id }).count() == 0: db.announcement.insert_one(result_map) logger.info('证券业协会 数据解析 ' + ' -- 数据导入完成') else: logger.info('证券业协会 数据解析 ' + ' -- 数据已经存在') db.parsed_data.update_one({'_id': file_id}, {'$set': {'parsed': True}}) logger.info('证券业协会 数据解析 ' + ' -- 修改parsed完成')
def shenzhen_circ(db, logger): for each_circ_data in db.circ_data.find({ 'origin': '深圳保监局', 'status': { '$nin': ['ignored'] } }): announcement_url = each_circ_data['url'] announcement_title = each_circ_data['title'] if db.circ_data.find({ 'url': announcement_url, 'status': 'parsed' }).count() == 1 and db.parsed_data.find({ 'origin_url': announcement_url, 'oss_file_origin_url': announcement_url, 'parsed': True }).count() == 1: continue logger.info('深圳保监局 ' + 'Url to parse: %s' % announcement_url) r = request_site_page(announcement_url) if r is None: logger.error('网页请求错误 %s' % announcement_url) continue content_soup = bs(r.content, 'lxml') if r else bs('', 'lxml') if db.parsed_data.find({ 'origin_url': announcement_url, 'oss_file_origin_url': announcement_url }).count() == 0: oss_file_map = { 'origin_url': announcement_url, 'oss_file_origin_url': announcement_url, 'origin_url_id': each_circ_data['_id'], 'oss_file_type': 'html', 'oss_file_name': announcement_title, 'oss_file_content': r.text.encode(r.encoding).decode('utf-8'), 'parsed': False } insert_response = db.parsed_data.insert_one(oss_file_map) file_id = insert_response.inserted_id oss_add_file(ali_bucket, str(file_id) + '/' + announcement_title + '.html', r.text.encode(r.encoding).decode('utf-8')) db.circ_data.update_one({'_id': each_circ_data['_id']}, {'$set': { 'status': 'parsed' }}) else: db.circ_data.update_one({'_id': each_circ_data['_id']}, {'$set': { 'status': 'parsed' }}) file_id = db.parsed_data.find_one({ 'origin_url': announcement_url, 'oss_file_origin_url': announcement_url })['_id'] table_content = content_soup.find(id='tab_content') if not table_content: logger.error('网页请求错误 %s' % announcement_url) continue content_text = get_content_text(table_content.find_all('tr')[3]) if content_text == '': continue title = table_content.find_all('tr')[0].text.strip() if '行政处罚信息主动公开事项' in title or '行政处罚事项' in title: result_map_list = [] table_value_list = table_to_list( table_content.find_all('tr')[3].find('table')) announcement_code = '' new_result_map = {} for index, each_origin_row in enumerate(table_value_list): each_row = [] for i in each_origin_row: if i not in each_row: each_row.append(i) if '文号' in each_row[0] or '行政处罚信息主动公开事项' in each_row[ 0] or '处罚决定书' in each_row[0]: continue if remove_strip(each_row[0]).strip() != announcement_code: if new_result_map != {}: punishment_basis_compiler = re.compile( r'(。|\n|;|^)' + r'(([^\n。;]*?)违反.*?第.*?条.*?规定)' + '.(\n?依据|\n?根据|\n?鉴于|\n?上述事实有现场检查确认书)', re.MULTILINE) punishment_basis_list = punishment_basis_compiler.findall( new_result_map['punishmentDecision']) punishment_basis = ';'.join( [kk[1].strip() for kk in punishment_basis_list]) new_result_map['punishmentBasement'] = punishment_basis logger.info(new_result_map) if db.announcement.find({ 'announcementTitle': new_result_map['announcementTitle'], 'oss_file_id': new_result_map['oss_file_id'] }).count() == 0: db.announcement.insert_one(new_result_map) logger.info('深圳保监局 数据解析 ' + ' -- 数据导入完成') else: logger.info('深圳保监局 数据解析 ' + ' -- 数据已经存在') result_map_list.append(new_result_map) announcement_code = remove_strip(each_row[0]).strip() this_punishment_decision = each_row[1].strip() + ':' + \ each_row[3].strip() + ' ' + each_row[4].strip() new_result_map = { 'announcementTitle': '深圳银保监局行政处罚信息主动公开事项(' + announcement_code + ')', 'announcementOrg': '深圳银保监局', 'announcementDate': format_date(each_row[-1].strip()), 'announcementCode': announcement_code, 'facts': each_row[1].strip() + ':' + each_row[2].strip(), 'defenseOpinion': '', 'defenseResponse': '', 'litigant': each_row[1].strip(), 'punishmentBasement': '', 'punishmentDecision': this_punishment_decision, 'type': '行政处罚决定', 'oss_file_id': file_id, 'status': 'not checked' } else: new_result_map['litigant'] += ',' + each_row[1].strip() new_result_map['facts'] += '\n' + each_row[1].strip( ) + ':' + each_row[2].strip() this_punishment_decision = each_row[1].strip() + ':' + \ each_row[3].strip() + ' ' + each_row[4].strip() new_result_map[ 'punishmentDecision'] += '\n' + this_punishment_decision if index == len(table_value_list) - 1: punishment_basis_compiler = re.compile( r'(。|\n|;|^)' + r'(([^\n。;]*?)违反.*?第.*?条.*?规定)' + '.(\n?依据|\n?根据|\n?鉴于|\n?上述事实有现场检查确认书)', re.MULTILINE) punishment_basis_list = punishment_basis_compiler.findall( new_result_map['punishmentDecision']) punishment_basis = ';'.join( [kk[1].strip() for kk in punishment_basis_list]) new_result_map['punishmentBasement'] = punishment_basis logger.info(new_result_map) if db.announcement.find({ 'announcementTitle': new_result_map['announcementTitle'], 'oss_file_id': new_result_map['oss_file_id'] }).count() == 0: db.announcement.insert_one(new_result_map) logger.info('深圳保监局 数据解析 ' + ' -- 数据导入完成') else: logger.info('深圳保监局 数据解析 ' + ' -- 数据已经存在') result_map_list.append(new_result_map) if len(result_map_list) > 0: db.parsed_data.update_one({'_id': file_id}, {'$set': { 'parsed': True }}) logger.info('深圳保监局 数据解析 ' + '一共有%d条数据' % len(result_map_list)) logger.info('深圳保监局 数据解析 ' + ' -- 修改parsed完成') else: logger.info('深圳保监局 数据解析 ' + ' -- 没有数据') else: document_code_compiler = re.compile(r'(深银?保监[处罚].\d{4}.\d+号)') if document_code_compiler.search(content_text): document_code = document_code_compiler.search( content_text).group(1).strip() if '送达行政处罚决定书的公告' in title or '文书送达公告' in title: litigant_compiler = re.compile(r'^([\s\S]*?)\n' + r'(经查|经检查|依据.*?的有关规定|抽查|经抽查' r'|经我局查明|我局已于|我局自|经我局查实)') litigant = litigant_compiler.search(content_text).group( 1).strip() else: litigant_compiler = re.compile( document_code.replace(r'[', r'\[').replace( r']', r'\]') + r'\n([\s\S]*?)\n' + r'(经查|经检查|依据.*?的有关规定|抽查|经抽查|' r'经我局查明|' r'我局已于|' r'我局自|' r'.*?进行了(现场检查|专项检查)|' r'.*?\n?至\n?.*?|' r'2006年4月4日)') litigant = litigant_compiler.search(content_text).group( 1).strip() else: if document_code_compiler.search(title): document_code = document_code_compiler.search(title).group( 1).strip() else: document_code = '' litigant_compiler = re.compile( r'^([\s\S]*?)\n' + r'(经查|经检查|依据.*?的有关规定|抽查|经抽查|经我局查明|我局已于|我局自|' r'.*?进行了(现场检查|专项检查)|.*?\n?至\n?.*?|' r'2006年4月4日)') litigant = litigant_compiler.search(content_text).group( 1).strip() truth_text_str = r'((经查|经检查|检查发现|抽查|经抽查|经我局查明|经我局查实)' \ r'([\s\S]*?))' \ r'((我局认为,)?[^,。,;\n]*?(上述|以上).*?(事实|行为|问题)(,|,)?有.*?等证据(在案)?证明(,|,|。)(足以认定。)?|' \ r'以上有.*?等证据为证。|' \ r'(根据|依据)\n?.*?第.*?条|' \ r'根据\n《\n保险营销员管理规定》第\n55\n条\n的规定|' \ r'依照《保险统计管理暂行管理规定》第38条的规定,我局决定|' \ r'依据《中华人民共和国保险法》一百五十条的规定,我局决定|' \ r'该行为违反了《中华人民共和国保险法》第107条|' \ r'上述行为违反了《中华人民共和国保险法》第一百四十五条、《保险代理机构管理规定》第一百二十九条和第一百三十八条|' \ r'上述行为违反了《中华人民共和国保险法》第一百四十五条、《保险代理机构管理规定》第一百二十九条、第一百三十八条和第一百四十三条的规定|' \ r'上述行为违反了《中华人民共和国保险法》第一百四十五条、《保险经纪机构管理规定》第一百二十二条和第一百二十九条的规定|' \ r'上述行为违反了《保险代理机构管理规定》第一百二十五条|' \ r'基于你公司以上违规行为的性质、危害,以及你公司在我局检查过程中存在的拖延提供会计凭证|' \ r'按照《保险法》第147条关于“对提供虚假的报告、报表、文件和资料的|' \ r'(针对|对于).*?上述(违法)?违规行为|' \ r'基于以上问题|' \ r'因与你无法联系)' truth_compiler = re.compile(truth_text_str) if truth_compiler.search(content_text): truth = truth_compiler.search(content_text).group(1).strip() else: truth_text_str = litigant + r'([\s\S]*?)' \ r'((我局认为,)?(上述|以上).*?(事实|行为|事实)(,|,)?有.*?等证据(在案)?证明(,|,|。)(足以认定。)?|' \ r'以上有.*?等证据为证。|' \ r'作为该分公司分管银行保险业务的副总经理,你对上述违规问题负有直接责任。|' \ r'(根据|依据)\n?.*?第.*?条|' \ r'根据\n《\n保险营销员管理规定》第\n55\n条\n的规定|' \ r'针对你公司存在的上述违规行为)' truth_compiler = re.compile(truth_text_str) truth = truth_compiler.search(content_text).group(1).strip() if '申辩' in content_text: defense_text_str = r'((针对.*?行为.*?申辩意见|(当事人)?[^,。,;\n]*?(未)?提出(了)?陈述申辩(意见)?|' \ r'[^,。,;\n]*?向我局(报送|递交|提出)[^,。,;\n]*?|本案在审理过程中.*?提出陈述申辩|' \ r'[^,。,;\n]*?在(申辩材料|陈述申辩|陈述申辩意见|申辩意见)中称|[^,。,;\n]*?在听证阶段提出|' \ r'[^,。,;\n]*?在法定期限内(未)?提出(了)?(听证要求|陈述申辩|陈述申辩及听证要求))' \ r'([\s\S]*?))' \ r'(因此,我局决定|' \ r'我局经复核(认为|决定)|' \ r'本案现已审理终结|' \ r'我局经复查[^,。,;\n]*?情况|' \ r'我局[^,。,;\n]*?认真复核|' \ r'经研究,对[^,。,;\n]*?予以采纳。|' \ r'我局认为.*?申辩理由|' \ r'依据.*?我局认为.*?的申辩理由|' \ r'经研究,我局认为.*?申辩意见|' \ r'经我局审核,决定|' \ r'我局认为,上述违法行为事实清楚、证据确凿、法律法规适当|' \ r'我局对陈述申辩意见进行了复核|' \ r'经我局审核|' \ r'针对[^,。,;\n]*?的(陈述)?申辩意见,我局进行了核实|' \ r'经查,我局认为|' \ r'依据现场检查及听证情况)' defense_compiler = re.compile(defense_text_str, re.MULTILINE) defense_list = defense_compiler.findall(content_text) if len(defense_list) != 0: defense = defense_list[-1][0] defense_response_str = defense.replace(r'[', r'\[').replace(r']', r'\]') \ + r'(([\s\S]*?)' + r'(本案现已审理终结。|不符合.*?情形。|根据.*?依法可从轻或者减轻行政处罚。|' \ r'对[^,。,;\n]*?申辩意见(不予|予以)采纳|因此.*?申辩理由.*?成立。|' \ r'我局认为.*?申辩(理由|意见).*?符合.*?第.*?条.*?的条件.(予以采纳。)?))' defense_response_compiler = re.compile( defense_response_str, re.MULTILINE) if defense_response_compiler.search(content_text): defense_response = defense_response_compiler.search( content_text).group(1).strip() else: if '未' in defense: defense_response = '' else: defense_text_str = '(你至今未向我局受领该《行政处罚事先告知书》,也未向我局提出陈述申辩。)' defense_compiler = re.compile(defense_text_str, re.MULTILINE) defense = defense_compiler.search(content_text).group( 1).strip() defense_response = '' else: defense = defense_response = '' punishment_decision_text_str = r'(((依据|根据).*?第?.*?条.*?(规定)?.?(我局)?(决定|责令|给予|于.*?向.*?发出|对.*?作出|拟对你|现责令)|' \ r'我局经复核认为|我局决定.*?作出(如下|以下)(行政)?处罚:|' \ r'依照《保险统计管理暂行管理规定》第38条的规定,我局决定|' \ r'依据《中华人民共和国保险法》,我局对你公司做出如下处理|' \ r'按照《保险法》第147条关于“对提供虚假的报告、报表、文件和资料的|' \ r'依据《中华人民共和国保险法》一百五十条的规定,我局决定|' \ r'按照《保险法》第147条关于“对提供虚假的报告、报表、文件和资料的,尚不构成罪犯的,由保险监督管理机构责令改正,处以十万元以上五十万元以下的罚款|' \ r'据此,决定给予你公司以下行政处罚|' \ r'依据《中华人民共和国保险法》,我局决定对你公司做出如下处罚:|' \ r'针对你公司存在的上述违规行为,根据《保险法》第139条、第145条、第147条、第150条和《交强险条例》第38\n?条的规定,决定给予|' \ r'针对上述违规行为,我局拟对你公司进行如下行政处罚|' \ r'根据\n《\n保险营销员管理规定》第\n55\n条\n的规定|' \ r'根据《保险代理机构管理规定》第一百四十一条第(一)\n?项的规定,我局现责令|' \ r'依据《中华人民共和国保险法》第一百四十七条第(一)项和《保险经纪机构管理规定》第一百三十三条第(一)项\n?的规定,我局现责令|' \ r'鉴于你公司能及时纠正上述违法行为,根据《中华人民共和国行政处罚法》第二十七\n?条第一款第(一)项,?' \ r'中国保监会《保险专业代理机构监管规\n?定》第八十条第一款第(一)项、第(二)项的规定,我局决定|' \ r'因与你无法联系)' \ r'([\s\S]*?))\n' \ r'(请在本处罚决定书送达之日|当事人应当在接到本处罚决定书之日|如不服本处罚决定|' \ r'请(在)?接到本处罚决定书之日|如不服从本处罚决定|如对本处理决定不服|.*?应于接到本处罚决定书之日|' \ r'.*?应在接到本处罚决定书之日|.*?于收到本决定书之日|.*?应于收到本处罚决定书之日|请在接到本决定书之日|' \ r'因你下落不明,我局无法与你取得联系|请.*?在接到本处罚决定书之日|请.*?在收到本处罚决定书之日|' \ r'请.*?收到本决定书之日|你公司应在收到本处罚决定书之日|' \ r'联席人)' punishment_decision_compiler = re.compile( punishment_decision_text_str) punishment_decision = punishment_decision_compiler.search( content_text).group(1).strip() punishment_basis_str_list = [ r'([^\n。]*?)(问题|行为|事项|情况|事实)([^\n。;\s]*?)违反([^\n。\s]*?)第([^\n。\s]*?)条([\s\S]*?)', r'[^\n。;]*?违反了[^\n。;]*?第[^\n。;]*?条[^\n。;]*?', r'上述行为违反了\n《\n保险营销员管理规定\n》第36条\n的规定', r'上述行为违反了《保险代理机构管理规定》,你作为总经理,对深圳市鼎盛保险代理公司的上述行为负有直接责任', r'你公司对于上述保费资金的收付及所谓“业务费用”的支付等均未纳入账内进行会计核算,也未能提供相关凭证和证明资料,属帐外经营,' r'违反了《保险代理机构管理规定》第一百零七条“保险代理机构及其分支机构报送的报表、报告和资料应当及时、准确、完整”的规定。\n' r'你公司对于上述业务未建立详细的业务记录,也未进行业务档案或专门帐簿管理,违反了《保险代理机构管理规定》第九十六条“保险代理机构及其分支机构应当建立完整规范的业务档案”的规定' ] punishment_basis_str = '|'.join(punishment_basis_str_list) punishment_basis_compiler = re.compile( r'[。\n;]' + '(' + punishment_basis_str + ')' + r'.(\n?(针对.*?上述违规行为.*?|基于以上问题.*?|对以上违规行为.*?)?依据|' r'\n?(针对.*?上述违规行为.*?|基于以上问题.*?)?根据|' r'\n?鉴于|\n二、|\n?对于你公司上述违规行为|\n?依照|\n三、|\n四、|\n五、|\n六、|\n七、|\n八、|' r'\n2、|\n3、|\n4、|\n?以上有.*?等证据为证|\n(二)|\n(三)|\n(四)|' r'\n(五)|\n?据此|\n?于“保险机构应当根据)', re.MULTILINE) punishment_basis_list = punishment_basis_compiler.findall( content_text) punishment_basis = ';'.join( [kk[0].strip() for kk in punishment_basis_list]) publish_date_text = re.search(r'\n(.*?)$', content_text).group(1).replace( '\n', '') if re.search(r'.{4}年.{1,2}月.{1,3}日', publish_date_text): publish_date = re.findall('.{4}年.{1,2}月.{1,3}日', publish_date_text)[-1].replace( ' ', '') m = re.match( "([0-9零一二两三四五六七八九十〇○OOΟО]+年)?([0-9一二两三四五六七八九十]+)月?([0-9一二两三四五六七八九十]+)[号日]?", publish_date) real_publish_date = get_year(m.group(1)) + str( cn2dig(m.group(2))) + '月' + str(cn2dig(m.group(3))) + '日' else: publish_date_text = table_content.find_all('tr')[1].text publish_date = re.findall(r'\d{4}-\d{1,2}-\d{1,2}', publish_date_text)[-1] real_publish_date = publish_date.split('-')[0] + '年' + str( int(publish_date.split('-')[1])) + '月' + str( int(publish_date.split('-')[2])) + '日' result_map = { 'announcementTitle': title, 'announcementOrg': '深圳银保监局', 'announcementDate': real_publish_date, 'announcementCode': document_code, 'facts': truth, 'defenseOpinion': defense, 'defenseResponse': defense_response, 'litigant': litigant[:-1] if litigant[-1] == ':' else litigant, 'punishmentBasement': punishment_basis, 'punishmentDecision': punishment_decision, 'type': '行政处罚决定', 'oss_file_id': file_id, 'status': 'not checked' } logger.info(result_map) if db.announcement.find({ 'announcementTitle': title, 'oss_file_id': file_id }).count() == 0: db.announcement.insert_one(result_map) logger.info('深圳保监局 数据解析 ' + ' -- 数据导入完成') else: logger.info('深圳保监局 数据解析 ' + ' -- 数据已经存在') db.parsed_data.update_one({'_id': file_id}, {'$set': { 'parsed': True }}) logger.info('深圳保监局 数据解析 ' + ' -- 修改parsed完成')
def exchange_parse(): s = requests.Session() s.get('http://www.safe.gov.cn/safe/whxzcfxxcx/index.html') excel_data = open_workbook('./xlsx_file/exchange/exchange_punishment_company.xlsx') for sheet_number in range(9): sheet = excel_data.sheets()[sheet_number] for i in range(sheet.nrows): if sheet.cell(i, 0).value != '' and \ sheet.cell(i, 0).value not in ['L\'occitane International S.A.', 'K W Nelson Interior Design and Contracting Group Limited']: logger.info('公司名称:' + sheet.cell(i, 0).value) data_json = { 'irregularityname': sheet.cell(i, 0).value, 'irregularityno': '' } r = s.post('http://www.safe.gov.cn/www/punish/punishQuery', data=data_json) # time.sleep(2) soup = bs(r.text, "lxml") try: if len(soup.find(id='bbstab').find_all('tr')[1:]) > 0: for each_tr in soup.find(id='bbstab').find_all('tr')[1:]: td_list = each_tr.find_all('td') litigant = '' if td_list[1].text.strip() != '': litigant += '违规主体名称:' + td_list[1].text.strip() + '\n' if td_list[2].text.strip() != '': litigant += '注册地:' + td_list[2].text.strip() + '\n' if td_list[3].text.strip() != '': litigant += '机构代码:' + td_list[3].text.strip() litigant = litigant.strip() announcement_code = td_list[5].text.strip() if td_list[8].text.strip() in ['8/16/16']: announcement_date = '20' + td_list[8].text.strip().split('/')[2] + '年' + \ td_list[8].text.strip().split('/')[0] + '月' + \ td_list[8].text.strip().split('/')[1] + '日' else: announcement_date = format_date(td_list[8].text.strip()) announcement_org = td_list[4].text.strip() if announcement_org == '西藏分局': announcement_org = '国家外汇管理局西藏分局' announcement_title = '外汇行政处罚信息公示表(' + announcement_code + ')' \ if announcement_code != '' else '外汇行政处罚信息公示表' facts = td_list[6].text.strip() if td_list[7].text.strip() != '': if td_list[7].text.strip().startswith('依据') or td_list[7].text.strip().startswith('根据'): punishment_decision = td_list[7].text.strip() + ',' + td_list[9].text.strip() else: punishment_decision = '依据' + td_list[7].text.strip() + ',' + td_list[9].text.strip() else: punishment_decision = td_list[9].text.strip() punishment_decision = punishment_decision.replace('。,', ',').replace(',,', ',') \ .replace(';,', ',') facts = facts.replace(',', ',').replace(';', '。') punishment_decision = punishment_decision.replace(',', ',').replace(';', '。') result_map = { 'announcementTitle': announcement_title, 'announcementOrg': announcement_org, 'announcementDate': announcement_date, 'announcementCode': announcement_code, 'facts': facts, 'defenseOpinion': '', 'defenseResponse': '', 'litigant': litigant, 'punishmentBasement': '', 'punishmentDecision': punishment_decision, 'type': '行政处罚决定', 'oss_file_id': '', 'status': 'checked' } logger.info(result_map) if db.announcement.find( {'announcementTitle': announcement_title, 'litigant': litigant}).count() == 0: db.announcement.insert_one(result_map) logger.info('外汇处罚 数据解析 ' + ' -- 数据导入完成') else: logger.info('外汇处罚 数据解析 ' + ' -- 数据已经存在') else: logger.warning('没有处罚数据~') except Exception as e: logger.error(e) continue
def parse_cbrc(): for each_cbrc_document in db.cbrc_data.find({ 'origin': '银监会', 'status': { '$nin': ['ignored'] } }): announcement_url = each_cbrc_document['url'] announcement_title = each_cbrc_document['title'] if re.search( r'(^.*?行政处罚事项目录$|^.*?政府信息公开工作报告$|' '^青海银监局2014年实施行政处罚基本情况$|' '^上海银监局对部分银行信用卡业务的违规行为实施行政处罚$)', announcement_title): logger.warning(announcement_url + ' ' + announcement_title + ' 与监管处罚无关') db.cbrc_data.update_one({'_id': each_cbrc_document['_id']}, {'$set': { 'status': 'ignored' }}) logger.info('银监会' + ' 无关数据' + ' -- 修改status完成') continue if db.cbrc_data.find( {'url': announcement_url, 'status': 'parsed'}).count() == 1 and db.parsed_data.find( {'origin_url': announcement_url, 'parsed': True}).count() == 1 and \ db.announcement.find( {'oss_file_id': db.parsed_data.find({'origin_url': announcement_url})[0]['_id']}).count() > 0: continue logger.info('Url to parse: ' + announcement_url + ' ' + announcement_title) content_response = request_site_page(announcement_url) if content_response is None: logger.error('网页请求错误') continue content_soup = bs(content_response.text.encode(content_response.encoding).decode('utf-8'), 'lxml') \ if content_response else bs('', 'lxml') if db.parsed_data.find({ 'origin_url': announcement_url, 'oss_file_origin_url': announcement_url }).count() == 0: oss_file_map = { 'origin_url': announcement_url, 'oss_file_origin_url': announcement_url, 'origin_url_id': each_cbrc_document['_id'], 'oss_file_type': 'html', 'oss_file_name': announcement_title, 'oss_file_content': content_response.text.encode( content_response.encoding).decode('utf-8'), 'parsed': False } insert_response = db.parsed_data.insert_one(oss_file_map) file_id = insert_response.inserted_id oss_add_file( ali_bucket, str(file_id) + '/' + announcement_title + '.html', content_response.text.encode( content_response.encoding).decode('utf-8')) db.cbrc_data.update_one({'_id': each_cbrc_document['_id']}, {'$set': { 'status': 'parsed' }}) else: db.cbrc_data.update_one({'_id': each_cbrc_document['_id']}, {'$set': { 'status': 'parsed' }}) file_id = db.parsed_data.find_one({ 'origin_url': announcement_url, 'oss_file_origin_url': announcement_url })['_id'] if '行政处罚信息公开表' in announcement_title: content_table_list = table_to_list( content_soup.find(class_='MsoNormalTable')) content_list = [] for each_row in content_table_list: for each_col in each_row: if each_col not in content_list: content_list.append(each_col) content_text = remove_special_char('\n'.join(content_list)) title = announcement_title document_code = re.search(r'^行政处罚决定书文号([\s\S]*)\n被处罚当事人姓名或名称', content_text).group(1).strip() person_name = re.search(r'\n个人姓名([\s\S]*)\n单位\n?名称', content_text).group(1).strip() company_name = re.search(r'\n单位\n?名称([\s\S]*)\n法定代表人((主要负责人))?姓名', content_text).group(1).strip() legal_representative_compiler = re.compile( r'\n法定代表人((主要负责人))?姓名([\s\S]*)\n主要违法违规事实(\n)?(案由)', re.MULTILINE) legal_representative = legal_representative_compiler.search( content_text).group(2).strip() truth_compiler = re.compile( r'\n主要违法违规事实(\n)?(案由)([\s\S]*)\n行政处罚依据', re.MULTILINE) truth = truth_compiler.search(content_text).group(2).strip() punishment_basis = '' punishment_decision_basis = re.search( r'\n行政处罚依据([\s\S]*)\n行政处罚决定', content_text).group(1).strip() punishment_decision_compiler = re.compile( r'\n行政处罚决定([\s\S]*)\n作出处罚决定的\n?机关\n?名称', re.MULTILINE) punishment_decision = punishment_decision_compiler.search( content_text).group(1).strip() final_punishment_decision = '依据' + punishment_decision_basis + ',' + punishment_decision final_punishment_decision = final_punishment_decision.replace( '。,', ',').replace(',,', ',') publish_date = re.search(r'\n作出处罚决定的日期([\s\S]*)$', content_text).group(1).strip() litigant = '' if person_name != '': litigant += '个人姓名: ' + person_name + '\n' if company_name != '': litigant += '单位名称: ' + company_name + '\n' if legal_representative != '': litigant += '单位法定代表人姓名: ' + legal_representative result_map = { 'announcementTitle': title.replace('\n', ''), 'announcementOrg': '银保监会', 'announcementDate': format_date(publish_date), 'announcementCode': document_code, 'facts': truth, 'defenseOpinion': '', 'defenseResponse': '', 'litigant': litigant.strip(), 'punishmentBasement': punishment_basis, 'punishmentDecision': final_punishment_decision, 'type': '行政处罚决定', 'oss_file_id': file_id, 'status': 'not checked' } else: content_text = content_soup.find(class_='Section0').text.strip() \ if content_soup.find(class_='Section0') else content_soup.find(class_='Section1').text.strip() litigant_compiler = re.compile('\n(.*):\n', re.MULTILINE) litigant = litigant_compiler.search(content_text).group(1) truth = re.search(r'经查,你(.*)。根据', content_text).group(1).strip() punishment_basis = re.search(r'。根据(.*)我会拟对你', content_text).group(1).strip() punishment_decision = re.search(r'我会拟对你(.*)', content_text).group(1).strip() publish_date = content_text.split('\n')[-1] document_code = re.search(r'银监罚告字〔\d{4}〕\d+号', content_text).group(0).strip() title = announcement_title result_map = { 'announcementTitle': title.replace('\n', ''), 'announcementOrg': '银保监会', 'announcementDate': publish_date, 'announcementCode': document_code, 'facts': truth, 'defenseOpinion': '', 'defenseResponse': '', 'litigant': litigant, 'punishmentBasement': punishment_basis, 'punishmentDecision': punishment_decision, 'type': '行政处罚决定', 'oss_file_id': file_id, 'status': 'not checked' } logger.info(result_map) if db.announcement.find({ 'announcementTitle': title, 'oss_file_id': file_id }).count() == 0: db.announcement.insert_one(result_map) logger.info('银监会 数据解析 ' + ' -- 数据导入完成') else: logger.info('银监会 数据解析 ' + ' -- 数据已经存在') db.parsed_data.update_one({'_id': file_id}, {'$set': {'parsed': True}}) logger.info('银监会 数据解析 ' + ' -- 修改parsed完成')
def parse_table(file_id, table, origin_title, origin_publish_date): strip_list = [ '', '\xa0', '-', '——', '———', '—', '/', '---', '----', '--', '-----', '------' ] content_table_list = table_to_list(table) announcement_code = person_name = person_company = company_name = legal_representative \ = truth = punishment_basement = punishment_decision = organization = publish_date \ = litigant = '' for each_row in content_table_list: if re.search(r'(行政)?处罚决定书?文书?号', remove_strip(each_row[0].strip())): announcement_code = each_row[-1].strip() if re.search(r'(被处罚当事人)', remove_strip(each_row[0].strip())) and \ re.search(r'(个人)', remove_strip(each_row[1].strip())) and \ re.search(r'(姓名|名称)', remove_strip(each_row[2].strip())): person_name = each_row[-1].strip() if re.search(r'(被处罚当事人)', remove_strip(each_row[0].strip())) and \ re.search(r'(个人)', remove_strip(each_row[1].strip())) and \ re.search(r'(单位)', remove_strip(each_row[2].strip())): person_company = each_row[-1].strip() if re.search(r'(被处罚当事人)', remove_strip(each_row[0].strip())) and \ re.search(r'(单位)', remove_strip(each_row[1].strip())) and \ re.search(r'(名称)', remove_strip(each_row[2].strip())): company_name = each_row[-1].strip() if re.search(r'(被处罚当事人)', remove_strip(each_row[0].strip())) and \ re.search(r'(单位)', remove_strip(each_row[1].strip())) and \ re.search(r'(法定代表人|主要负责人)', remove_strip(each_row[2].strip())): legal_representative = each_row[-1].strip() if re.search(r'(主要(违法)?违规事实|案由)', remove_strip(each_row[0].strip())): truth = each_row[-1].strip() if re.search(r'(^行政处罚依据$)', remove_strip(each_row[0].strip())): punishment_basement = each_row[-1].strip() if re.search(r'(^行政处罚决定$)', remove_strip(each_row[0].strip())): punishment_decision = each_row[-1].strip() if re.search(r'(作出.*?机关名称)', remove_strip(each_row[0].strip())): organization = each_row[-1].strip() if re.search(r'(作出.*?日期)', remove_strip(each_row[0].strip())): publish_date = each_row[-1].strip() if person_name not in strip_list: litigant += '个人姓名: ' + remove_strip(person_name) + '\n' if person_company not in strip_list: litigant += '个人就职单位: ' + remove_strip(person_company) + '\n' if company_name not in strip_list: litigant += '单位名称: ' + remove_strip(company_name) + '\n' if legal_representative not in strip_list: litigant += '单位法定代表人姓名: ' + remove_strip(legal_representative) # 这个页面的日期和机构是反的 if announcement_code == '永银监罚决字〔2018〕34号': organization = '永州银监分局' publish_date = '2018年5月7日' organization = organization.replace('\n', '').strip() if organization == '中国银行业监督管理委员会湘潭分局': organization = '湘潭银监分局' if organization == '中国滨州监管分局': organization = '滨州银监分局' if organization == '中国监管会临沂监管分局': organization = '临沂银监分局' if organization == '陕西监管局': organization = '陕西银监局' if organization == '中国银行监督管理委员会乐山监管分局': organization = '乐山银监分局' if organization == '中国监管会临沂监管分局' or organization == '临汾监管分局' or organization == '中国银监员会临沂监管分局': organization = '临沂银监分局' if organization == '鸡西监管分局': organization = '鸡西银监分局' if re.match('中国(银监会|银行业?监督管理委员会|银行业监督委员会|银行业监管管理委员会)(.*?)(监管|银监)局', organization): organization = re.search( r'中国(银监会|银行业?监督管理委员会|银行业监督委员会|银行业监管管理委员会)(.*?)(监管|银监)局', organization).group(2).strip() + '银监局' elif re.match('中国(银监会|银行业?监督管理委员会|银行业监督委员会|银行业监管管理委员会)(.*?)(监管|银监)分局', organization): organization = re.search( r'中国(银监会|银行业?监督管理委员会|银行业监督委员会|银行业监管管理委员会)(.*?)(监管|银监)分局', organization).group(2).strip() + '银监分局' organization = organization.replace('中国银监会', '').replace('(根据授权实施行政处罚)', '') \ .replace('(筹)', '').replace('名称', '').replace('。', '') if re.match('.*(.*)', organization): organization = organization if publish_date != '': publish_date = format_date(publish_date) else: publish_date = format_date(origin_publish_date) title = remove_strip(origin_title) result_map = { 'announcementTitle': title, 'announcementOrg': organization, 'announcementDate': publish_date, 'announcementCode': remove_strip(announcement_code), 'facts': truth, 'defenseOpinion': '', 'defenseResponse': '', 'litigant': litigant.strip(), 'punishmentBasement': '', 'punishmentDecision': ('依据' + punishment_basement + ',' + punishment_decision).replace( '。,', ',').replace('依据根据', '依据').replace('依据依据', '依据'), 'type': '行政处罚决定', 'oss_file_id': file_id, 'status': 'not checked' } logger.info(result_map) if db.announcement.find({ 'announcementTitle': title, 'oss_file_id': file_id }).count() == 0: db.announcement.insert_one(result_map) logger.info('银监局 数据解析 ' + organization + ' -- 数据导入完成') else: logger.info('银监局 数据解析 ' + organization + ' -- 数据已经存在') db.parsed_data.update_one({'_id': file_id}, {'$set': {'parsed': True}}) logger.info('银监局 数据解析 ' + organization + ' -- 修改parsed完成')
def parse_text(file_id, text, origin_title, origin_publish_date, organization): logger.info(text) if re.search( r'^(中国银行业监督管理委员会上海监管局\n|' '中国银行业监管管理委员会上海监管局\n|' '中国银监会海南监管局行政处罚决定书\n|' '中国银行业监督管理委员会\n *海南监管局行政处罚决定书\n|' '中国银行业监督管理委员会天津监管局\n行政处罚决定书\n|' '.*?青岛监管局|' '行政处罚决定书\n|' '.*?天津监管局\n行政处罚决定书|' '中国银行业监督管理委员会三亚监管分局\n行政处罚决定书\n)(.*?)\n', text): announcement_code = re.search( r'^(中国银行业监督管理委员会上海监管局\n|' '中国银行业监管管理委员会上海监管局\n|' '中国银监会海南监管局行政处罚决定书\n|' '中国银行业监督管理委员会\n *海南监管局行政处罚决定书\n|' '中国银行业监督管理委员会天津监管局\n行政处罚决定书\n|' '.*?青岛监管局|' '行政处罚决定书\n|' '.*?天津监管局\n行政处罚决定书|' '中国银行业监督管理委员会三亚监管分局\n行政处罚决定书\n)(.*?)\n', text).group(2).strip() litigant = re.search( announcement_code.replace(r'(', r'\(').replace( r')', r'\)').replace(r'.', r'\.').replace(r'[', r'\[').replace( r']', r'\]').replace(r'*', r'\*').replace(r'+', r'\+') + r'([\s\S]*?)' + r'(根据.*有关(规定|法律法规|法规)|违法事实和证据:\n)', text).group(1).strip().replace('\xa0', '') else: if re.search(r'^(.*?)\s*中国银行业监督管理委员会上海监管局行政处罚决定书', text): announcement_code = re.search(r'^(.*?)\s*中国银行业监督管理委员会上海监管局行政处罚决定书', text).group(1).strip() litigant = re.search( r'中国银行业监督管理委员会上海监管局行政处罚决定书' + r'([\s\S]*?)' + r'(根据.*有关(规定|法律法规|法规)|违法事实和证据:\n)', text).group(1).strip().replace('\xa0', '') else: announcement_code = '' litigant = re.search( r'(行政处罚决定书送达公告|意见告知书送达公告|行政处罚意见告知书的送达公告)([\s\S]*?)经查', text).group(1).strip().replace(':', '') punishment_decision = re.search( r'(((根据.*?(规定)?|综上),.*?([作做])出(如下|以下|罚款人民币.*?万元的)(行政处罚|决定|处罚)|处罚决定:\n|' '根据.*?第.*?条.*?规定([,,])决定对.*?处以.*?行政处罚|' '根据.*?第.*?条.*?规定([,,])现(给予|对.*?作出).*?行政处罚|' '依据《中华人民共和国商业银行法》第五十条“商业银行办理业务,提供服务,按照规定收取手续费”以及七十三条第四款“商业银行有下列情形之一|' '((综合考虑|根据).*?)?(根据|按照).*?第.*?条.*?规定.*?(我局)?决定.*?给予.*?行政处罚|' '根据《中华人民共和国银行业监督管理法》第四十八条第(三)项的规定,我分?局拟?对你作出)' r'[\s\S]*?)\n' '(.*?自收到本(行政)?处罚决定书?之日|.*?如不服本行政处罚决定|' '处罚的履行方式和期限|根据《中华人民共和国行政处罚法》第三十一条、第三十二条的规定,你如对上述处罚意见有异议|' '逾期不提出申请的,视为放弃听证权利。)', text).group(1).strip() if '处罚依据:\n' in text or '处罚的依据:\n' in text: truth_text_str = '(违法事实和证据:\n)' \ r'([\s\S]*?)' \ '(处罚(的)?依据:\n|上述(事实|行为)有.*?等证据为证。)' truth_compiler = re.compile(truth_text_str, re.MULTILINE) truth_list = truth_compiler.findall(text) truth = '\n'.join([kk[1] for kk in truth_list]) truth = re.sub('(\n|\r|\r\n)+', '\n', truth).strip() punishment_basis_str_list = [ r'([^\n。;]*?)(问题|行为|事项|情况|事实|做法)([^\n。;\s]*?)违反.*?((的|之|等)(相关)?(规定|要求))?', ] punishment_basis_str = '|'.join(punishment_basis_str_list) punishment_basis_compiler = re.compile( '(。\n;)' + '(' + punishment_basis_str + ')' + '.(\n?依据|\n?根据|\n?鉴于|\n二|\n?综合考虑)', re.MULTILINE) punishment_basis_list = punishment_basis_compiler.findall(text) punishment_basis = ';'.join( [kk[1].strip() for kk in punishment_basis_list]) punishment_decision_basis = re.search(r'处罚(的)?依据:\n([\s\S]*?)处罚决定:', text).group(2).strip() punishment_decision = re.search( r'处罚决定:([\s\S]*?)' '(.*?自收到本(行政)?处罚决定书?之日|.*?如不服本行政处罚决定|处罚的履行方式和期限)', text).group(1).strip() punishment_final_decision = ('依据' + punishment_decision_basis + ',' + punishment_decision).replace('。,', ',') else: truth_text_str = r'((经查|违法事实和证据:\n|(二)|二、)' \ r'[\s\S]*?)' \ r'(处罚(的)?依据:\n|上述(事实|行为)有.*?等证据为证。|根据.*第.*?条.*?规定.*?作出.*?处罚|' \ r'以上行为违反了《个人贷款管理暂行办法》第三条、第七条、|' \ r'[^。;\s]*?(问题|行为|事项|情况|事实|做法)[^。;\s]*?违反.*?(规定|要求))' truth_compiler = re.compile(truth_text_str, re.MULTILINE) truth_list = truth_compiler.findall(text) truth = '\n'.join([kk[0] for kk in truth_list]) truth = re.sub('(\n|\r|\r\n)+', '\n', truth).strip() punishment_final_decision = punishment_decision if re.search( truth_list[-1][0].replace(r'(', r'\(').replace( r')', r'\)').replace(r'.', r'\.').replace( r'[', r'\[').replace(r']', r'\]').replace( r'*', r'\*').replace(r'+', r'\+') + r'\n?(上述(事实|行为)有.*?等证据为证。)([\s\S]*)$', text, re.MULTILINE): punishment_basis_text = r'\n' + \ re.search(truth_list[-1][0].replace(r'(', r'\(').replace(r')', r'\)') .replace(r'.', r'\.').replace(r'[', r'\[').replace(r']', r'\]') .replace(r'*', r'\*').replace(r'+', r'\+') + r'\n?(上述(事实|行为)有.*?等证据为证。)' r'([\s\S]*)$', text, re.MULTILINE).group(3).strip() + '\n' else: punishment_basis_text = text punishment_basis_str_list = [ r'([^\n。;]*?)(问题|行为|事项|情况|事实|做法)([^\n。;\s]*?)违反.*?((的|之|等)(相关)?(规定|要求))?', ] punishment_basis_str = '|'.join(punishment_basis_str_list) punishment_basis_compiler = re.compile( r'([。\n;])' + '(' + punishment_basis_str + ')' + '.(\n?依据|\n?根据|\n?鉴于|\n二|\n?综合考虑)', re.MULTILINE) punishment_basis_list = punishment_basis_compiler.findall( punishment_basis_text) punishment_basis = ';'.join( [kk[1].strip() for kk in punishment_basis_list]) publish_date_text = re.search( punishment_decision.replace(r'(', r'\(').replace(r')', r'\)').replace( r'.', r'\.').replace(r'[', r'\[').replace(r']', r'\]').replace( r'*', r'\*').replace(r'+', r'\+') + r'([\s\S]*?)$', text).group(1).strip() if re.search(r'.{4}年.{1,2}月.{1,3}日', publish_date_text): publish_date = re.findall('.{4}年.{1,2}月.{1,3}日', publish_date_text)[-1].replace(' ', '') real_publish_date = format_date(publish_date) else: real_publish_date = format_date(origin_publish_date) result_map = { 'announcementTitle': origin_title, 'announcementOrg': organization, 'announcementDate': real_publish_date, 'announcementCode': remove_strip(announcement_code), 'facts': truth, 'defenseOpinion': '', 'defenseResponse': '', 'litigant': litigant, 'punishmentBasement': punishment_basis, 'punishmentDecision': punishment_final_decision, 'type': '行政处罚决定', 'oss_file_id': file_id, 'status': 'not checked' } logger.info(result_map) if db.announcement.find({ 'announcementTitle': origin_title, 'oss_file_id': file_id }).count() == 0: db.announcement.insert_one(result_map) logger.info('银监局 数据解析 ' + organization + ' -- 数据导入完成') else: logger.info('银监局 数据解析 ' + organization + ' -- 数据已经存在') db.parsed_data.update_one({'_id': file_id}, {'$set': {'parsed': True}}) logger.info('银监局 数据解析 ' + organization + ' -- 修改parsed完成')
def shaanxi_circ(db, logger): for each_circ_data in db.circ_data.find({ 'origin': '陕西保监局', 'status': { '$nin': ['ignored'] } }): announcement_url = each_circ_data['url'] announcement_title = each_circ_data['title'] if db.circ_data.find({ 'url': announcement_url, 'status': 'parsed' }).count() == 1 and db.parsed_data.find({ 'origin_url': announcement_url, 'parsed': True }).count() >= 1: continue logger.info('陕西保监局 ' + 'Url to parse: %s' % announcement_url) r = request_site_page(announcement_url) if r is None: logger.error('网页请求错误 %s' % announcement_url) continue content_soup = bs(r.content, 'lxml') if r else bs('', 'lxml') table_content = content_soup.find(id='tab_content') if not table_content: logger.error('网页请求错误 %s' % announcement_url) continue content_text = get_content_text(table_content.find_all('tr')[3]) if content_text == '': continue title = table_content.find_all('tr')[0].text.strip() if '行政处罚公布' in title or '行政处罚汇总' in title: rar_link = [ urljoin(announcement_url, each_link.attrs['href']) for each_link in content_soup.find_all('a') if '.rar' in each_link.attrs['href'] ][0] response = request_site_page(rar_link) with open('./test/tmp.rar', 'wb') as out_file: for chunk in response.iter_content(chunk_size=1024): if chunk: out_file.write(chunk) if not os.path.exists('./test/tmp'): os.mkdir('./test/tmp') patoolib.extract_archive('./test/tmp.rar', outdir='./test/tmp') doc_file_list = [] for root, dirs, files in os.walk("./test/tmp", topdown=False): for name in files: doc_file_list.append(os.path.join(root, name)) if title == '2008年行政处罚公布': for each_doc_file in doc_file_list: doc_title = re.split(r'[./]', each_doc_file)[-2] if not os.path.exists('./test/tmp/' + doc_title + '.docx'): shell_str = config['soffice']['soffice_path'] + ' --headless --convert-to docx ' + \ each_doc_file + ' --outdir ./test/tmp' process = subprocess.Popen(shell_str.replace( r'(', r'\(').replace(r')', r'\)'), shell=True, stdout=subprocess.PIPE) process.wait() with open('./test/tmp/' + doc_title + '.docx', 'rb') as docx_file: docx_content = docx_file.read() if db.parsed_data.find({ 'origin_url': announcement_url, 'oss_file_name': doc_title }).count() == 0: oss_file_map = { 'origin_url': announcement_url, 'oss_file_origin_url': rar_link, 'origin_url_id': each_circ_data['_id'], 'oss_file_type': 'docx', 'oss_file_name': doc_title, 'oss_file_content': docx_content, 'parsed': False } insert_response = db.parsed_data.insert_one( oss_file_map) file_id = insert_response.inserted_id oss_add_file(ali_bucket, str(file_id) + '/' + doc_title + '.docx', docx_content) db.circ_data.update_one({'_id': each_circ_data['_id']}, {'$set': { 'status': 'parsed' }}) else: db.circ_data.update_one({'_id': each_circ_data['_id']}, {'$set': { 'status': 'parsed' }}) file_id = db.parsed_data.find_one({ 'origin_url': announcement_url, 'oss_file_name': doc_title })['_id'] doc = docx.Document('./test/tmp/' + doc_title + '.docx') full_text = [] for para in doc.paragraphs: full_text.append(para.text) content_text = '\n'.join(full_text) document_code_compiler = re.compile( r'(陕保监罚\n?.*?\d+\n?\d+\n?.*?\n?\d+\n?号)') document_code = document_code_compiler.search( content_text).group(1).strip() real_title = '中国保监会陕西监管局行政处罚决定书(' + document_code + ')' litigant_compiler = re.compile( document_code.replace(r'[', r'\[').replace( r']', r'\]') + r'\n([\s\S]*?)\n' + r'(经查|经检查|依据.*?的有关规定|抽查|' r'经抽查|.*?存在以下(问题|违法行为)|' r'.*?认定事实|.*?存在.*?(行为|业务数据不真实)|' r'你公司于.*?期间|' r'经调查)') litigant = litigant_compiler.search(content_text).group( 1).strip() truth_text_str = r'((经查|一、|二、|三、|经检查|.*?存在以下(问题|违法行为)|.*?认定事实|.*?存在.*?(行为|业务数据不真实)|你公司于.*?期间)' \ r'([\s\S]*?))' \ r'(依\n?据)' truth_compiler = re.compile(truth_text_str) truth_list = truth_compiler.findall(content_text) if len(truth_list) > 0: truth = '\n'.join([kk[0].strip() for kk in truth_list]) else: truth_text_str = litigant + r'([\s\S]*?)' \ r'((,|,)?(综合)?(依据|鉴于|根据))' truth_compiler = re.compile(truth_text_str) truth = truth_compiler.search(content_text).group( 1).strip() if '申辩' in content_text: defense_text_str = r'((针对.*?行为.*?申辩意见|(当事人)?[^,。,;\n]*?(未)?提出(了)?陈述申辩(意见)?|' \ r'[^,。,;\n]*?向我局(报送|递交|提出)[^,。,;\n]*?|本案在审理过程中.*?提出陈述申辩|' \ r'[^,。,;\n]*?在(申辩材料|陈述申辩|陈述申辩意见|申辩意见|陈述材料|申辩书)中称|[^,。,;\n]*?在听证阶段提出|' \ r'[^,。,;\n]*?在法定期限内(未)?提出(了)?(听证要求|陈述申辩|陈述申辩及听证要求)|' \ r'在法定期限内,当事人未提出|[^,。,;\n]*?提出了?陈述、申辩|[^,。,;\n]*?提出以下陈述申辩意见|' \ r'[^,。,;\n]*?放弃陈述、申辩权利|[^,。,;\n]*?提出以下陈述(申辩理由|意见)|' \ r'[^,。,;\n]*?陈述申辩材料中辩称|[^,。,;\n]*?陈述材料中提出|[^,。,;\n]*?提出以下申辩意见|' \ r'[^,。,;\n]*?申辩中提出)' \ r'([\s\S]*?))' \ r'(因此,我局决定|' \ r'我局经复核(认为|决定)|' \ r'本案现已审理终结|' \ r'我局经复查[^,。,;\n]*?情况|' \ r'我局[^,。,;\n]*?认真复核|' \ r'经研究,对[^,。,;\n]*?予以采纳。|' \ r'我局认为.*?申辩理由|' \ r'依据.*?我局认为.*?的申辩理由|' \ r'经研究,我局认为.*?申辩意见|' \ r'经我局审核,决定|' \ r'我局认为,上述违法行为事实清楚、证据确凿、法律法规适当|' \ r'我局对陈述申辩意见进行了复核|' \ r'经我局审核|' \ r'针对[^,。,;\n]*?的(陈述)?申辩意见,我局进行了核实|' \ r'经查,我局认为|' \ r'依据现场检查及听证情况|' \ r'我局认为|我局经核查|对此,我局认为|我局经审理认为|我局在处罚幅度裁量时)' defense_compiler = re.compile(defense_text_str, re.MULTILINE) defense_list = defense_compiler.findall(content_text) if len(defense_list) != 0: defense = defense_list[-1][0].strip() defense_response_str = defense.replace(r'[', r'\[').replace(r']', r'\]') \ + r'(([\s\S]*?)' + r'(本案现已审理终结。|不符合.*?情形。|根据.*?依法可从轻或者减轻行政处罚。|' \ r'对[^,。,;\n]*?申辩意见(不予|予以)采纳|因此.*?申辩理由.*?成立。|' \ r'我局认为.*?申辩(理由|意见).*?符合.*?第.*?条.*?的条件.(予以采纳。)?|' \ r'不予采纳其陈述申辩理由。|维持原处罚决定。|不予采纳。|' \ r'不予采纳.*?(陈述)?申辩(意见|理由)?。|' \ r'我局认定你公司行为构成销售误导。|你公司的申辩不成立。))' defense_response_compiler = re.compile( defense_response_str, re.MULTILINE) if defense_response_compiler.search(content_text): defense_response = defense_response_compiler.search( content_text).group(1).strip() else: if '未' in defense: defense_response = '' else: defense_text_str = '([^。;\n]*?向.*?公告送达了《行政处罚事先告知书》.*?提出陈述申辩。|' \ '我局依法于2012年5月25日对你公司送达了《行政处罚事先告知书》,你公司在规定的时间内未提出陈述和申辩意见,也未要求举行听证。)' defense_compiler = re.compile( defense_text_str, re.MULTILINE) defense = defense_compiler.search( content_text).group(1).strip() defense_response = '' else: defense = defense_response = '' punishment_decision_text_str = r'(((依\n?据|根据)[^。;]*?第?[^。;]*?条\n?.*?(规定)?.?' \ r'(我局|我机关)?(决定|责令|给予|于.*?向.*?发出|对.*?作出|拟对你)|' \ r'(我局)?决定.*?(作出|给予)(如下|以下)(行政)?处罚:)' \ r'([\s\S]*?))' \ r'(请在本处罚决定书送达之日|当事人应当在接到本处罚决定书之日|如不服本处罚决定|' \ r'请(在)?接到本处罚决定书之日|如不服从本处罚决定|.*?如对本处罚决定不服|' \ r'请在接到本处罚决定书之日)' punishment_decision_compiler = re.compile( punishment_decision_text_str) punishment_decision_list = punishment_decision_compiler.findall( content_text) if len(punishment_decision_list) > 0: punishment_decision = '\n'.join( [kk[0].strip() for kk in punishment_decision_list]) punishment_basis_str_list = [ r'((上\n?述|以上|该)(事实|实施)?行为)?违反[^。;]*?第[^,。,;]*?条[\s\S]*?', ] punishment_basis_str = '|'.join(punishment_basis_str_list) punishment_basis_compiler = re.compile( r'[。\n;,]' + '(' + punishment_basis_str + ')' + '.(\n?依\n?据|\n?根据|\n?鉴于|\n?上述事实有现场检查确认书)', re.MULTILINE) punishment_basis_list = punishment_basis_compiler.findall( content_text) punishment_basis = ';'.join( [kk[0].strip() for kk in punishment_basis_list]) publish_date_text = re.search( punishment_decision.replace(r'(', r'\(').replace( r')', r'\)').replace(r'[', r'\[').replace( r']', r'\]').replace(r'*', r'\*') + r'([\s\S]*?)$', content_text).group(1).replace('\n', '') if re.search(r'.{4}年.{1,2}月.{1,3}日', publish_date_text): publish_date = re.findall( '.{4}年.{1,2}月.{1,3}日', publish_date_text)[-1].replace(' ', '') m = re.match( "([0-9零一二两三四五六七八九十〇○OOΟО]+年)?([0-9一二两三四五六七八九十]+)月?([0-9一二两三四五六七八九十]+)[号日]?", publish_date) real_publish_date = get_year(m.group(1)) + str( cn2dig(m.group(2))) + '月' + str(cn2dig( m.group(3))) + '日' else: publish_date_text = table_content.find_all( 'tr')[1].text publish_date = re.findall(r'\d{4}-\d{1,2}-\d{1,2}', publish_date_text)[-1] real_publish_date = publish_date.split( '-')[0] + '年' + str(int( publish_date.split('-')[1])) + '月' + str( int(publish_date.split('-')[2])) + '日' result_map = { 'announcementTitle': real_title, 'announcementOrg': '陕西保监局', 'announcementDate': real_publish_date, 'announcementCode': document_code, 'facts': truth, 'defenseOpinion': defense, 'defenseResponse': defense_response, 'litigant': litigant[:-1] if litigant[-1] == ':' else litigant, 'punishmentBasement': punishment_basis, 'punishmentDecision': punishment_decision, 'type': '行政处罚决定', 'oss_file_id': file_id, 'status': 'not checked' } logger.info(result_map) if db.announcement.find({ 'announcementTitle': real_title, 'oss_file_id': file_id }).count() == 0: db.announcement.insert_one(result_map) logger.info('陕西保监局 数据解析 ' + ' -- 数据导入完成') else: logger.info('陕西保监局 数据解析 ' + ' -- 数据已经存在') db.parsed_data.update_one({'_id': file_id}, {'$set': { 'parsed': True }}) logger.info('陕西保监局 数据解析 ' + ' -- 修改parsed完成') else: for each_doc_file in doc_file_list: doc_title = re.split('[./]', each_doc_file)[-2] if not os.path.exists('./test/tmp/' + doc_title + '.docx'): shell_str = config['soffice']['soffice_path'] + ' --headless --convert-to docx ' + \ each_doc_file.replace(' ', '" "') + ' --outdir ./test/tmp' process = subprocess.Popen(shell_str.replace( r'(', r'\(').replace(r')', r'\)'), shell=True, stdout=subprocess.PIPE) process.wait() with open('./test/tmp/' + doc_title + '.docx', 'rb') as docx_file: docx_content = docx_file.read() if db.parsed_data.find({ 'origin_url': announcement_url, 'oss_file_name': doc_title }).count() == 0: oss_file_map = { 'origin_url': announcement_url, 'oss_file_origin_url': rar_link, 'origin_url_id': each_circ_data['_id'], 'oss_file_type': 'docx', 'oss_file_name': doc_title, 'oss_file_content': docx_content, 'parsed': False } insert_response = db.parsed_data.insert_one( oss_file_map) file_id = insert_response.inserted_id oss_add_file(ali_bucket, str(file_id) + '/' + doc_title + '.docx', docx_content) db.circ_data.update_one({'_id': each_circ_data['_id']}, {'$set': { 'status': 'parsed' }}) else: db.circ_data.update_one({'_id': each_circ_data['_id']}, {'$set': { 'status': 'parsed' }}) file_id = db.parsed_data.find_one({ 'origin_url': announcement_url, 'oss_file_name': doc_title })['_id'] doc = docx.Document('./test/tmp/' + doc_title + '.docx') full_text = [] for para in doc.paragraphs: full_text.append(para.text) content_text = '\n'.join(full_text) document_code_compiler = re.compile( r'(陕银?保监罚\n?.*?\d+\n?\d+\n?.*?\n?\d+\n?.*?号)') document_code = document_code_compiler.search( content_text).group(1).strip() real_title = '中国银保监会陕西监管局行政处罚决定书(' + document_code + ')' litigant_compiler = re.compile( document_code.replace(r'[', r'\[').replace( r']', r'\]') + r'\n([\s\S]*?)\n' + r'(经查|依据.*?的有关规定|抽查|' r'经抽查|经检查|.*?存在以下(问题|违法行为)|' r'.*?认定事实|.*?存在.*?(行为|业务数据不真实)|' r'你公司于.*?期间|' r'经调查)') litigant = litigant_compiler.search(content_text).group( 1).strip() truth_text_str = r'((经查|一、|二、|三、|经检查|.*?存在以下(问题|违法行为)|.*?认定事实|.*?存在.*?(行为|业务数据不真实)|你公司于.*?期间)' \ r'([\s\S]*?))' \ r'(依据)' truth_compiler = re.compile(truth_text_str) truth_list = truth_compiler.findall(content_text) if len(truth_list) > 0: truth = '\n'.join([kk[0].strip() for kk in truth_list]) else: truth_text_str = litigant + r'([\s\S]*?)' \ r'((,|,)?(综合)?(依据|鉴于|根据))' truth_compiler = re.compile(truth_text_str) truth = truth_compiler.search(content_text).group( 1).strip() if '申辩' in content_text: defense_text_str = r'((针对.*?行为.*?申辩意见|(当事人)?[^,。,;\n]*?(未)?提出(了)?陈述申辩(意见)?|' \ r'[^,。,;\n]*?向我局(报送|递交|提出)[^,。,;\n]*?|本案在审理过程中.*?提出陈述申辩|' \ r'[^,。,;\n]*?在(申辩材料|陈述申辩|陈述申辩意见|申辩意见|陈述材料|申辩书)中称|[^,。,;\n]*?在听证阶段提出|' \ r'[^,。,;\n]*?在法定期限内(未)?提出(了)?(听证要求|陈述申辩|陈述申辩及听证要求)|' \ r'在法定期限内,当事人未提出|[^,。,;\n]*?提出了?陈述、申辩|[^,。,;\n]*?提出以下陈述申辩意见|' \ r'[^,。,;\n]*?放弃陈述、申辩权利|[^,。,;\n]*?提出以下陈述(申辩理由|意见)|' \ r'[^,。,;\n]*?陈述申辩材料中辩称|[^,。,;\n]*?陈述材料中提出|[^,。,;\n]*?提出以下申辩意见|' \ r'[^,。,;\n]*?申辩中提出)' \ r'([\s\S]*?))' \ r'(因此,我局决定|' \ r'我局经复核(认为|决定)|' \ r'本案现已审理终结|' \ r'我局经复查[^,。,;\n]*?情况|' \ r'我局[^,。,;\n]*?认真复核|' \ r'经研究,对[^,。,;\n]*?予以采纳。|' \ r'我局认为.*?申辩理由|' \ r'依据.*?我局认为.*?的申辩理由|' \ r'经研究,我局认为.*?申辩意见|' \ r'经我局审核,决定|' \ r'我局认为,上述违法行为事实清楚、证据确凿、法律法规适当|' \ r'我局对陈述申辩意见进行了复核|' \ r'经我局审核|' \ r'针对[^,。,;\n]*?的(陈述)?申辩意见,我局进行了核实|' \ r'经查,我局认为|' \ r'依据现场检查及听证情况|' \ r'我局认为|我局经核查|对此,我局认为|我局经审理认为|我局在处罚幅度裁量时)' defense_compiler = re.compile(defense_text_str, re.MULTILINE) defense_list = defense_compiler.findall(content_text) if len(defense_list) != 0: defense = defense_list[-1][0] defense_response_str = defense.replace(r'[', r'\[').replace(r']', r'\]') \ + r'(([\s\S]*?)' + r'(本案现已审理终结。|不符合.*?情形。|根据.*?依法可从轻或者减轻行政处罚。|' \ r'对[^,。,;\n]*?申辩意见(不予|予以)采纳|因此.*?申辩理由.*?成立。|' \ r'我局认为.*?申辩(理由|意见).*?符合.*?第.*?条.*?的条件.(予以采纳。)?|' \ r'不予采纳其陈述申辩理由。|维持原处罚决定。|不予采纳。|' \ r'不予采纳.*?(陈述)?申辩(意见|理由)?。|' \ r'我局认定你公司行为构成销售误导。|你公司的申辩不成立。))' defense_response_compiler = re.compile( defense_response_str, re.MULTILINE) if defense_response_compiler.search(content_text): defense_response = defense_response_compiler.search( content_text).group(1).strip() else: if '未' in defense: defense_response = '' else: defense_text_str = '([^。;\n]*?向.*?公告送达了《行政处罚事先告知书》.*?提出陈述申辩。|' \ '我局依法于2012年5月25日对你公司送达了《行政处罚事先告知书》,你公司在规定的时间内未提出陈述和申辩意见,也未要求举行听证。)' defense_compiler = re.compile( defense_text_str, re.MULTILINE) defense = defense_compiler.search( content_text).group(1).strip() defense_response = '' else: defense = defense_response = '' punishment_decision_text_str = r'(((依据|根据)[^。;]*?第?[^。;]*?条\n?.*?(规定)?.?(我局|我机关)?(决定|责令|给予|于.*?向.*?发出|对.*?作出|拟对)|' \ r'(我局)?决定.*?(作出|给予)(如下|以下)(行政)?处罚:)' \ r'([\s\S]*?))' \ r'(请在本处罚决定书送达之日|当事人应当在接到本处罚决定书之日|如不服本处罚决定|' \ r'请(在)?接到本处罚决定书之日|如不服从本处罚决定|.*?如对本处罚决定不服|' \ r'请在接到本处罚决定书之日)' punishment_decision_compiler = re.compile( punishment_decision_text_str) punishment_decision_list = punishment_decision_compiler.findall( content_text) if len(punishment_decision_list) > 0: punishment_decision = '\n'.join( [kk[0].strip() for kk in punishment_decision_list]) punishment_basis_str_list = [ r'((上述|以上|该)(事实|实施)?行为)?违反[^。;]*?第[^,。,;\n]*?条[\s\S]*?', ] punishment_basis_str = '|'.join(punishment_basis_str_list) punishment_basis_compiler = re.compile( '[。\n;,]' + '(' + punishment_basis_str + ')' + '.(\n?依据|\n?根据|\n?鉴于|\n?上述事实有现场检查确认书)', re.MULTILINE) punishment_basis_list = punishment_basis_compiler.findall( content_text) punishment_basis = ';'.join( [kk[0].strip() for kk in punishment_basis_list]) publish_date_text = re.search( punishment_decision.replace(r'(', r'\(').replace( r')', r'\)').replace(r'[', r'\[').replace( r']', r'\]').replace(r'*', r'\*') + r'([\s\S]*?)$', content_text).group(1).replace('\n', '') if re.search(r'.{4}年.{1,2}月.{1,3}日', publish_date_text): publish_date = re.findall( '.{4}年.{1,2}月.{1,3}日', publish_date_text)[-1].replace(' ', '') m = re.match( "([0-9零一二两三四五六七八九十〇○OOΟО]+年)?([0-9一二两三四五六七八九十]+)月?([0-9一二两三四五六七八九十]+)[号日]?", publish_date) real_publish_date = get_year(m.group(1)) + str( cn2dig(m.group(2))) + '月' + str(cn2dig( m.group(3))) + '日' else: publish_date_text = table_content.find_all( 'tr')[1].text publish_date = re.findall(r'\d{4}-\d{1,2}-\d{1,2}', publish_date_text)[-1] real_publish_date = publish_date.split( '-')[0] + '年' + str(int( publish_date.split('-')[1])) + '月' + str( int(publish_date.split('-')[2])) + '日' result_map = { 'announcementTitle': real_title, 'announcementOrg': '陕西银保监局', 'announcementDate': real_publish_date, 'announcementCode': document_code, 'facts': truth, 'defenseOpinion': defense, 'defenseResponse': defense_response, 'litigant': litigant[:-1] if litigant[-1] == ':' else litigant, 'punishmentBasement': punishment_basis, 'punishmentDecision': punishment_decision, 'type': '行政处罚决定', 'oss_file_id': file_id, 'status': 'not checked' } logger.info(result_map) if db.announcement.find({ 'announcementTitle': real_title, 'oss_file_id': file_id }).count() == 0: db.announcement.insert_one(result_map) logger.info('陕西保监局 数据解析 ' + ' -- 数据导入完成') else: logger.info('陕西保监局 数据解析 ' + ' -- 数据已经存在') db.parsed_data.update_one({'_id': file_id}, {'$set': { 'parsed': True }}) logger.info('陕西保监局 数据解析 ' + ' -- 修改parsed完成') logger.info('删除Tmp文件') os.remove('./test/tmp.rar') shutil.rmtree('./test/tmp', ignore_errors=True) else: if db.parsed_data.find({ 'origin_url': announcement_url, 'oss_file_origin_url': announcement_url }).count() == 0: oss_file_map = { 'origin_url': announcement_url, 'oss_file_origin_url': announcement_url, 'origin_url_id': each_circ_data['_id'], 'oss_file_type': 'html', 'oss_file_name': announcement_title, 'oss_file_content': r.text.encode(r.encoding).decode('utf-8'), 'parsed': False } insert_response = db.parsed_data.insert_one(oss_file_map) file_id = insert_response.inserted_id oss_add_file(ali_bucket, str(file_id) + '/' + announcement_title + '.html', r.text.encode(r.encoding).decode('utf-8')) db.circ_data.update_one({'_id': each_circ_data['_id']}, {'$set': { 'status': 'parsed' }}) else: db.circ_data.update_one({'_id': each_circ_data['_id']}, {'$set': { 'status': 'parsed' }}) file_id = db.parsed_data.find_one({ 'origin_url': announcement_url, 'oss_file_origin_url': announcement_url })['_id'] if '行政处罚信息主动公开事项' in announcement_title: result_map_list = [] table_value_list = table_to_list( table_content.find(class_='ke-zeroborder')) announcement_code = '' new_result_map = {} for index, each_origin_row in enumerate(table_value_list): each_row = [] [ each_row.append(i) for i in each_origin_row if i in each_origin_row ] if '文号' in each_row[0] or '行政处罚信息主动公开事项' in each_row[ 0] or '处罚决定书' in each_row[0]: continue if remove_strip(each_row[0]).strip() != announcement_code: if new_result_map != {}: punishment_basis_compiler = re.compile( r'(。|\n|;|^)' + r'(([^\n。;]*?)违反.*?第.*?条.*?规定)' + '.(\n?依据|\n?根据|\n?鉴于|\n?上述事实有现场检查确认书)', re.MULTILINE) punishment_basis_list = punishment_basis_compiler.findall( new_result_map['punishmentDecision']) punishment_basis = ';'.join([ kk[1].strip() for kk in punishment_basis_list ]) new_result_map[ 'punishmentBasement'] = punishment_basis logger.info(new_result_map) if db.announcement.find({ 'announcementTitle': new_result_map['announcementTitle'], 'oss_file_id': new_result_map['oss_file_id'] }).count() == 0: db.announcement.insert_one(new_result_map) logger.info('陕西保监局 数据解析 ' + ' -- 数据导入完成') else: logger.info('陕西保监局 数据解析 ' + ' -- 数据已经存在') result_map_list.append(new_result_map) announcement_code = remove_strip(each_row[0]).strip() this_punishment_decision = each_row[1].strip() + ':' + \ each_row[3].strip() + ' ' + each_row[4].strip() new_result_map = { 'announcementTitle': '陕西银保监局行政处罚信息主动公开事项(' + announcement_code + ')', 'announcementOrg': '陕西银保监局', 'announcementDate': format_date(each_row[-1].strip()), 'announcementCode': announcement_code, 'facts': each_row[1].strip() + ':' + each_row[2].strip(), 'defenseOpinion': '', 'defenseResponse': '', 'litigant': each_row[1].strip(), 'punishmentBasement': '', 'punishmentDecision': this_punishment_decision, 'type': '行政处罚决定', 'oss_file_id': file_id, 'status': 'not checked' } else: if each_row[1].strip( ) not in new_result_map['litigant']: new_result_map[ 'litigant'] += ',' + each_row[1].strip() new_result_map['facts'] += '\n' + each_row[1].strip( ) + ':' + each_row[2].strip() this_punishment_decision = each_row[1].strip() + ':' + \ each_row[3].strip() + ' ' + each_row[4].strip() new_result_map[ 'punishmentDecision'] += '\n' + this_punishment_decision if index == len(table_value_list) - 1: punishment_basis_compiler = re.compile( r'(。|\n|;|^)' + r'(([^\n。;]*?)违反.*?第.*?条.*?规定)' + '.(\n?依据|\n?根据|\n?鉴于|\n?上述事实有现场检查确认书)', re.MULTILINE) punishment_basis_list = punishment_basis_compiler.findall( new_result_map['punishmentDecision']) punishment_basis = ';'.join( [kk[1].strip() for kk in punishment_basis_list]) new_result_map['punishmentBasement'] = punishment_basis logger.info(new_result_map) if db.announcement.find({ 'announcementTitle': new_result_map['announcementTitle'], 'oss_file_id': new_result_map['oss_file_id'] }).count() == 0: db.announcement.insert_one(new_result_map) logger.info('陕西保监局 数据解析 ' + ' -- 数据导入完成') else: logger.info('陕西保监局 数据解析 ' + ' -- 数据已经存在') result_map_list.append(new_result_map) if len(result_map_list) > 0: db.parsed_data.update_one({'_id': file_id}, {'$set': { 'parsed': True }}) logger.info('陕西保监局 数据解析 ' + '一共有%d条数据' % len(result_map_list)) logger.info('陕西保监局 数据解析 ' + ' -- 修改parsed完成') else: logger.info('陕西保监局 数据解析 ' + ' -- 没有数据') # for index, each_row in enumerate(table_value_list): # if '信息主动公开事项' not in each_row[0] and '处罚决定文号' not in each_row[0]: else: document_code_compiler = re.compile( r'(陕银?保监罚.*?\d{4}.*?\d+号|陕银?保监罚\d{4}.\d+.号)') if document_code_compiler.search(content_text): document_code = document_code_compiler.search( content_text).group(1).strip() litigant_compiler = re.compile( document_code.replace(r'[', r'\[').replace( r']', r'\]') + r'\n([\s\S]*?)\n' + r'(经查|经检查|依据.*?的有关规定|抽查|' r'经抽查|.*?存在以下(问题|违法行为)|' r'.*?认定事实|.*?存在.*?(行为|业务数据不真实)|' r'你公司于2009年期间)') litigant = litigant_compiler.search(content_text).group( 1).strip() else: if document_code_compiler.search(title): document_code = document_code_compiler.search( title).group(1).strip() else: document_code = '' litigant_compiler = re.compile(r'^([\s\S]*?)\n' + r'(经查|依据.*?的有关规定|抽查|经抽查|' r'经检查|.*?存在以下(问题|违法行为)|' r'.*?认定事实)') litigant = litigant_compiler.search(content_text).group( 1).strip() truth_text_str = r'((经查|一、|二、|三、|经检查|.*?存在以下(问题|违法行为)|.*?认定事实|.*?存在.*?(行为|业务数据不真实)|你公司于2009年期间)' \ r'([\s\S]*?))' \ r'((我局认为,)?(上述|以上).*?(事实|行为|事实)(,|,)?.*?有.*?等证据(在案)?证明(,|,|。)(足以认定。)?|' \ r'(我局认为,|综上,)?(上述|以上).*?(行为|问题|事实).*?违反.*?第.*条.*?(的规定)?|' \ r'.*?作为.*?时任.*?对.*?负有直接责任|' \ r'依据.*?第.*?条的规定|' \ r'你作为.*?对.*?负有直接责任)' truth_compiler = re.compile(truth_text_str) truth_list = truth_compiler.findall(content_text) if len(truth_list) > 0: truth = '\n'.join([kk[0].strip() for kk in truth_list]) if '申辩' in content_text: defense_text_str = r'((针对.*?行为.*?申辩意见|(当事人)?[^,。,;\n]*?(未)?提出(了)?陈述申辩(意见)?|' \ r'[^,。,;\n]*?向我局(报送|递交|提出)[^,。,;\n]*?|本案在审理过程中.*?提出陈述申辩|' \ r'[^,。,;\n]*?在(申辩材料|陈述申辩|陈述申辩意见|申辩意见|陈述材料|申辩书)中称|[^,。,;\n]*?在听证阶段提出|' \ r'[^,。,;\n]*?在法定期限内(未)?提出(了)?(听证要求|陈述申辩|陈述申辩及听证要求)|' \ r'在法定期限内,当事人未提出|[^,。,;\n]*?提出了?陈述、申辩|[^,。,;\n]*?提出以下陈述申辩意见|' \ r'[^,。,;\n]*?放弃陈述、申辩权利|[^,。,;\n]*?提出以下陈述(申辩理由|意见)|' \ r'[^,。,;\n]*?陈述申辩材料中辩称|[^,。,;\n]*?陈述材料中提出|[^,。,;\n]*?提出以下申辩意见|' \ r'[^,。,;\n]*?申辩中提出)' \ r'([\s\S]*?))' \ r'(因此,我局决定|' \ r'我局经复核(认为|决定)|' \ r'本案现已审理终结|' \ r'我局经复查[^,。,;\n]*?情况|' \ r'我局[^,。,;\n]*?认真复核|' \ r'经研究,对[^,。,;\n]*?予以采纳。|' \ r'我局认为.*?申辩理由|' \ r'依据.*?我局认为.*?的申辩理由|' \ r'经研究,我局认为.*?申辩意见|' \ r'经我局审核,决定|' \ r'我局认为,上述违法行为事实清楚、证据确凿、法律法规适当|' \ r'我局对陈述申辩意见进行了复核|' \ r'经我局审核|' \ r'针对[^,。,;\n]*?的(陈述)?申辩意见,我局进行了核实|' \ r'经查,我局认为|' \ r'依据现场检查及听证情况|' \ r'我局认为|我局经核查|对此,我局认为|我局经审理认为|我局在处罚幅度裁量时)' defense_compiler = re.compile(defense_text_str, re.MULTILINE) defense_list = defense_compiler.findall(content_text) if len(defense_list) != 0: defense = defense_list[-1][0].strip() defense_response_str = defense.replace(r'[', r'\[').replace(r']', r'\]') \ + r'(([\s\S]*?)' + r'(本案现已审理终结。|不符合.*?情形。|根据.*?依法可从轻或者减轻行政处罚。|' \ r'对[^,。,;\n]*?申辩意见(不予|予以)采纳|因此.*?申辩理由.*?成立。|' \ r'我局认为.*?申辩(理由|意见).*?符合.*?第.*?条.*?的条件.(予以采纳。)?|' \ r'不予采纳其陈述申辩理由。|维持原处罚决定。|不予采纳。|' \ r'不予采纳.*?(陈述)?申辩(意见|理由)?。|' \ r'我局认定你公司行为构成销售误导。|你公司的申辩不成立。))' defense_response_compiler = re.compile( defense_response_str, re.MULTILINE) if defense_response_compiler.search(content_text): defense_response = defense_response_compiler.search( content_text).group(1).strip() else: if '未' in defense: defense_response = '' else: defense_text_str = '([^。;\n]*?向.*?公告送达了《行政处罚事先告知书》.*?提出陈述申辩。|' \ '我局依法于2012年5月25日对你公司送达了《行政处罚事先告知书》,你公司在规定的时间内未提出陈述和申辩意见,也未要求举行听证。)' defense_compiler = re.compile(defense_text_str, re.MULTILINE) defense = defense_compiler.search(content_text).group( 1).strip() defense_response = '' else: defense = defense_response = '' punishment_decision_text_str = r'(((依据|根据).*?第?.*?条.*?(规定)?.?(我局)?(决定|责令|给予|于.*?向.*?发出|对.*?作出|拟对你)|' \ r'(我局)?决定.*?作出(如下|以下)(行政)?处罚:)' \ r'([\s\S]*?))' \ r'(请在本处罚决定书送达之日|当事人应当在接到本处罚决定书之日|如不服本处罚决定|' \ r'请(在)?接到本处罚决定书之日|如不服从本处罚决定|.*?如对本处罚决定不服)' punishment_decision_compiler = re.compile( punishment_decision_text_str) punishment_decision_list = punishment_decision_compiler.findall( content_text) if len(punishment_decision_list) > 0: punishment_decision = '\n'.join( [kk[0].strip() for kk in punishment_decision_list]) punishment_basis_str_list = [ r'([^\n。;]*?)(问题|行为|事项|情况|事实)([^\n。;\s]*?)违反.*?\n?.*?第.*?条?\n?.*?((的|之|等)(相关)?规定)?', r'百倍保险代理有限公司聘任不具有任职资格的人员,违反了《保险法》第121条的规定', r'我局认为,直接业务虚挂中介业务套取费用,违反了《保险法》第116条第10款的规定', r'我局认为,在高管任职资格审核中提交伪造的毕业证书违反了《保险专业代理机构监管规定》第24条的规定', r'我局认为,未严格按照监管要求对人身保险新型产品投保人进行回访,违反了《人身保险新型产品信息披露办法》第10条的规定', r'我局认为,未取得保险兼业代理资格代理车险业务,违反了《保险法》第119条的规定', r'经查,中国人民财产保险股份有限公司西安市雁塔支公司于2006年3至4月和2007年2至4月期间,' r'存在违规使用费率优惠因子,向不具备代理资格的机构支付代理手续费,出具阴阳发票、保单,及提供虚假的报表、资料等,' r'违反了《保险法》第107条、第109条、第134条、第122条的相关规定。\n你作为雁塔支公司高级管理人员,对上述违法行为负有直接责任', r'经查,2014年,中国人民人寿保险股份有限公司陕西省分公司委托未取得合法保险销售资格的江西雅林环保科技有限公司上饶分公司销售航意险并向其支付服务费,' r'涉及保费104.47万元。上述行为违反了《保险法》(2009年修订,下同)第116条第8项的规定。\n程叶卿作为中国人民人寿保险股份有限公司陕西省分公司时任战略客户部经理,对上述行为负有直接责任' ] punishment_basis_str = '|'.join(punishment_basis_str_list) punishment_basis_compiler = re.compile( r'[。\n;]' + '(' + punishment_basis_str + ')' + '.(\n?依据|\n?根据|\n?鉴于|\n?上述事实有现场检查确认书)', re.MULTILINE) punishment_basis_list = punishment_basis_compiler.findall( content_text) punishment_basis = ';'.join( [kk[0].strip() for kk in punishment_basis_list]) publish_date_text = re.search(r'\n(.*?)$', content_text).group(1).replace( '\n', '') if re.search(r'.{4}年.{1,2}月.{1,3}日', publish_date_text): publish_date = re.findall('.{4}年.{1,2}月.{1,3}日', publish_date_text)[-1].replace( ' ', '') m = re.match( "([0-9零一二两三四五六七八九十〇○OOΟО]+年)?([0-9一二两三四五六七八九十]+)月?([0-9一二两三四五六七八九十]+)[号日]?", publish_date) real_publish_date = get_year(m.group(1)) + str( cn2dig(m.group(2))) + '月' + str(cn2dig( m.group(3))) + '日' else: publish_date_text = table_content.find_all('tr')[1].text publish_date = re.findall(r'\d{4}-\d{1,2}-\d{1,2}', publish_date_text)[-1] real_publish_date = publish_date.split('-')[0] + '年' + str( int(publish_date.split('-')[1])) + '月' + str( int(publish_date.split('-')[2])) + '日' result_map = { 'announcementTitle': title, 'announcementOrg': '陕西银保监局', 'announcementDate': real_publish_date, 'announcementCode': document_code, 'facts': truth, 'defenseOpinion': defense, 'defenseResponse': defense_response, 'litigant': litigant[:-1] if litigant[-1] == ':' else litigant, 'punishmentBasement': punishment_basis, 'punishmentDecision': punishment_decision, 'type': '行政处罚决定', 'oss_file_id': file_id, 'status': 'not checked' } logger.info(result_map) if db.announcement.find({ 'announcementTitle': title, 'oss_file_id': file_id }).count() == 0: db.announcement.insert_one(result_map) logger.info('陕西保监局 数据解析 ' + ' -- 数据导入完成') else: logger.info('陕西保监局 数据解析 ' + ' -- 数据已经存在') db.parsed_data.update_one({'_id': file_id}, {'$set': { 'parsed': True }}) logger.info('陕西保监局 数据解析 ' + ' -- 修改parsed完成')