天眼查企业查询爬虫

写一个天眼查的爬虫,大家有需要的可以直接拿来用,是基于selenium写的。所以使用之前得下载上这个插件。

在这里插入图片描述
爬的是上面的那个页面

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC, wait
from selenium.webdriver.common.by import By
from selenium.webdriver import ActionChains
import time
import random
import csv
import json
#打开网页
def openwangzhi():
    new='山西网才信息技术有限公司'
    driver = webdriver.Chrome()  # 代码在执行的时候回自行去寻找chromedriver.exe(在python目录下寻找),不再需要制定chromedriver.exe路径
    driver.get("https://www.tianyancha.com/search?key="+new)
    driver.maximize_window()
    time.sleep(5)
    #这里开始输入我们要的那个公司名称 从这里开始我们是做一个循环的
    path = "b.csv"
    with open(path, "r+", encoding='utf-8') as f:
        csv_read = csv.reader(f)
        a = []
        for line in csv_read:
            a.extend(list(line))
        print(type(a))
        f.close()
    companyList=['山西森甲能源科技有限公司']
    over=[]
    while len(companyList)>0:
        try:
            driver=xunhuanbianli(driver,companyList[0])
            over.append(companyList[0])
            companyList.pop(0)
            print('还有:'+str(len(companyList))+'家没有查到')

        except Exception as e:
            print(e)
            #这里应该写进入日志的
            companyList.append(companyList[0])
            companyList.pop(0)
            #print('当前公司的id为:'+str(comp_id)+'----'+companyList[comp_id]+'----公司的查询出错')
            print(companyList[0]+'----公司的查询出错')
def xunhuanbianli(driver,companyname):
    input=driver.find_element_by_xpath('//div[@class="live-search-wrap"]/input')
    input.clear()
    time.sleep(random.randint(1,5))
    input.send_keys(companyname)
    driver.find_element_by_xpath('//div[@class="input-group-btn btn -sm btn-primary"]').click()
    WebDriverWait(driver,30, 0.5).until(EC.presence_of_element_located((By.CLASS_NAME, "num-title")))
    num=driver.find_element_by_xpath('//span[@class="tips-num"]').text
    num=int(num)
    print('查到公司-'+companyname+'共:------'+str(num)+'------家')
    scroll_to_bottom(driver,5,4)
    if num>0:
        #说明可以查到这个公司,点击进入到这个公司的链接中
        div=driver.find_elements_by_xpath('//div[@class="result-list sv-search-container"]/div')
        time.sleep(random.randint(1,3))
        a_href=driver.find_elements_by_xpath('//a[@class="name select-none "]')[0].get_attribute('href')
        driver.get(a_href)
        driver.switch_to.window(driver.window_handles[-1])
        table=driver.find_element_by_xpath('//table[@class="table -striped-col -border-top-none -breakall"]')
        scroll_to_bottom(driver, 8, 7)
        title=driver.find_element_by_xpath('//div[@class="content"]/div[@class="header"]/h1[@class="name"]').text
        jiexitable(table,title)

        driver.switch_to.window(driver.window_handles[-1])
        time.sleep(random.randint(1,5))
        return driver
    else:
        print('这个---- '+companyname+'-----公司查不到相关信息')
#解析table
def jiexitable(tbody,title):
    rows=[]
    trs=tbody.find_elements_by_xpath('.//tr')
    row = []
    row_dic = {}
    for tr in trs:
        tds=tr.find_elements_by_xpath('.//td')
        for td in tds:
            row.append(jixitd(td))
        if (len(row))%2!=0 :
            row.append(title)

    for i in range(0,len(row),2):
        row_dic[row[i]]=row[i+1]
    rows.append(row_dic)
    print(row_dic)
    jsObj = json.dumps(row_dic)
    fileObject = open('a.json', 'a', encoding='utf-8')
    #fileObject.write(jsObj)
    json.dump(row_dic, fileObject, indent=4, ensure_ascii=False)
    fileObject.close()
    return row_dic
#解析td
def jixitd(td):
    strs=''
    try:
        strs=td.find_element_by_xpath('.//*').text
    except:
        strs=td.text
    return strs
#让页面滚动起来
def scroll_to_bottom(driver,after,hou):
    js = "return action=document.body.scrollHeight"
    # 初始化现在滚动条所在高度为0
    height = 0
    # 当前窗口总高度
    new_height = driver.execute_script(js)
    to_location=random.randint(int(new_height/after),int(new_height/hou))
    while height < new_height:
        # 将滚动条调整至页面底部
        for i in range(height, to_location, 100):
            driver.execute_script('window.scrollTo(0, {})'.format(i))
            time.sleep(0.5)
        height = new_height
        time.sleep(2)
        new_height = driver.execute_script(js)
