1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/Auditor777-PyCoAddr

В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
bazhuayu0.14b.py 13 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
审计7号 Отправлено 26.12.2018 09:12 295c947
#https://www.cnblogs.com/yoyoketang/p/6557421.html
import time
import xlrd
import xlwt
import requests
import os
from selenium import webdriver
#新建excel用于储存
workbook = xlwt.Workbook(encoding = 'ascii')
worksheet = workbook.add_sheet('爬取结果')
worksheet.write(0, 0, label = '原表提供的名称')
worksheet.write(0, 1, label = '爬取到的名称')
worksheet.write(0, 2, label = '爬取到的地址')
print("******************************************")
print("******************************************")
print("** **")
print("** 欢迎使用自动爬取工商信息软件 **")
print("** 本软件暂时只支持[FireFox浏览器] **")
print("** **")
print("******************************************")
print("******************************************")
print(" ")
print("如果发现BUG,请联系审计七部 陈超仪")
print("本软件仅可用于获取审计所需资料,切勿用于其他用途")
print("爬取信息来源网上,本软件制作者不对信息正确性负任何责任")
print(" ")
#==================选择模式==================
print("【0】-----教学模式-----:我从来没用过,请先给我介绍一下")
print("【1】-----精简模式-----:只爬取地址和基础信息,速度快且不易出错")
print("【2】----自定义模式----:提供部分可自定义的选项,速度稍慢")
print("【3】-----详细模式-----:小孩子才做选择,我全都要!")
str4 = input("请选择工作模式(输入数字0-3):")
print(" ")
while not (str4 == '1' or str4 == '2'or str4 == '3' or str4 == '0'):
print("【0】-----教学模式-----:我从来没用过,请先给我介绍一下")
print("【1】-----精简模式-----:只爬取地址和基础信息,速度快且不易出错")
print("【2】----自定义模式----:提供部分可自定义的选项,速度稍慢")
print("【3】-----详细模式-----:小孩子才做选择,我全都要!")
str4 = input("请选择工作模式(输入数字0-3):")
print(" ")
#==================教学==================
if str4 == '0':
print(" ")
print("此程序需要[FireFox浏览器]的支持才能使用,请前往官网进行下载:http://www.firefox.com.cn/")
print("下载后请自行完成安装")
str1 = input("安装完毕或已经安装[FireFox浏览器],请按回车继续...")
print(" ")
print("请将需要查询的客户名称填入根目录的name.xls工作簿的sheet1工作表中,从第一列第二行的单元格,依次往下填。")
str1 = input("填写完毕后,请保存并关闭name.xls,直接按回车继续...(找不到name.xls吗?---->请输入“get”后按回车获取:)")
if str1 == "get":
workbook2 = xlwt.Workbook(encoding = 'ascii')
worksheet2 = workbook2.add_sheet('sheet1')
worksheet2.write(0, 0, label = '客户名称')
workbook2.save('name.xls')
print(" ")
print("已经在程序根目录下创建名为name.xls的Excel文件")
print("请在表格第一列第二行开始填写需要查询的企业名称")
str1 = input("填写完成后请保存并关闭name.xls文件,然后按回车继续...")
print(" ")
while not (str4 == '1' or str4 == '2'or str4 == '3'):
print("【1】-----精简模式-----:只爬取地址和基础信息,速度快且不易出错")
print("【2】----自定义模式----:提供部分可自定义的选项,速度稍慢")
print("【3】-----详细模式-----:小孩子才做选择,我全都要!")
str4 = input("请选择工作模式(输入数字1-3):")
print(" ")
#打开企查查界面,要求登录
url = 'https://www.qichacha.com/user_login'
print(" ")
print("正在打开网页,请在下一个提示出现前,不要对浏览器进行任何操作")
print("(若弹出防火墙授权提示,请允许程序访问网络。)")
driver = webdriver.Firefox()
driver.get(url)
driver.maximize_window()
print(" ")
print("未注册用户有访问次数限制,请先登录企查查账户")
print("若只查询少量企业(如1-2个),可以不登录直接回车")
str1 = input("------------完成登陆后按回车继续------------")
#=====读取excel文件,将文件名存入数组=====
fileaddr = os.getcwd()
ExcelFile=xlrd.open_workbook(r'%s\name.xls'%(fileaddr))
fileaddr1 = fileaddr + "\\截图"
fileaddr2 = fileaddr + "\\快照"
if not os.path.exists(fileaddr1):
os.mkdir("截图")
if not os.path.exists(fileaddr2):
os.mkdir("快照")
sheet=ExcelFile.sheet_by_index(0)
nrows = sheet.nrows #获取行数
rowc = 1
names=[]
while rowc < nrows:
names.append(sheet.cell(rowc,0).value)
rowc = rowc +1
#==================模式1==================
if str4 == '1':
print(" ")
print("郑重提示:爬取结果信息来源于企查查,本软件制作者不对信息正确性负任何责任")
print("相关信息的及时性取决于企查查的更新频率,使用时请自行考虑信息的适用性。")
print(" ")
worksheet.write(0, 3, label = '爬取到的其他信息')
Ncount = 0
while Ncount < nrows - 1:
Ncount = Ncount + 1
url = 'https://www.qichacha.com/search?key=' + names[Ncount-1]
worksheet.write(Ncount, 0, label = names[Ncount-1])
driver.get(url)
print('%d/%d'%(Ncount, nrows - 1))
time.sleep(1)
name_found = driver.find_elements_by_class_name("ma_h1") # 找到客户名的框框
if name_found != []:
str1 = name_found[0].text
print(str1)
worksheet.write(Ncount, 1, label = str1)
text2 = driver.find_elements_by_class_name("m-t-xs") # 找到其他资料
str1 = text2[0].text
worksheet.write(Ncount, 3, label = str1)
print(str1)
str1 = text2[2].text
print(str1)
str1 = str1.replace("地址:","")
worksheet.write(Ncount, 2, label = str1)
else:
worksheet.write(Ncount, 1, label = "未能查询到此单位")
driver.close()
else:
#==================模式2==================
bol1 = 10
bol2 = "Y"
bol3 = "Y"
bol4 = 0.5
delay1 = 0.5
str2 = 0
if str4 == '2':
print(" ")
bol1 = input("是否收集详细信息(【N】只收集关键信息/【输入其他任何内容】详细信息):")
print(" ")
print("是否保存工商快照?(并不是所有的企业都有快照,企查查只保存了相对较大的企业的快照)")
bol2 = input("(【N】不是/【输入其他任何内容】是):")
print(" ")
bol3 = input("是否保存企查查网页截图(【N】不是/【输入其他任何内容】是):")
print(" ")
print("查询过快会被企查查拉黑,默认延迟500毫秒")
print("建议查询的企业数量越多,设置越长的延迟")
bol4 = input("请设置查询间隔(毫秒):")
print(" ")
for str3 in bol4:
str2 = not str3.isdigit() + str2
if str2 == 0:
delay1 = int(bol4)
else:
delay1 = 500
delay1 = delay1/1000
#==================模式3==================
print(" ")
print("若选择了[保存快照和截图]或者选择了[详细模式],请先清空根目录下[快照]和[截图]两个文件夹内的文件,以免与本次保存的结果混在一起。")
print("爬取结果会保存在根目录的“爬取结果.xls”中,若该文件有上次爬取的信息,请自行备份,否则会被覆盖遗失哟。")
print("在爬取过程中,请勿打开“爬取结果.xls”文件,否则程序会因无法写入信息而终止。")
str1 = input("完成上述操作后,按回车继续...")
print(" ")
print("郑重提示:爬取结果信息来源于企查查,本软件制作者不对信息正确性负任何责任")
print("相关信息的及时性取决于企查查的更新频率,使用时请自行考虑信息的适用性。")
print("现在开始爬取,请勿操作目标浏览器,静心等待爬取工作完成")
print(" ")
worksheet.write(0, 3, label = '法人')
worksheet.write(0, 4, label = '经营范围')
titlelist = ['注册资本','实缴资本','经营状态','成立日期','统一社会信用代码','纳税人识别号','注册号','组织机构代码','公司类型','所属行业','核准日期',
'登记机关','所属地区','英文名','曾用名','参保人数','人员规模','营业期限']
index1 = 5
if bol1 == "N":
titlelist = titlelist[0:6]
bol1 = 4
else:
bol1 = 10
#写入excel表头
for str3 in titlelist:
worksheet.write(0, index1, label = str3)
index1 = index1 + 1
Ncount = 0
#按excel表名开始工作
while Ncount < nrows - 1:
Ncount = Ncount + 1
url = 'https://www.qichacha.com/search?key=' + names[Ncount-1]
worksheet.write(Ncount, 0, label = names[Ncount-1])
time.sleep(delay1)
driver.get(url)
print('%d/%d'%(Ncount, nrows - 1))
name_found = driver.find_elements_by_class_name("ma_h1") # 找到客户名的框框
if name_found != []:
str1 = name_found[0].text
print(str1)
worksheet.write(Ncount, 1, label = str1)
url = name_found[0].get_attribute('href')
time.sleep(delay1)
driver.get(url)
str2 = driver.find_elements_by_class_name("ntable")
str3 = str2[0].text
if str2[0].text[0:4] != "注册资本":
url2 = url
url2 = url2.replace("firm","cbase")
url2 = url2.replace(".html","")
time.sleep(delay1)
driver.get(url2)
str2 = driver.find_elements_by_class_name("ntable")
str1 = str2[1].text
if str1 != '':
list1 = str1.split("\n")
if list1[0][0:4] == "注册资本":
str2 = list1[9].replace("企业地址:","")
str2 = str2.replace("查看地图","")
str2 = str2.replace("附近公司","")
str2 = str2.strip()
worksheet.write(Ncount, 2, label = str2) #企业地址
str2 = list1[10].replace("经营范围:","")
str2 = str2.strip()
worksheet.write(Ncount, 4, label = str2) #经营范围
for index1 in range(1,bol1):
str1 = list1[index1 - 1]
list2 = str1.split(" ")
str1 = list2[1]
num1 =index1 * 2 + 3
worksheet.write(Ncount, num1, label = str1) #注册资本 等
str1 = list2[3:]
num1 =index1 * 2 + 4
worksheet.write(Ncount, num1, label = str1) #实缴资本 等
else:
worksheet.write(Ncount, 2, label = "预设格式不符:%s"%(str1))
print('预设格式不符,未能正确填列表格信息。')
else:
worksheet.write(Ncount, 2, label = "未知错误,未能填列表格信息")
print('未知错误,未能填列表格信息。')
workbook.save('爬取结果.xls')
#=========保存截图========
if bol3 != "N":
driver.set_window_size(1400, 11300)
driver.get_screenshot_as_file("%s\\截图 %d.%s.png"%(fileaddr1,Ncount,names[Ncount-1]))
#=======下载公示快照=====
if bol2 != "N":
url = url.replace("firm","snapshoot")
time.sleep(delay1)
driver.get(url)
str2 = driver.find_elements_by_id("download-snapshoot")
if str2 != []:
url = str2[0].get_attribute('href')
time.sleep(delay1)
r = requests.get(url)
str1 = "%s\\快照 %d.%s.png"%(fileaddr2,Ncount,names[Ncount-1])
with open(str1, 'wb') as file1:
file1.write(r.content)
else:
print('未能获取工商信息快照,可能企查查未保存该单位快照。')
else:
worksheet.write(Ncount, 1, label = "未能查询到此单位")
print("未能查询到此单位")
driver.close()
#=========导出结果,退出==========
workbook.save('爬取结果.xls')
print('爬取完成!')
bol3 = input("按回车退出...")
driver.quit()
#driver.set_window_size(1400, 2800)
#driver.get_screenshot_as_file("C:\\Users\\BDO-20170830-8\\Desktop\\实验\\%d.%s.png"%(Ncount,str1))

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/Auditor777-PyCoAddr.git
git@api.gitlife.ru:oschina-mirror/Auditor777-PyCoAddr.git
oschina-mirror
Auditor777-PyCoAddr
Auditor777-PyCoAddr
master