Scrapy爬取天眼查

  • 1. 分析目标网页
  • 2. 爬取思路
  • 3. 爬取信息
    • 3.1 创建scrapy工程
    • 3.2 创建CrawlSpider
    • 3.3 数据模型item.py
    • 3.4 编写spider
    • 3.5 数据库pipelines.py
    • 3.6 对于反爬的分析
    • 3.7 爬取的结果图与数据库中的结果图
  • 4. 数据的可视化
    • 4.1 提取公司地址,可视化城市分布数量
    • 4.2 公司注册资金对比
    • 4.3 公司简介词云图

1. 分析目标网页

url = 'http://www.tianyancha.com/'


1.可以看到主页有显示的热门公司,直观的看有22个,查看源码,查看其页面的跳转连接:

2.可以很轻松的找到整体的热门公司的跳转链接都封装在class为keys下的a标签中
3.随机点击进入某一个热门公司的页面


4.可以看到,页面的最上端显示的是公司的名称,电话,邮箱,地址等基本信息,下端具体显示了公司的注册资本,法人等详细的信息,我想将这些信息全部提取,并存入数据库当中,以便可以更好的进行数据的提取和可视化,需要查看这些信息的源码的位置,F12:


对于公司的基本信息,存放的方式大都是按指定给的标签的形式存放的,但对于公司的详细信息,可以很明显的看出是存放在表格当中的,这也方便了爬虫时候对于该部分信息的提取。

2. 爬取思路

  1. 是对一个网站中的不同链接下的内容进行爬取,故首选Scrapy框架,这里我使用CrawlSpider,根据rule来跟进不同的链接,发起请求
  2. 首先通过rule获取主页热门公司的跳转链接
  3. 设置相应的通用的item即可对公司的信息进行爬取
  4. 设置数据库,将数据存入数据当中
  5. 分析网页的反爬,设置相应的信息,调整爬取速度(下文会提到)

3. 爬取信息

3.1 创建scrapy工程

scrapy startproject tianyancha

3.2 创建CrawlSpider

使用pycharm打开刚才创建的Scrapy项目,在Terminal中输入创建的命令:

scrapy genspider -t crawl tianyan www.tianyancha.com

3.3 数据模型item.py

class TianyanchaItem(scrapy.Item):image_url = Field()company_name = Field()html_url = Field()company_phone = Field()company_mailbox = Field()company_url = Field()company_address = Field()company_introdution = Field()company_boss_name = Field()company_info = Field()

3.4 编写spider

class TianyanSpider(CrawlSpider):name = 'tianyan'allowed_domains = ['www.tianyancha.com']start_urls = ['http://www.tianyancha.com/']# 设置爬取的速度,最简单的反爬# 这里的爬取速度指的完成一个item的时间,即从下载,爬取,显示保存,整体的时间为3秒custom_settings = {'DOWNLOAD_DELAY':3}# 直接使用xpath定位热门公司页面的跳转链接rules = (Rule(LinkExtractor(restrict_xpaths='//div[@class="keys"]//a'), callback='parse_item'),)# 使用xpath对信息进行提取def parse_item(self, response):item = TianyanchaItem()item['company_name'] = ''.join(response.xpath('//h1[@class="name"]//text()').extract())item['image_url'] = response.xpath('//img[@class="img"]//@src').extract()item['company_phone'] = response.xpath('//span[@class="link-hover-click"]//text()').extract()item['company_mailbox'] = response.xpath('//span[@class="email"]//text()').extract()item['company_url'] = response.xpath('//a[@class="company-link"]//@href').extract()item['company_address'] = response.xpath('//script[@id="company_base_info_address"]/text()').extract()item['company_introdution'] = response.xpath('//div[@class="auto-folder"]/div/text()').extract()[2]item['company_boss_name'] = response.xpath('//div[@class="name"]/a/text()').extract()item['company_info'] = ''.join(response.xpath('//table[@class="table -striped-col -border-top-none -breakall"]//td//text()').extract())item['html_url'] = response.url#item['domain_id'] = response.xpath('//input[@id="sid"]/@value').get()#item['name'] = response.xpath('//div[@id="name"]').get()#item['description'] = response.xpath('//div[@id="description"]').get()return item