if __name__ == '__main__':
    openwangzhi()
  • 4
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
### 回答1: 天眼查询是一家提供企业信息查询服务的网站,它提供了丰富的企业数据,包括公司的基本信息、法律诉讼情况、经营状况、财务数据等。如果想要获取天眼查询企业数据,可以使用Java编写一个网络爬虫。 首先,我们需要使用Java的网络爬虫库,例如Jsoup,来向天眼查询网站发送HTTP请求,并获取网页的内容。接着,通过解析HTML页面的结构,我们可以提取出需要的企业数据。 在实际操作中,我们可以通过制定一些规则来确定需要爬取哪些企业的数据,可以根据公司名称、行业分类、地理位置等条件进行筛选。然后,我们使用Java的正则表达式或XPath来提取需要的数据,并将其保存到本地的文件或数据库中。 为了保证爬取的效率和稳定性,我们可以使用多线程技术来同时爬取多个企业的数据。此外,还可以设置合理的请求间隔和错误处理机制,防止被网站封禁或者遇到异常情况时能够自动恢复。 总之,通过使用Java编写一个网络爬虫,我们可以方便地从天眼查询网站爬取企业数据。这样,我们可以快速地获取大量企业的信息,为企业研究、市场调研等工作提供有力支持。 ### 回答2: 通过天眼查询企业数据,可以使用Java进行数据爬取的操作。首先,需要使用Java的爬虫框架,例如Jsoup或者HttpClient等,来模拟浏览器发送HTTP请求,并获取网页的源代码。 接下来,我们可以通过分析天眼查询企业数据网页的源代码,找到我们所需的数据在网页中的位置和标签,例如公司名称、注册资本、法定代表人等等。使用Java的字符串处理函数或者正则表达式,可以将这些所需数据从网页源代码中提取出来。 然后,将提取出来的数据存储到Java的数据结构中,例如数组、集合或者自定义的实体对象。可以使用Java的数据持久化技术,例如文件存储、数据库存储等,将这些数据保存下来,以备后续使用。 在爬取时,可能会遇到反爬虫机制,例如验证码、限流等。针对这些情况,我们可以使用Java的图像处理库,例如JavaCV或者OpenCV等,来自动识别验证码,并绕过限流等机制。 除了基本的数据爬取外,还可以使用Java的多线程技术,例如线程池,实现更高效的爬取。可以将爬取任务分配给多个线程去执行,从而提高爬取速度。 总之,通过使用Java进行天眼查询企业数据的爬取操作,我们可以利用Java强大的网络请求、数据处理和多线程等特性,轻松地获取所需的企业数据,并进行后续分析和使用。 ### 回答3: 天眼查询是一个用于查询企业信息的网站,提供了大量的企业数据。要实现对天眼查询网站上的企业数据进行爬取,可以使用Java语言进行开发。 首先,我们需要使用Java的网络爬虫库,例如Jsoup,来进行网页的解析和数据的抓取。通过发送HTTP请求,获取天眼查询网站上的企业数据页面的HTML源码。 接下来,我们需要分析天眼查询网站上企业数据页面的HTML结构,找到所需数据的标签和属性。使用Jsoup等工具提供的选择器功能,可以通过CSS选择器或XPath语法,精确地定位所需数据的位置。 一旦定位到所需数据的位置,我们就可以使用Java代码提取和处理这些数据。通过解析HTML,获取企业的名称、法定代表人、注册资本、成立日期、公司地址等基本信息。 此外,天眼查询网站还提供了企业的股东信息、对外投资信息、主要人员信息等更详细的数据。我们可以根据需求,进一步处理这些数据,例如提取股东名称、持股比例等信息,并存储到数据库或导出为Excel等文件格式。 在处理数据时,我们还需要注意网站的访问频率和规范。爬取过程中,应该控制请求的频率,避免对网站造成过大的负担,并遵守相关的爬虫规范。 最后,可以根据爬虫的实际使用场景,进行数据的清洗、分析和可视化等后续处理工作,以满足具体的需求。 总之,通过使用Java语言编写爬虫程序,结合网络爬虫库和HTML解析工具,可以实现对天眼查询企业数据的爬取和处理。这样,我们可以方便地获取和利用大量的企业信息数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值