做项目,从内容上可划分四大部分:数据、流程、组织、功能。按工作量排,数据与流程稳居前二。特别涉及到期初数据的整理,几W条垃圾数据,质量这么差,公司业务还能玩的转,深刻体会到了老员工的智慧——山不转水转,水不转人转。总有奇思妙想,通过野路子保证业务流不断。

若排序项目任务的枯燥程度,数据再次荣登第一梯度。好在大家都知道数据清理是个慢活,趁此摸鱼Python,也算是有个人价值的。整理供应商期初数据,缺少必需字段。网上找的脚本,如下

gihub-企业工商信息批量查询 https://github.com/nigo81/tools-for-auditor

方法是可行的,爬取企查猫。优点在于不用对身份进行二次认证,反爬监控弱。设置爬50条,sleep30秒。实际爬取了8000条数据,花了7小时。

部分代码重写了,如下。原码无法直接跑。

# -*- coding: utf-8 -*-
# Author: wwcheng
import csv
import logging
import logging.handlers
import os
import random
import time
from urllib import request
import numpy as np
import pandas as pd
import prettytable as pt
import requests
import xlwt
from fake_useragent import UserAgent
from lxml import etreeclass QiChaMao(object):def __init__(self):  self.start_time = time.time()self.timestr = str(int(time.time() * 1000))self.nowpath = os.path.abspath(os.curdir)self.search_key = ''self.company_url = ''self.company_id = ''self.company_name = ''self.basic_info = []self.cyxx_info = ''self.fzjg_info = ''self.share_info = ''self.dwtz_info = ''self.company_list = []self.base_headers = {'Host': 'www.qichamao.com','Connection': 'keep-alive','Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3','Accept-Encoding': 'gzip, deflate, br','Accept-Language': 'zh-CN,zh;q=0.9',}self.__logging()  def __cookies_load(self):'''内部函数:加载cookies,切换时间戳'''filepath = self.nowpath+r'\Input\cookies.txt'  cookies = (open(filepath, 'r').read()).strip()if len(cookies) < 50:self.logger.info('请先在cookies.txt中填写cookies信息')return Noneelse:cookies = cookies[0:-10]+str(int(time.time() * 1000)) #切片,最后十位用时间戳替换return cookiesdef __logging(self):'''内部函数;用于记录日志'''logging.basicConfig(filename=self.nowpath+r"\Output\error.log",filemode="w",format="%(asctime)s %(name)s:%(levelname)s:%(message)s",datefmt="%d-%M-%Y %H:%M:%S",level=logging.INFO)self.logger = logging.getLogger("15Scends")handler = logging.StreamHandler()handler.setLevel(logging.INFO)formatter = logging.Formatter("%(asctime)s %(name)s %(levelname)s %(message)s")handler.setFormatter(formatter)self.logger.addHandler(handler)def __get_html(self):'''内部函数:获取页面源码'''headers2 = {'Referer': self.search_url,'Cookie': self.__cookies_load(),'Upgrade-Insecure-Requests': '1','User-Agent': UserAgent().random, }headers2.update(self.base_headers)self.info_url = 'https://www.qichamao.com{}'.format(self.company_url)self.logger.info(self.info_url)r = requests.get(self.info_url, headers=headers2)text = r.textself.html = etree.HTML(text)def WelCome(self):'''打印程序描述 '''tb = pt.PrettyTable()tb.field_names = ['名称', '企业工商信息批量查询']tb.add_row(['作者', 'wwcheng'])tb.add_row(['微信公众号', '15Seconds'])tb.add_row(['GitHub项目地址', 'https://github.com/nigo81/tools-for-auditor'])tb.add_row(['数据来源', 'www.qichamao.com'])tb.add_row(['更新时间', '2019-10-25 13:44'])print(tb)def load_company(self):'''加载公司列表'''try:input_xls = self.nowpath+r'\Input\company_input.xlsx'd = pd.read_excel(input_xls)df_li = d.values.tolist()   #将矩阵转为列表,两个数据合为一个单元格self.company_list = [i[1] for i in df_li]  #获取公司名self.logger.info('部分数据预览如下:')self.logger.info(self.company_list[:3])if len(self.company_list) == 0:self.logger.info('company_input.xlsx中未加载到任何公司名称')else:self.logger.info('已成功加载{}个待查询公司名称'.format(len(self.company_list)))except:self.logger.info('加载公司列表失败!')self.logger.exception("正在记录发生的错误")def get_companyid(self):''''获取公司对应的链接'''search_key = request.quote(self.search_key) #转为 %XX 形式self.search_url = 'https://www.qichamao.com/search/all/{}?o=0&area=0&p=1'.format(search_key)headers1 = {'Cache-Control': 'max-age=0','Cookie': self.__cookies_load(),'Upgrade-Insecure-Requests': '1','User-Agent': UserAgent().random, }headers1.update(self.base_headers)r = requests.get(self.search_url, headers=headers1)text = r.texthtml = etree.HTML(text)print(html)self.company_url = html.xpath('//a[@class="listsec_tit"]/@href')[0]self.company_id = (self.company_url.split('/')[-1]).split('.')[0]def get_basic(self):'''获取公司基本信息'''self.__get_html()self.company_name = self.html.xpath('//div[@class="t"]/h1[@class="f-ib"]/text()')[0]if self.search_key == self.company_name:match = '一致'else:match = '名称不一致'info1 = ['无']*2info2 = ['无']*15try:info1 = self.html.xpath('//div[@class="f14 mt30"]/p/text()')[:2]info1=[(i.strip())for i in info1]if info1[0]!='无'and info1[0]!='':info1[0] = info1[0].split(':')[1]  #企业电话if len(info1)==1:info1=info1+['无']str1 = self.html.xpath('//div[@class="qd-table-body li-half f14"]/ul/li[1]/div/a/text()') #法定代表人存在为空if len(str1)==0:str1=['--']str2 = self.html.xpath('//div[@class="qd-table-body li-half f14"]/ul/li[2]/div/text()')str3 = self.html.xpath('//div[@class="qd-table-body li-half f14"]/ul/li[4]/div/text()')str4 = self.html.xpath('//div[@class="qd-table-body li-half f14"]/ul/li[5]/div/text()')str5 = self.html.xpath('//div[@class="qd-table-body li-half f14"]/ul/li[6]/div/text()')str6 = self.html.xpath('//div[@class="qd-table-body li-half f14"]/ul/li[7]/div/text()')str7 = self.html.xpath('//div[@class="qd-table-body li-half f14"]/ul/li[8]/div/text()')str8 = self.html.xpath('//div[@class="qd-table-body li-half f14"]/ul/li[9]/div/text()')str9 = self.html.xpath('//div[@class="qd-table-body li-half f14"]/ul/li[10]/div/text()')str10 = self.html.xpath('//div[@class="qd-table-body li-half f14"]/ul/li[11]/div/text()')str11 = self.html.xpath('//div[@class="qd-table-body li-half f14"]/ul/li[12]/div/text()')str12 = self.html.xpath('//div[@class="qd-table-body li-half f14"]/ul/li[13]/div/text()')str13 = self.html.xpath('//div[@class="qd-table-body li-half f14"]/ul/li[14]/div/text()')str14 = self.html.xpath('//div[@class="qd-table-body li-half f14"]/ul/li[15]/div/text()')str15 = self.html.xpath('//div[@class="qd-table-body li-half f14"]/ul/li[16]/div/text()')       info2=str1+str2+str3+str4+str5+str6+str7+str8+str9+str10+str11+str12+str13+str14+str15info2 = [(i.replace('\n', '')).replace('--', '无') for i in info2]except:self.logger.exception("正在记录发生的错误")self.basic_info = [self.search_key,self.company_name, match]+info1+info2def get_cyxx(self):'''获取成员信息'''url = 'https://www.qichamao.com/orgcompany/SearchItemCYXX'headers3 = {'Accept': '*/*','Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8','Content-Length': '53','Origin': 'https://www.qichamao.com','Referer': self.info_url,'X-Requested-With': 'XMLHttpRequest','Cookie': self.__cookies_load(),'User-Agent': UserAgent().random,}headers3.update(self.base_headers)try:hdoc_area = self.html.xpath('//input[@id="hdoc_area"]/@value')  #input valuedata = {'orgCode': self.company_id,'oc_area': hdoc_area,}r = requests.post(url, headers=headers3, data=data) #返回传输状态cyxx = r.json()  #json格式dataList = cyxx['dataList']   #取datalist键值data = [dataList[i]['om_name']+'|'+dataList[i]['om_position']  #逐级取键值for i in range(len(dataList))]self.cyxx_info = ('+').join(data) #序列元素连接成字符串if len(self.cyxx_info) == 0:self.cyxx_info = '无'except:self.logger.exception("正在记录发生的错误")def get_fzjg(self):'''获取分支机构信息'''try:names = self.html.xpath('//div[@id="M_fzjg"]/div[@class="qd-content mt20 list"]/p/text()')self.fzjg_info = ('+').join(names)if len(self.fzjg_info) == 0:self.fzjg_info = '无'except:self.logger.exception("正在记录发生的错误")def get_share(self):'''获取股东信息'''try:names = self.html.xpath('//div[@class="qd-table-body2 f14 f-tac f-cb"]/div[@class="data-list"]/ul/li[2]/span/a/text()')# names = self.html.xpath(#   '//div[@class="qd-table-body2 f14 f-tac f-cb"]/ul[@class="head"]/li[1]/span/text()')gdlxs = self.html.xpath('//div[@class="qd-table-body2 f14 f-tac f-cb"]/div[@class="data-list"]//ul/li[3]/span[@class="info"]/text()')cgbls = self.html.xpath('//div[@class="qd-table-body2 f14 f-tac f-cb"]/div[@class="data-list"]/ul/li[4]/span[@class="info"]/text()')if len(names)!=0:shareinfo = [names[i]+'|'+gdlxs[i]+'|'+cgbls[i]for i in range(len(names))]self.share_info = ('+').join(shareinfo)else:self.share_info = '无'except:self.share_info = '无'self.logger.exception("正在记录发生的错误")def get_dwtz(self):'''获取对外投资信息'''try:names = self.html.xpath('//div[@class="qd-table-body2 qd-table-body4 f14 f-tac f-cb"]/div[@class="data-list"]//ul/li[2]/span[@class="info"]/a/text()')farens = self.html.xpath('//div[@class="qd-table-body2 qd-table-body4 f14 f-tac f-cb"]/div[@class="data-list"]//ul/li[3]/span[@class="info"]/a/text()')zczbs = self.html.xpath('//div[@class="qd-table-body2 qd-table-body4 f14 f-tac f-cb"]/div[@class="data-list"]//ul/li[4]/span[@class="info"]/text()')czbls = self.html.xpath('//div[@class="qd-table-body2 qd-table-body4 f14 f-tac f-cb"]/div[@class="data-list"]//ul/li[5]/span[@class="info"]/text()')czbls = [(czbl.replace('\n', '')).strip() for czbl in czbls]dwtzinfo = [names[i]+'|'+farens[i]+'|'+zczbs[i]+'|'+czbls[i]for i in range(len(names))]self.dwtz_info = ('+').join(dwtzinfo)if len(self.dwtz_info) == 0:self.dwtz_info = '无'except:self.dwtz_info = '无'self.logger.exception("正在记录发生的错误")def Output_csv(self, content=''):'''输出文件'''self.output_path = self.nowpath + \r'\Output\company_output_{}.csv'.format(self.timestr)with open(self.output_path, 'a', newline='', encoding='utf-8-sig')as f:writer = csv.writer(f)writer.writerow(content)def csv_to_xlsx(self):'''转换为xlsx'''csv = pd.read_csv(self.output_path, encoding='utf-8-sig')csv.to_excel(self.output_path.replace('.csv', '.xlsx'), sheet_name='data')def single_query(self, search_key):'''单次查询'''try:self.search_key = search_keyself.get_companyid()self.get_basic()self.get_cyxx()self.get_fzjg()self.get_share()self.get_dwtz()result = self.basic_info + \[self.cyxx_info, self.fzjg_info,self.share_info, self.dwtz_info,self.info_url]self.Output_csv(result)sleep_time = round(random.uniform(0.2, 0.6), 2)time.sleep(sleep_time)except Exception:self.logger.info('获取{}的信息时出错'.format(self.search_key))self.logger.exception("正在记录发生的错误")def main(self):'''主体循环'''self.WelCome()self.load_company()title = ['公司名称', '搜索结果', '名称是否一致', '企业电话', '企业邮箱', '法定代表人:','纳税人识别号:', '机构代码:', '注册号:', '注册资本:', '统一社会信用代码:','登记机关:', '经营状态:', '成立日期:', '企业类型:', '经营期限:', '所属地区:','核准日期:', '企业地址:', '经营范围:','成员信息', '分支机构', '股东信息', '对外投资','链接']self.Output_csv(title)for i in range(len(self.company_list)):search_key = self.company_list[i]self.logger.info('当前进度:{}/{} {}'.format(i+1,len(self.company_list), search_key))self.single_query(search_key)if i+1 != 1 and (i+1) % 50 == 0:self.csv_to_xlsx()self.logger.info('为减小网站压力,每获取50个信息,休息30秒再继续')time.sleep(30)else:passself.csv_to_xlsx()stamp = time.time() - self.start_timeself.logger.info('查询总用时:'+str(stamp))def run(self):if self.__cookies_load():self.main()time.sleep(4)if __name__ == "__main__":QiChaMao = QiChaMao()QiChaMao.run()