这里需要注意的是,我选择的保存方式是mysql数据库,并将公司的名字作为主键,而数据库中保存数据的时候,只有string类型才能正确插入到数据中,但对于table类型的数据爬取下来的时候,他每个是分开的,属于list类型,存放不到数据库中,会报如下的错误:

所以这里将主键和公司的info介绍数据使用"".join()进行转换,变为string类型,但这对于数据分析和数据的阅读带来了不好的麻烦。

3.5 数据库pipelines.py

class PyMySqlPipeline(object):def __init__(self):self.connect = pymysql.connect(host = 'localhost',database = 'tianyancha',user = 'root',password = '123456',charset = 'utf8',port = 3306,)# 创建游标对象self.cursor = self.connect.cursor()def process_item(self, item, spider):cursor = self.cursorsql = 'insert into hot_company(company_name,company_phone,company_mailbox,company_url,company_address,company_introdution,company_boss_name,company_info,image_url,html_url) values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)'cursor.execute(sql,(item['company_name'],item['company_phone'],item['company_mailbox'],item['company_url'],item['company_address'],item['company_introdution'],item['company_boss_name'],item['company_info'],item['image_url'],item['html_url']))# 提交数据库事务self.connect.commit()return item

设置完之后一定要记得在settings.py中开启管道

3.6 对于反爬的分析

我没有进行登陆,只是简单的打开首页中热门公司的链接,并将其对应的信息爬取下来,在实际的代码过程中,仅仅更换user-agent,将ROBOTSTXT_OBEY设置为False,是可以进行爬取的,但当我再次爬取的时候,返回的热门公司的链接全部都被重定向,重定向为登陆的界面。若想再次在首页打开热门公司的链接只需等待两三个小时或者更短的时间,刷新页面即可再次打开。

再次进行爬取的时候,我做了如下的事情:
1.关闭cookies信息:

COOKIES_ENABLED = False

2.设置随机请求的头部

class RandomUserAgentMiddleware():def __init__(self):self.user_agenrs = ["Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; AcooBrowser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)","Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506)","Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.5; AOLBuild 4337.35; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)","Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)","Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)","Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.0.3705; .NET CLR 1.1.4322)","Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30)","Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/523.15 (KHTML, like Gecko, Safari/419.3) Arora/0.3 (Change: 287 c9dfb30)","Mozilla/5.0 (X11; U; Linux; en-US) AppleWebKit/527+ (KHTML, like Gecko, Safari/419.3) Arora/0.6","Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2pre) Gecko/20070215 K-Ninja/2.1.1","Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/20080705 Firefox/3.0 Kapiko/3.0","Mozilla/5.0 (X11; Linux i686; U;) Gecko/20070322 Kazehakase/0.4.5","Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.8) Gecko Fedora/1.9.0.8-1.fc10 Kazehakase/0.5.6","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.20 (KHTML, like Gecko) Chrome/19.0.1036.7 Safari/535.20","Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; fr) Presto/2.9.168 Version/11.52",'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36']def process_request(self,request,spider):request.headers['User-Agent'] = random.choice(self.user_agenrs)
  1. 设置请求头
DEFAULT_REQUEST_HEADERS = {'Accept': '*','Accept-Language': 'en','User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Mobile Safari/537.36',}

4.设置每个item的爬取速度

    # 设置爬取的速度custom_settings = {'DOWNLOAD_DELAY':3}

3.7 爬取的结果图与数据库中的结果图


4. 数据的可视化

4.1 提取公司地址,可视化城市分布数量

4.2 公司注册资金对比

单位(万人民币)

单位(万美元)

4.3 公司简介词云图

生成美的公司简介的词云图

当然还可以做其它数据的可视化。

