#导入的xlsx,第一行留空,第二行开始第一列写企业名称即可 # 1、引入包 import importlib # 提供import语句 import openpyxl import sys import time # 提供延时功能 import xlrd # excel文件读取 import os # 系统操作库 用于打开chrome import xlwt # excel文件写入 from xlutils.copy import copy # excel文件复制 from selenium.webdriver.common.by import By # 用于获取网页中的相关元素、标签 from selenium import webdriver importlib.reload(sys) # 避免utf-8等编码问题的出现 import openpyxl as pl # 2、从excel获取查询企业单位 inc_list = [] path = r'C:\Users\lemonmemes\Desktop\企业名称和信用代码.xlsx' # 获取本地文件 wb = openpyxl.load_workbook(path) wb_sheet = wb['Sheet1'] # 获取到文件sheet1页签 maxrows = wb_sheet.max_row for i in range(maxrows - 1): name = wb_sheet.cell(i + 2, 1).value # 从第2行开始 inc_list.append(name) # 获取到的名称写到inc_list 存储 print(inc_list) inc_len = len(inc_list) # 获取总共读取到的列表元素个数 # 3、伪装成浏览器,防止被识破,并手动登录 options = webdriver.FirefoxOptions() options.set_preference("general.useragent.override", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36") driver = webdriver.Firefox(options=options) driver.get('https://www.qichacha.com/user_login') time.sleep(30) # 登录操作 # 4、开始爬虫 Credit_List = [] # 用来装社会信用代码的空列表 for i in range(inc_len): txt = inc_list[i] time.sleep(1) if (i == 0): # 如果是第一次 则直接向搜索框注入内容,不用清除搜索框中的内容。 # 向搜索框注入文字 driver.find_element(By.ID, 'searchKey').send_keys(txt) # 这里的ID可以用开发者界面在搜索框那找到 # 单击搜索按钮 time.sleep(3) srh_btn = driver.find_element(By.XPATH, '/html/body/div[1]/div[2]/section[1]/div/div/div/div[1]/div/div/span/button') # 定位按钮 driver.execute_script("arguments[0].click();", srh_btn) # srh_btn = driver.find_element(By.XPATH,'/html/body/div[1]/div[2]/section[1]/div/div/div/div[1]/div/div/span/button') #这里的XPATH直接复制过来替换掉就可以 # srh_btn.click() time.sleep(2) else: # 清楚搜索框内容 driver.find_element(By.ID, 'searchKey').clear() # 向搜索框注入下一个企业地址 driver.find_element(By.ID, 'searchKey').send_keys(txt) # 找到并点击搜索按钮 srh_btn = driver.find_element(By.XPATH, '/html/body/div[1]/div[1]/div/div[1]/div/div/div/div/span/button') srh_btn.click() try: # 直接找到装在社会信用代码的标签 credit_code = driver.find_element(By.XPATH, '/html/body/div[1]/div[2]/div[2]/div[3]/div/div[2]/div/table/tr[1]/td[3]/div/div[3]/div[1]/span[4]/span').text # 字符化,防止后续出现编码问题 credit_code = str(credit_code) print(txt + "社会码:", credit_code) # 每找到一条,则打印一条在终端上。 Credit_List.append(credit_code) # 添加到列表 except: credit_code = '没有找到统一社会码,可能是企业名称错误或者不全...' Credit_List.append(credit_code) # 没找到也要添加到列表里面去,实现与企业一一对应 print("没有找到统一社会码,可能是企业名称错误或者不全...") # print(Credit_List) #获取到所有的统一社会代码 # 网页按钮路径获取 # 5、读取到的数据存入excel中 wb = pl.load_workbook(path) # 打开工作簿 ws = wb.active # 读取第一张工作表 i = 0 while i < len(Credit_List): ws.cell(row=i + 2, column=2, value=Credit_List[ i]) # 将信用代码的列表中的每个数据写入到excel中,cell(row=2,column=2,values = 统一信用代码) row表示第2行,column表示第2列,填入统一信用代码. print(f'社会统一信用码:{Credit_List[i]}正在存入{ws.cell(i + 2, 1).value}中') # cell(1,1).value表示单元格A1的值 i = i + 1 wb.save(path) # 保存文件,这一步必须需要,否则文件没保存等于白搞。 print("导出完成!") # 可以自行编辑程序完成之后的输出内容。