又是女票,拿了3万多条的13年某地区的公司信息,但是三年过去了,工商局的注册信息发生了巨大变化,有的注册资本增加了,有的公司老板变多了,更有不少公司不存在了,因此,需要一份最新的信息以便于她进行使用。
  原先是想用工商局网站上进行爬取的,但是发现工商局网站好多验证信息,毕竟我这Python初学咋练的,是在是怕怕啊!幸好,找到一个名为XX查的网站,这个网站没有验证,可以直接查询,因此就拿这个网站来吧。
  经过研究,发现必须要解析JavaScript才能拿到真实的数据,网上查找了下,发现使用phantomjs是比较简单的一种方式,于是就他了。
  我的思路是这样的,数据是在文件中,查询后肯定有两种结果,查找成功的和查找失败的,这两种各自写在一个文件中,以便之后使用。对于成功的数据,继续对其查找联系方式,注册资金,开业状态等等需要的数据。这一块应该是一个类来进行的。另外一个类,打算使用Python内置的tkinter模块,写一个简单的界面,配置这两个文件,和显示实时的查询信息的。
以下是核心的爬虫类:

   class TianYanCha(object):def __init__(self, sucPath, failedPath):super(TianYanCha, self).__init__()self.fileSuc = open(sucPath, 'a')self.fileFailed = open(failedPath, 'a')self.driver = webdriver.PhantomJS(executable_path = './phantomjs2.1.1/bin/phantomjs.exe')def __del__(self):print('dle phantomjs')self.fileSuc.close()self.fileFailed.close()self.driver.quit()def setOutput(self,text):self.text = textdef getCompanyByName(self, company):url = 'http://www.tianyancha.com/search?key=%s&checkFrom=searchBox' % urllib.parse.quote(company)self.text.insert('end', '开始查找公司:' + company + ' ' + url + "\r\n")self.driver.get(url)self.driver.implicitly_wait(10)spans = self.driver.find_elements_by_css_selector('span[class=\"c9 ng-binding\"]')print(self.driver.page_source)if len(spans) > 0:href = self.driver.find_elements_by_css_selector('a[class=\"query_name\"]')if len(href) > 0:result = companyurl = href[0].get_attribute('href')self.text.insert('end', '找到公司%s,正在查询详细信息:%s\r\n' %(company, url))self.driver.get(url)self.driver.implicitly_wait(10)#获取公司名称name = self.driver.find_elements_by_css_selector('div[class=\"company_info_text\"]')if len(name) > 0:infos = name[0].text.split('\n')self.text.insert('end', infos)#获取公司注册资本regCapital = self.driver.find_elements_by_css_selector('td[class=\"td-regCapital-value\"]')if len(regCapital) > 0:result = result + " " + regCapital[0].text#获取公司注册状态regStatus = self.driver.find_elements_by_css_selector('td[class=\"td-regStatus-value\"]')if len(regStatus) > 0:result = result + " " + regStatus[0].textself.fileSuc.write(result)self.fileSuc.write('\r')self.fileSuc.flush()self.text.insert('end', result + "\r\n")self.text.vbar.set(1, 1)else:self.text.insert('end', self.driver.page_source)else:spans = self.driver.find_elements_by_css_selector('span[class=\"c8\"]')if len(spans) > 0:self.text.insert('end', '未找到公司 %s 的相关信息\r\n' % company)self.fileFailed.write(company)self.fileFailed.write('\r')else:spans = self.driver.find_elements_by_css_selector('div[class=\"gt-input\"]')if len(spans) > 0:self.text.insert('end', '需要输入验证码了!!!!' + '\r\n')else:self.text.insert('end', '查询公司 %s 遇到错误\r\n' % company)self.fileFailed.write('               ' + company)self.fileFailed.write('\r')self.fileFailed.flush()

tkinter的界面,请见Python爬虫—爬取数据(下)tkinter和exe打包。