Scrapy爬取天眼查首页热门公司信息,可视化分析这些热门公司相关推荐

  1. python分支机构_基于Python爬取天眼查网站的企业信息!Python无所不能!

    注:这是一个在未登录的情况下,根据企业名称搜索,爬取企业页面数据的采集程序,是一个比较简单的爬虫,基本上只用到了代理,没有用到其他的反反爬技术,不过由于爬取的数据比较多, 适合刷解析技能的熟练度 . ...

  2. scrapy 爬取起点中文网首页的本周强推作品的详情介绍

    scrapy 爬取起点中文网首页的每周强推作品的详情介绍 从列表页跳转到详情页 保存的数据 封面图 小说名 作者 类型 简介 import scrapy# 起点首页 本周推荐 class Weektj ...

  3. 爬取某小说榜单爬虫及可视化分析

    爬取某小说榜单爬虫及可视化分析(仅用于学习) gitee代码链接:https://gitee.com/huang_jia_son/duoduo.git 介绍 GUI界面+python爬虫+数据清洗与处 ...

  4. 爬虫爬取中国大学排名top100并简单可视化分析

    爬虫爬取中国大学排名top100并简单可视化分析. 目标链接 http://www.zuihaodaxue.cn/zuihaodaxuepaiming2019.html 实践环境 pycharm201 ...

  5. 基于python多线程和Scrapy爬取链家网房价成交信息

    文章目录 知识背景 Scrapy- spider 爬虫框架 SQLite数据库 python多线程 爬取流程详解 爬取房价信息 封装数据库类,方便多线程操作 数据库插入操作 构建爬虫爬取数据 基于百度 ...

  6. 爬取天眼查 的python 代码

    ''' @Description: 天眼查关键词爬取风险信息 @Author: bessie_lina @Date: 2019-08-14 17:39:30 @LastEditTime: 2019-0 ...

  7. Python自动化爬取天眼查数据

    首先要注册一个账号密码,通过账号密码登录,并且滑块验证,自动输入搜索关键词,进行跳转翻页爬取数据,并保存到Excel文件中. 代码运行时,滑块验证经常不通过,被吃掉,但是发现打包成exe运行没有这个问 ...

  8. 记录一次利用python调用chrome爬取天眼查网址工商信息的过程

    1.首先准备工作: 1.pyhton3.6(官网有下载).https://www.python.org/downloads/release/python-363/ 2.pycharm 2017 开发工 ...

  9. python爬取天眼查存入excel表格_爬虫案例1——爬取新乡一中官网2018届高考录取名单...

    有一种非常常见并且相对简单的网络爬虫,工作流程大概是这样的: 访问目标网页 提取目标网页内表格信息 写入excel文件并保存 初次实践,我决定尝试写一个这样的爬虫.经过一番构思,我准备把爬取新乡一中官 ...

  10. Scrapy爬取饿了么周围商家信息

    大学生吃土指南 一.实验目的及原理 作为一个被花呗和各种电商节支配的当代大学生,每个月难免有三十几天会陷入吃土的困境.但就算吃土也要吃的优雅,吃的舒心.饿了么上有时会有商家活动,可以以很实惠(baip ...

最新文章

  1. sqlserver新增主键自增_深入Mysql,SqlServer,Oracle主键自动增长的设置详解
  2. ajax请求_重复的ajax请求让人很受伤
  3. 使用jQuery Treeview插件实现树状结构效果
  4. MacBook Air的命令终端如何在root和普通用户之间切换
  5. mysql explain 为空_车祸现场!我的MySQL千万级数据表选错索引了!
  6. [Bugku][Web][CTF] 9-15 write up
  7. 【ElasticSearch】Es 源码之 PeerRecoverySourceService 源码解读
  8. 信息安全隐忧是快递实名的“死穴”
  9. php安全篇值过滤用户输入的人参数
  10. ESP32WebSocket
  11. 计算机人工智能识别系统应用领域,人工智能论文3000字以上
  12. 如何有效的阅读开源代码
  13. MIMO与Beamforming技术学习
  14. mmdetection中使用训练好的模型单张图片推理并保存到文件夹
  15. 自主招生计算机系面试,各大高校自主招生“扎堆”六月 北大自主招生面试考题公布...
  16. 资产管理计划份额转让研究(大资管长文)
  17. [论文笔记]Vision-based Control of 3D Facial Animation
  18. python中forward(200)什么意思_Python中的Phyllotaxis模式| 算法植物学的一个单位
  19. ubuntu下安装lua和luarocks
  20. 办公自动化:PDF文件合并器,用Python将多个PDF文件进行合并

热门文章

  1. 思科模拟器交换机配置secret和password
  2. android内窥镜安装软件,DEPSTECH内窥镜
  3. PC是夕阳行业?你们图样图森破
  4. 元宇宙iwemeta:《时代》杂志新封面,元宇宙将改变一切
  5. 51单片机最小系统原理分析
  6. 无线电通信之父:马可尼
  7. 一个汉字到底占几个字节
  8. 项目中集成阿里巴巴分布式定时任务
  9. 鉴频鉴相器(PFD)不同结构讨论
  10. 数码管动态扫描显示程序内消影流程