企查查python爬虫实例

前些日子尝试给朋友写了一个查询大批公司的统一社会信用码的爬虫程序,借助了很多网上的帖子,学习很多,现在也分享一下我用的python程序。

  1. 准备python库文件(python 3.7)

    import importlib #提供import语句
    import sys
    import time #提供延时功能
    import xlrd #excel文件读取
    import os
    import xlwt #excel文件写入
    from xlutils.copy import copy #excel文件复制
    from selenium import webdriver #浏览器操作库
    importlib.reload(sys)
    
  2. 首先伪装成浏览器访问企查查网页,然后要手动登录一次,如果不登录不能查询企业的所有信息,而且限制查询次数。一开始尝试利用程序自动完成账号密码登录,可是登录界面的进度条始终出错,后来利用第三方QQ登录便解决了这一步,也只需要点击两次,最好把QQ在电脑上登录好,会自动检测登录的QQ账户,点击两次就行了。这样就不用手机扫码了。另外登录后会有个提示绑定微信的弹出框,关掉就好。

    这部分代码:

    #伪装成浏览器,防止被识破
    option = webdriver.ChromeOptions()
    option.add_argument('--user-agent="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.Chrome(options=option)
    #打开登录页面
    driver.get('https://www.qichacha.com/user_login')
    time.sleep(20)#等待20s,完成手动登录操作
    #手动登录操作
  3. 接下来我们会读取excel里面需要查询的公司列表,然后存入一个list里面,方便后面循环检索。

    #从excel获取查询检索公司数据
    worksheet = xlrd.open_workbook(u'test.xls')#excel放在同一个工作空间下
    sheet1 = worksheet.sheet_by_name("CD类未拓展客户清单")#excel有多个sheet,检索该名字的sheet表格
    rows = sheet1.nrows # 获取行数
    inc_list = []
    for i in range(1,rows) :data = sheet1.cell_value(i, 1) # 取第2列公司数据inc_list.append(data)
    print(inc_list) #打印出来可检查获取的数据对不对
    inc_len = len(inc_list)
    
  4. 然后就开始检索公司,这里有两个思路,1)将inc_list 里面的公司全部检索出来存在另一个data_list里面,最后在写回excel文件里;2)每检索一个公司就存回excel文件里并保存文件,然后再检索下一个再保存。显然第一个从程序上看效率更高,不用重复写入保存。但是在查询大量公司的情况下,一旦出现问题,之前查询的结果就没了,又得解决问题重新开始,这样效率反而会更低。所以我采用了第二种办法,虽然效率低点,但是我要查询几千个公司的数据,万一中途出现问题,不用从头开始。

    #写回数据
    writesheet1 = copy(worksheet)# 这里复制了一个excel,没有直接写回最初的文件。
    writesheet2 = writesheet1.get_sheet(1)#同样获得第一个sheet
    style = xlwt.easyxf('font:height 240, color-index red, bold on;align: wrap on, vert centre, horiz center');
    #开启爬虫
    for i in range(inc_len):txt = inc_list[i] #循环获取list里面的公司名称time.sleep(1) #等待加载……
    
  5. 程序模仿浏览器进行检索公司中,会先搜索该公司,然后会检索到很多相关的企业,一般检索出来的相关列表第一个就是需要的公司,这里需要程序模拟人工的点击。

    该部分代码:

      if (i==0):#向搜索框注入文字driver.find_element_by_id('searchkey').send_keys(txt)#单击搜索按钮srh_btn = driver.find_element_by_xpath('//*[@id="indexSearchForm"]/div/span/input')srh_btn.click()else:#清楚搜索框内容driver.find_element_by_id('headerKey').clear()# 向搜索框注入下一个公司地址driver.find_element_by_id('headerKey').send_keys(txt)#搜索按钮srh_btn=driver.find_element_by_xpath('/html/body/header/div/form/div/div/span/button')srh_btn.click()
    

    这里利用了Xpath路径获取页面数据或者按钮的位置,在我们所要查询的数据或者按钮方框那里右击-检查就会进入网页的html界面,并会直接标出我们查询的位置对应的html代码,然后在代码处右击-copy-xpath,就可将该位置的路径复制到剪贴板上,后面获取数据也是利用这个办法。

  6. 接着进入了公司信息界面,找到我们需要的数据,同样利用上面的方法便可以获取数据对应的xpath路径,然后用指令获取这路径上的数据就可以了。

    可实际操作我利用基本信息里面的统一社会信用码的xpath路径总是获取的数据为空,从网上了解应该是这个地方利用了ajax的技术将数据存放在另一个url地址,可以在network里面找到该地址,无奈我没有找到这个url地址,但是我发现从上图标出的企业发展里面可以从统一社会信用码对应的xpath路径获取数据,便就在程序中多操作一步进入到企业发展界面里面,这里面的年报数据里面包含了信用码。不好的地方就是有的公司没有最近年份的年报数据,便也检索不到相关信息了,就必须要检测其余年份的年报数据,就还需要增加几个判断语句。我这里就直接检索最近年份的数据,如果检索不到就置none

    该部分代码:

      try:# 获取网页地址,进入inner=driver.find_element_by_xpath('//*[@id="search-result"]/tr[1]/td[3]/a').get_attribute("href")driver.get(inner)time.sleep(2)# 弹出框按钮try:try:srh_btn= driver.find_element_by_xpath('//*[@id="firstepdadModal"]/div/div/div[2]/button')srh_btn.click()except:srh_btn= driver.find_element_by_xpath('//*[@id="firstcaseModal"]/div/div/div[2]/button')srh_btn.click()except:passtry:# 转到企业发展tag = driver.find_element_by_xpath('//*[@id="report_title"]')tag.click()time.sleep(2)#获取首个企业信用码try:credit_code= driver.find_element_by_xpath('//*[@id="0"]/table[1]/tbody/tr[1]/td[4]').textexcept:credit_code='none'except:credit_code = 'none'except:credit_code = 'none'
    

    这里添加了很多try,excep 判断语句,主要是为了排除可能出现的错误以及自动关闭弹出框,让程序可是正常运行下去。流程图如下:

  7. 将获取的数据存入excel对应的位置,并保存,开始下一次检索。

       print(credit_code)writesheet2.write(i+1, 15, credit_code)  # 将数据写入第16列writesheet1.save(u'test2.xls')
    driver.close() #关闭浏览器
    

    至此,这个简易的爬虫程序就写完了。总的来说,这种爬虫程序采用的selenium库对于我这样的新手来说比较友好,就是总的效率不是很高,而且访问频率高了,也会被企查查给识别到,不过过一会再运行一下就行了,而且也不用从头来,之前的数据也都保存了。实测第一次检测了1516个公司没有被中止,紧接著第二次检测的时候在900多次的时候被中止。网上也有很多利用Beautiful Soup,requests等库来做的,有机会也要再去尝试学习。另外说明的就是搜索的公司名称最好要完整,不要带地址啥的,这样可以提高检索到的概率,当然也有很多个体经营户是没有许多信息的,自然是检索不到。

    谢谢浏览!也欢迎转载!最后附上完整代码:

    import importlib #提供import语句
    import sys
    import time #提供延时功能
    import xlrd #excel文件读取
    import os
    import xlwt #excel文件写入from xlutils.copy import copy #excel文件复制
    from selenium import webdriver #浏览器操作库importlib.reload(sys)#伪装成浏览器,防止被识破
    option = webdriver.ChromeOptions()
    option.add_argument('--user-agent="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.Chrome(options=option)#打开登录页面
    driver.get('https://www.qichacha.com/user_login')
    time.sleep(20)#等待20s,完成手动登录操作
    # 手动登录操作#从excel获取查询单位
    worksheet = xlrd.open_workbook(u'test.xls')
    sheet1 = worksheet.sheet_by_name("CD类未拓展客户清单")#excel有多个sheet,检索该名字的sheet表格
    rows = sheet1.nrows # 获取行数
    inc_list = []
    for i in range(1,rows) :data = sheet1.cell_value(i, 1) # 取第2列数据inc_list.append(data)
    print(inc_list)
    inc_len = len(inc_list)#写回数据
    writesheet1 = copy(worksheet)# 这里复制了一个excel,没有直接写回最初的文件。
    writesheet2 = writesheet1.get_sheet(1)#同样获得第一个sheet
    style = xlwt.easyxf('font:height 240, color-index red, bold on;align: wrap on, vert centre, horiz center');#开启爬虫
    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)#单击搜索按钮srh_btn = driver.find_element_by_xpath('//*[@id="indexSearchForm"]/div/span/input')srh_btn.click()else:#清楚搜索框内容driver.find_element_by_id('headerKey').clear()# 向搜索框注入下一个公司地址driver.find_element_by_id('headerKey').send_keys(txt)#搜索按钮srh_btn = driver.find_element_by_xpath('/html/body/header/div/form/div/div/span/button')srh_btn.click()try:# 获取网页地址,进入inner = driver.find_element_by_xpath('//*[@id="search-result"]/tr[1]/td[3]/a').get_attribute("href")driver.get(inner)time.sleep(2)# 弹出框按钮try:try:srh_btn = driver.find_element_by_xpath('//*[@id="firstepdadModal"]/div/div/div[2]/button')srh_btn.click()except:srh_btn = driver.find_element_by_xpath('//*[@id="firstcaseModal"]/div/div/div[2]/button')srh_btn.click()except:passtry:# 转到企业发展tag = driver.find_element_by_xpath('//*[@id="report_title"]')tag.click()time.sleep(2)#获取首个企业信用码try:credit_code = driver.find_element_by_xpath('//*[@id="0"]/table[1]/tbody/tr[1]/td[4]').textexcept:credit_code='none'except:credit_code = 'none'except:credit_code = 'none'print(credit_code)writesheet2.write(i+1, 15, credit_code)  # 第16列数据sheet1.write(i, j, data[j])writesheet1.save(u'test2.xls')driver.close()
    