Python爬虫---爬取数据(上)相关推荐

  1. 如何用六步教会你使用python爬虫爬取数据

    前言: 用python的爬虫爬取数据真的很简单,只要掌握这六步就好,也不复杂.以前还以为爬虫很难,结果一上手,从初学到把东西爬下来,一个小时都不到就解决了. python爬出六部曲 第一步:安装req ...

  2. 采用python爬虫爬取数据然后采用echarts数据可视化分析

    前言:采用python爬虫爬取天气数据然后采用echarts数据可视化画图分析未来天气变化趋势 从获取数据到可视化的流程 (熟悉爬虫爬取数据然后数据可视化这个过程) 一.python爬取未来8-15天 ...

  3. python爬虫爬取网页上的天气数据

    目录 一:获取网页重要信息 二:爬取网页数据 三:源码分享 一:获取网页重要信息 在要爬取数据信息的网页上,F12进入查看网页内容 二:爬取网页数据 1 导入模块 import requests fr ...

  4. 爬虫python的爬取步骤-Python爬虫爬取数据的步骤

    爬虫: 网络爬虫是捜索引擎抓取系统(Baidu.Google等)的重要组成部分.主要目的是将互联网上的网页下载到本地,形成一个互联网内容的镜像备份. 步骤: 第一步:获取网页链接 1.观察需要爬取的多 ...

  5. Python爬虫爬取数据的步骤

    爬虫: 网络爬虫是捜索引擎抓取系统(Baidu.Google等)的重要组成部分.主要目的是将互联网上的网页下载到本地,形成一个互联网内容的镜像备份. 步骤: 第一步:获取网页链接 1.观察需要爬取的多 ...

  6. python爬虫步骤-Python爬虫爬取数据的步骤

    爬虫: 网络爬虫是捜索引擎抓取系统(Baidu.Google等)的重要组成部分.主要目的是将互联网上的网页下载到本地,形成一个互联网内容的镜像备份. 步骤: 第一步:获取网页链接 1.观察需要爬取的多 ...

  7. Python爬虫爬取数据

    我是Python小白,我会用比较通俗易懂的方法告诉你如何去爬取数据. 一开始,我们需要pycharm(也就是我们编代码的工具),其次我们需要打开我们需要爬取数据的网页,我以鞋子为例. 那么,接下来就开 ...

  8. 【教程+实例】Python爬虫实例——用Python爬虫爬取bangumi上的galgame资讯

    文章目录 0.前言 1.什么是爬虫? 2.什么东西可以爬? 3.简易爬虫示例 4.如何筛选数据? 5.正则表达式 6.最终代码 如何修改代码,以适应自己的需求 效果截图 7.彩蛋 本人与知乎用户间宫羽 ...

  9. python爬虫爬取数据遇到的问题

    自学爬虫中遇到的一点问题和部分解决方法 本人大一新手,学python两个月,目前都是在网上找爬虫教学尝试自学(最初的目的是爬美女图片) 最开始接触爬虫的时候是一个前辈给我的代码和一个api的网站聚合数 ...

最新文章

  1. ORB-SLAM2代码/流程详解
  2. 从寄存器看I386和x64位中函数调用中参数传递
  3. Node.js连接MySQL
  4. 边结点结构体的定义及使用
  5. 自定义ClassLoader和双亲委派机制
  6. 【Spark】Spark Stream读取kafka写入kafka报错 AbstractMethodError
  7. 英语总结系列(二十二):Baby偶遇GCT
  8. android中获取应用程序(包)的信息,Android中获取应用程序(包)的信息PackageManager的使用(一).doc...
  9. 作为字节跳动的研发面试官,有些话我不得不说!
  10. javaScript实现百度换肤案例
  11. 教程丨如何在AdsPower浏览器内快速配置UCloud 服务器
  12. 46-Java-RabbitMQ
  13. 华为HCNA实验操作之常用操作命令1-10
  14. wlop一张多少钱_小白有个问题,为什么很多人都说 WLOP 的画不够好?
  15. CSS基础班笔记(三)
  16. MIT 6.S965 韩松课程 05
  17. 打印机接无线共享服务器出现乱码,Ricoh理光复印机网络打印机出乱码的解决办法...
  18. 10分钟内用Ezo和Python构建以太坊Oracle
  19. 你今天真好看中文扫描版
  20. matlab对3r操作臂进行运动学仿真,并根据动力学方程设计控制器simulink仿真

热门文章

  1. 移动通信各制式、调制的速率及频谱利用率(2G-4G)
  2. PTA 3+2转段考试 数据库 mysql(3篇)
  3. Cool Edit Pro
  4. 有感于Google退出中国
  5. 计算机常见硬盘名称,我的硬盘我做主:自己给电脑硬盘改个名!
  6. Bert 论文中文翻译
  7. Kettle(3):快速入门
  8. javaweb课程设计网上书店
  9. 离群点(孤立点、异常值)检测方法
  10. (集成电路卡)ID卡