天眼查数据抓取的难点在于解析网页,如果直接在网页端通过F12分析网页,发现一些信息还是比较难以获取的,那么比较简单的方式是,将响应的网页信息复制出来,再通过正则表达式,将匹配的信息拿出来就会相对来说比较精准。
image.pngimage.png
import requests
import re
import openpyxl
'''
作者:阿杰就是我
时间:2022-8-26
爬虫思路:从excel读取的企业信息拼接成完整的url,传入天眼查网页并获取响应,将响应的信息复制出来进行分析,
通过正则表达式将解析的数据重新传回excel,对异常信息通过try..exception跳过。
'''
header={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)\
Chrome/86.0.4240.198 Safari/537.36"}
# 工作表公司名读取
wb=openpyxl.load_workbook(r'C:\Users\Administrator\Desktop\企业数据抓取工具.xlsm',keep_vba=True)
sheet=wb["公司名"]
sheet2=wb["数据抓取"]
k=0
#先清空内容再写入防止之前的数据产生混乱
for row in sheet2.iter_rows():
for cell in row:
cell.value=None
#标题写入
sheet2.cell(1,1).value="搜索公司"
sheet2.cell(1,2).value="匹配公司"
sheet2.cell(1,3).value="法人"
sheet2.cell(1,4).value="成立日期"
sheet2.cell(1,5).value="注册资本"
sheet2.cell(1,6).value="工商注册号"
sheet2.cell(1,7).value="组织代码"
sheet2.cell(1,8).value="纳税人识别号"
sheet2.cell(1,9).value="地址"
sheet2.cell(1,10).value="电话"
sheet2.cell(1,11).value="经营范围"
#构造URL,传入网页获取相应信息后,用正则表达式读取信息
for i in range(2,sheet.max_row+1):
wd=sheet.cell(i,1).value
print(wd)
url="https://www.tianyancha.com/search?key="+wd
response=requests.get(url,headers=header).text
pat0=r'"companyList":.*?,"name":"\\u003cem\\u003e(.*?)\\u003c\/em\\u003e"'
pat1=r'"companyList":.*?,"name":"\\u003cem\\u003e.*?\\u003c\/em\\u003e".*?"legalPersonName":"(.*?)"'
pat2=r'"companyList":.*?,"name":"\\u003cem\\u003e.*?\\u003c\/em\\u003e".*?estiblishTime":"(.*?)"'
pat3=r'"companyList":.*?,"name":"\\u003cem\\u003e.*?\\u003c\/em\\u003e".*?"regCapital":"(.*?)"'
pat4=r'"companyList":.*?,"name":"\\u003cem\\u003e.*?\\u003c\/em\\u003e".*?"regNumber":"(.*?)"'
pat5=r'"companyList":.*?,"name":"\\u003cem\\u003e.*?\\u003c\/em\\u003e".*?"orgNumber":"(.*?)"'
pat6=r'"companyList":.*?,"name":"\\u003cem\\u003e.*?\\u003c\/em\\u003e".*?"creditCode":"(.*?)"'
pat7=r'"companyList":.*?,"name":"\\u003cem\\u003e.*?\\u003c\/em\\u003e".*?"businessScope":"(.*?)"'
pat8=r'"companyList":.*?,"name":"\\u003cem\\u003e.*?\\u003c\/em\\u003e".*?"regLocation":"(.*?)"'
pat9=r'"companyList":.*?,"name":"\\u003cem\\u003e.*?\\u003c\/em\\u003e".*?"phoneInfoList":\[\{"number":"(.*?)"'
pat10=r'"companyList":.*?,"name":"\\u003cem\\u003e.*?\\u003c\/em\\u003e".*?"emails":"(.*?)"'
gongsi=re.findall(pat0,response)#公司名称
faren=re.findall(pat1,response)#法人
chengliriqi =re.findall(pat2,response)#成立日期
zhuceziben=re.findall(pat3,response)#注册资本
gongshangzhuce=re.findall(pat4,response)#工商注册号
zuzhidaima=re.findall(pat5,response)#组织结构代码
nashuishibie=re.findall(pat6,response)#纳税人识别号
yewufanwei=re.findall(pat7,response)#经营范围
dizhi=re.findall(pat8,response)#地址
dianhua=re.findall(pat9,response)#电话号码
print(gongsi+dianhua)
#将读取的信息写入EXCEL中
for j in range(0,len(gongsi)):
k=k+1
print("正在写入数据")
try:
sheet2.cell(k + 1, 1).value = wd
sheet2.cell(k+1,2).value = gongsi[j]
sheet2.cell(k+1, 3).value = faren[j]
sheet2.cell(k+1, 4).value = chengliriqi[j]
sheet2.cell(k+1, 5).value = zhuceziben[j]
sheet2.cell(k+1, 6).value = gongshangzhuce[j]
sheet2.cell(k+1, 7).value = zuzhidaima[j]
sheet2.cell(k+1, 8).value = nashuishibie[j]
sheet2.cell(k+1, 11).value = yewufanwei[j]
sheet2.cell(k + 1, 10).value = dianhua[j]
sheet2.cell(k+1, 9).value = dizhi[j]
except Exception as e:
print(e)
wb.save(r"C:\Users\Administrator\Desktop\企业数据抓取工具.xlsm")
网友评论