企查查python爬虫实例相关推荐

  1. python爬虫实例-记录一次简单的Python爬虫实例

    本次的这篇文章主要是和大家分享了一篇关于记录一次简单的Python爬虫实例 ,有需要的小伙伴可以看一下. 主要流程分为: 爬取.整理.存储 1.其中用到几个包,包括 requests 用于向网站发送请 ...

  2. Python爬虫实例--新浪热搜榜[xpath语法]

    Python爬虫实例--新浪热搜榜[xpath语法] 1.基础环境配置: requests-->版本:2.12.4 lxml-->版本:3.7.2 2.网页分析 很容易从html源码中看到 ...

  3. Python爬虫实例--新浪热搜榜[正则表达式]

    Python爬虫实例--新浪热搜榜[正则表达式] 1.基础环境配置: requests-->版本:2.12.4 re-->:Python自带,无需安装 2.网页分析 很容易从html源码中 ...

  4. python爬虫进阶案例,Python进阶(二十)-Python爬虫实例讲解

    #Python进阶(二十)-Python爬虫实例讲解 本篇博文主要讲解Python爬虫实例,重点包括爬虫技术架构,组成爬虫的关键模块:URL管理器.HTML下载器和HTML解析器. ##爬虫简单架构 ...

  5. Python爬虫实例(3)--BeautifulSoup的CSS选择器

    Python爬虫实例 紧接着上一讲的内容. 我们初步了解了bs4这个解析库. 但是bs4难道只有find,find_all了吗? 如果层次比较深,相似的元素比较多,和可能会写的比较长. 最主要的是很难 ...

  6. python爬虫实例教程之豆瓣电影排行榜--python爬虫requests库

    我们通过requests库进行了简单的网页采集和百度翻译的操作,这一节课我们继续进行案例的讲解–python爬虫实例教程之豆瓣电影排行榜,这次的案例与上节课案例相似,同样会涉及到JSON模块,异步加载 ...

  7. Python爬虫实例 wallhaven网站高清壁纸爬取。

    文章目录 Python爬虫实例 wallhaven网站高清壁纸爬取 一.数据请求 1.分析网页源码 2.全网页获取 二.数据处理 1.提取原图所在网页链接 2.获取高清图片地址及title 三.下载图 ...

  8. python爬虫实例之——多线程爬取小说

    之前写过一篇爬取小说的博客,但是单线程爬取速度太慢了,之前爬取一部小说花了700多秒,1秒两章的速度有点让人难以接受. 所以弄了个多线程的爬虫. 这次的思路和之前的不一样,之前是一章一章的爬,每爬一章 ...

  9. 饱暖思淫欲之美女图片的Python爬虫实例(二)

    美女图片的Python爬虫实例:面向服务器版 ==该爬虫面向成年人且有一定的自控能力(涉及部分性感图片,仅用于爬虫实例研究)== 前言 初始教程 存在问题 解决思路 目标 实现步骤 硬件配置 服务器信 ...

  10. Python爬虫实例(1)--requests的应用

    Python爬虫实例(1) 我们在接下来的爬虫实例(1)里面将逐步的循序渐进的介绍爬虫的各个步骤. 已及时用到的工具,以及具体情况下的用法. 我们的任务是这样的: 爬取<修真聊天群>小说的 ...

