Python3爬取企查查网站的企业年表并存入MySQL

Python3爬取企查查网站的企业年表并存入MySQL

本篇博客的主要内容:爬取企查查网站的企业年报数据,存到mysql中,为了方便记录,分成两个模块来写:

第一个模块是爬取数据+解析数据,并将数据存到文件中;第二个模块是将数据存到mysql数据库中(批量插入)


第一部分:爬取数据+解析数据

需要的库文件:

import pymysql
import requests
from bs4 import BeautifulSoup
import codecs
import time

import sys

没有使用scrapy爬虫框架,帮同学爬取企查查上一些企业的信息。


爬虫前的准备(环境):

1.Python是必须的,基于python3写的

2.爬虫依赖的库文件

3.MySQL必须有,同时还要有Python操作MySQL的库文件pymysql

    (注:Python3中不支持MySQLdb库文件,一开始并不知道,就傻傻地pip了,pip报错,以为是网络的问题或者是window的问题,胡乱搞了一通之后,百度搜索了python mysql库文件安装,结果是其他人都是pip的,并没有啥问题,无奈之下在python后面加了3,然后看到python3不支持MySQLdb,整个人都傻逼了)


Coding之前,我们还需要先分析爬取网站的结构:

1.主要爬取的是企查查的企业年报,页面如下图:爬取的内容就是红色框中的几个表格(分年度的)。

以爬取 南京易乾宁金融信息咨询有限公司的企业年报为例

url:http://www.qichacha.com/firm_1aa73f4e4ba0e172143909a124f0cbb6.shtml#report

爬取的内容:


2.通过使用浏览器自带的开发者工具(审查元素),定位这几个表格在网页中的位置,如下所示:

从图中可以看出:企业基本信息在<table class="ntable"></table>中



Coding:

1. 网页结构和爬取需求分析完毕,接下来就是撸起袖子Coding

使用request库爬取(推荐使用request库,可以满足爬虫的绝大部分需求)。

使用beautifulsoup4来解析网页,bs4库我就不多说了,只要是用过Python写爬虫的人,都说好。对于初学者,可以查看bs4的官方文档(传送地址:https://www.crummy.com/software/BeautifulSoup/bs4/doc/)。

先简单使用request将网页下载下来,然后使用beautifulsoup4来解析网页内容,来验证是否和之前分析的结果一样。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import requests
import lxml
from bs4 import BeautifulSoup
import codecs
import time
import sys
headers = {
    'Accept': 'text/html, */*; q=0.01',
    'Accept-Encoding': 'gzip, deflate',
    'Accept-Language': 'zh-CN,zh;q=0.8',
    'Host': 'www.qichacha.com',
    'Connection': 'keep-alive',
    'Upgrade-Insecure-Requests': '1',
    'Cache-Control': 'max-age=0',
    'Cookie': 'UM_distinctid=162b82f21fa8f1-0803268b01ee0f-7c117d7e-1fa400-162b82f21fb77c; acw_tc=AQAAAIsSAkpjKAAAq7DGOlIV8eQv2vCF; _uab_collina=152350856009288770740658; hasShow=1; _umdata=C234BF9D3AFA6FE719F2E09D797D23E34110F2E82EB4188B670C9EB8EC9DC9B349A81CD9A226A737CD43AD3E795C914CC2334F10781D1FBF6B6942E57AA6F7F8; PHPSESSID=fphni733iobptf39h3nkqrim96; zg_did=%7B%22did%22%3A%20%22162b82f2175390-079c7ce1a4a2ed-7c117d7e-1fa400-162b82f2176859%22%7D; CNZZDATA1254842228=595737747-1523503772-https%253A%252F%252Fwww.baidu.com%252F%7C1523841965; Hm_lvt_3456bee468c83cc63fb5147f119f1075=1523508520,1523515331,1523583111,1523618471; Hm_lpvt_3456bee468c83cc63fb5147f119f1075=1523844231; zg_de1d1a35bfa24ce29bbf2c7eb17e6c4f=%7B%22sid%22%3A%201523844141176%2C%22updated%22%3A%201523844235810%2C%22info%22%3A%201523508519291%2C%22superProperty%22%3A%20%22%7B%7D%22%2C%22platform%22%3A%20%22%7B%7D%22%2C%22utm%22%3A%20%22%7B%7D%22%2C%22referrerDomain%22%3A%20%22www.qichacha.com%22%2C%22cuid%22%3A%20%2299d640975c5ff0e372e5283151adbfd0%22%7D',
    'X-Requested-With': 'XMLHttpRequest',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.4882.400 QQBrowser/9.7.13059.400'
}
'''
企业基本信息表(分年)
股东(发起人)出资信息表
企业资产状况信息表
股权变更信息表
'''
if __name__ == '__main__':
    print("爬虫启动....")
    url = 'http://www.qichacha.com/firm_1aa73f4e4ba0e172143909a124f0cbb6.shtml#report'
    try:
        # 爬取的网页地址:南京易乾宁金融信息咨询有限公司的企业年报
        reqs = requests.get(url, headers=headers, timeout=30)
        # print(reqs.text)
        soup = BeautifulSoup(reqs.text, 'lxml')
        # print(soup)
        print("#########################")
        report_div = soup.find('div', class_='container m-t-md').find('div', class_="data_div", id='report_div')
        print(report_div)
        print(report_div.find('section', class_='panel pos-rlt  b-a report_info'))
    except:
        error = sys.exc_info()
        print('{0} -> {1} -> {2}'.format(url, error[0], error[1]))
        # print(error[0], end=' ')
        # print(error[1])
        # 出现异常了,咋办
    print("爬虫结束....")

会发现结果返回为空,这是为什么呢?使用开发者工具查看的时候,在网页中是存在的。再次分析网页:

下图中的细线框中,在使用上面代码爬取数据的时候返回的是空的div,div里面的内容(粗红线框)却不翼而飞。



一筹莫展之际,突然想到了,之前在做爬虫的时候,遇到过数据和页面分开发送的情况:重新整理下思路,发现在点击企业年报的时候,页面的其他内容并没有变化,变化的只有企业年报部分,这个网站应该使用的是Ajax,异步载入需要的数据。在实际爬取的时候,应该去请求另一个网址,得到数据。


使用浏览器的开发者工具,点击network选项,在进入到企业基本信息页面之后,清空network中所有的信息,然后点击企业年报,逐条查看network的信息,发现有一条url的response中返回了数据,经过对这些数据仔细的分析,发现这就是我需要爬取的数据。(注:数据与页面分离,仔细想一想,网页这么做才是正解,如果一次性将企业的所有数据发送过来,不仅耗费网络资源,还需要额外的代码处理这些数据存放)

2. 经过上面的分析之后,改写之前的code:

具体怎么使用beautifulsoup4去解析这里面的数据很简单,我就不在这里细说了,如果有不懂的,看一看文档基本上就会了。

爬取+解析的详细代码实现:(我这里是爬取了17个企业的数据,企业不多,所以url我都固定了,如果要

  • 1
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值