Python爬虫实践2,企业工商信息查询相关推荐

  1. 企业工商信息查询第三方软件/API查询原理分析

    一.企业工商信息查询API的使用场景 1.银行及金融机构对企业进行信贷评估 2.媒体财经信息平台,提升金融财经信息平台的业务能力及时效性 3.政府机构,约束社会失信企业,构建社会信用体系 4.一般企业 ...

  2. 企业工商信息查询API开发文档

    服务主要功能描述 企业工商信息查询增强版服务(翔云),实时联网权威数据源,通过企业(个体)名称.企业信用代码查询工商信息,当天注册信息,次日可查.返回的字段包含企业及个体营业执照照面信息.经营状态.曾 ...

  3. 企业工商信息查询标准版API开发文档

    服务主要功能描述 企业工商信息查询标准版服务,实时联网权威数据源,通过企业(个体)名称查询企业(个体)信息,当天注册信息,次日可查.返回的字段包含企业及个体营业执照照面信息.经营状态等,数据覆盖全国. ...

  4. 企业工商信息查询接口

    一.接口介绍 模糊搜索.精确搜索企业信息,通过企业名字或者id查询企业工商基本信息. 二.接入点功能 企业搜索 可以使用:公司名称.人名.产品名称.老板名称.高管名称.联系方式.工商注册号.组织机构代 ...

  5. 企业信息怎么查询?企业工商信息查询技巧

    我们在找企业信息的时候,总是会遇到一些问题,总是找不到完整的企业信息,或是筛选不出自己要找的信息.花了大量的时间去找信息,结果还是不尽人意.企业信息查询有什么有效的方法吗?接下来小编教大家几个简单高效 ...

  6. 企业工商信息批量查询和自动验证如何实现

    日常商业活动中,企业工商信息验证的应用场景非常广泛,尤其ToB行业,或多或少都要对企业的资质进行查询或者核验,并将其与自身业务相结合,那么如何快速精准的进行企业工商验证? 最简单直接的办法当然是在国家 ...

  7. 接入百度智能云的营业执照识别接口、工商信息查询(基础版)接口到实际业务,参考代码

    我的代码放在公共模块如下: 1.根据百度云官方文档-SDK中心,下载sdk对应jar包,我下载下来的版本是bce-java-sdk.0.10.254 2.使用mvn命令手动引入jar mvn inst ...

  8. python爬虫实践——零基础快速入门(四)爬取小猪租房信息

    上篇文章我们讲到python爬虫实践--零基础快速入门(三)爬取豆瓣电影 接下来我们爬取小猪短租租房信息.进入主页后选择深圳地区的位置.地址如下: http://sz.xiaozhu.com/ 一,标 ...

  9. 网络爬虫记录《企业工商注册信息》第一篇目标抓取平台

    为什么80%的码农都做不了架构师?>>>    网络爬虫记录<企业工商注册信息> 国家企业信用信息公示系统(http://www.gsxt.gov.cn)是企业信息公示系 ...

最新文章

  1. getValue()方法 java_java.util.zip.CRC32.getValue()方法示例
  2. 使Safari在Windows Vista上每20秒停止崩溃
  3. CentOS 6.0 xdmcp 配置
  4. 【转载】Docker镜像打包示例
  5. 指尖下的js —— 多触式web前端开发之三:处理复杂手势
  6. vscode写c++好吗_寒假实习简历你会写吗?四个问题帮你写好寒假实习简历
  7. 计算机考试长文档编辑,职称计算机考试:Powerpoint2003长文档1
  8. 使用开票组件快速开具清单发票
  9. 扫描之王——NAMP
  10. 《CSS Secrets》读书笔记(2)
  11. 计算机excel奖学金公式,如何用Excel评定奖学金
  12. 河南公务员写古文辞职信:陡增酒量 武功尽废
  13. An unexpected error prevented the server from fulfilling your request. (HTTP 500)
  14. 清明不远游 国内赏春地推荐
  15. 算法练习-个人所得税
  16. WMS仓储管理系统定制
  17. UE4 如何开启 EQS
  18. wireshark分析实战
  19. HTML 文本域textarea
  20. 计算机应用技术怎样为祖国做出贡献,计算机应用技术

热门文章

  1. 《Graph neural networks A review of methods and applications》翻译
  2. 台式计算机找不到无线连接,我的win7台式机找不到无线网卡解决方法介绍
  3. python中星号怎么打出来_Python中的星号:用途及使用方法
  4. #874358#基于django/neo4j的电视剧浏览数据推荐系统
  5. MySQL in、exists是否走索引
  6. NSPredicate 模糊、精确、查询
  7. PLATO IDO即将启动,元宇宙盈利效应明显
  8. python web微信应用(三) 微信智能聊天机器人
  9. remapkey不能打开注册表_到底要不要清理注册表?
  10. outguess 使用方法