最新文章

  1. HDU 3336 Count the string KMP
  2. 【时间管理】从零开始GTD——GTD原则
  3. Qtcreator快速入门
  4. Java 字符串比较,String 中的一些方法 == 和 equals 的详解
  5. 渐变色--浏览器兼容性
  6. redhat系统双网卡绑定
  7. 俞敏洪辟谣“周末暑假不能上课”:人生已经不易 为何还要捅刀
  8. (秒杀项目) 4.4 用户下单与秒杀
  9. orcale物化视图刷新
  10. switch怎么一个账号绑定各种服务器,NS怎么一个账号两台机器使用_Nintendo Switch 新旧机器同使用教程_尼萌手游网...
  11. Revit二次开发——一个简单的插件
  12. 【Hexo搭建个人博客】(八)添加背景效果(点击鼠标显示红心并浮现社会主义核心价值观)
  13. mysql workbench安装配置_Mysql WorkBench安装配置图文教程
  14. 腾讯优图发布三款AI硬件,深化To B能力
  15. 飞马间谍软件猖獗,苹果iOS系统被击穿
  16. class6 图(左程云左神算法 初级笔记 2018)
  17. 赶紧收藏!网上疯传的150个ChatGPT「超级提问模型」,都在这里了
  18. Pytorch张量(Tensor)复制
  19. matlab绘制风场图(矢量图、箭头图)
  20. 国外知名乐队都在用的社交媒体二维码

热门文章

  1. C# 实现获取网络时间
  2. php源码 学校版 cms,S-CMS学校建站系统PHP源码(含小程序) v5.0 bulid20201126
  3. 苹果11蓝牙配对不成功怎么办_【苹果手机蓝牙不能配对】苹果手机蓝牙无法配对_苹果手机蓝牙怎么配对...
  4. java-php-python-ssm在线购书商城系统计算机毕业设计
  5. 8.23打架学习一个
  6. 热血江湖游戏窗口化的方法
  7. vb查询mysql数据库实例_初识vb数据库开发之实例5(数据查询)
  8. XMPP tigase 8.0 与 strophe.js 测试Web聊天服务/即时通信
  9. COGS 2507 零食店
  10. 基于jsp的网上书店_[内附完整源码和文档] 基于JSP网上零食销售系统的设计与实现...