• 关注公众号
  • 访问手机版
  • 联系我们
        工作时间
    • 周一至周五:09:00-17:30
    • 周六至周日:10:00-16:00
    企某查-企业工商数据-python爬虫源码破解版分享
    2019-01-12 11:42:16 350
  • 收藏

    由于项目需要,需要建立亿万级的企业信息数据库,经过1个月的爬虫技术博弈,我终于破解了企业数据爬虫面临的封IP和字体库加密以及验证码的问题,完成了亿万级企业库的信息的挖掘和数据库建立,海量的企业数据如何进行市场化呢?做类似天眼查、启信宝、企查查这种网站模式还是做成其他的模式呢?这样的问题是目前很多创业的朋友面临的问题。其实大家可以微信搜关注"it大咖网"公众号里面都是中国顶尖技术大牛分享的大数据技术和前沿的尖端爬虫技术完整解决思路和源码,各种反爬、破解黑洞验证码、训练机器人图像识别等前沿技术,那才叫大牛呢,我每天也跟着这些大咖学习尖端的爬虫技术。
    爬虫代码:
    class TianYanCha(object):
        def __init__(self):
            self.search_url = 'https://www.tianxxxcha.com/search?key={}&checkFrom=searchBox'
            self.headers = {
                'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
                'Accept-Encoding':    'gzip, deflate, br',
                'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
                'Connection': 'keep-alive',
                'Host': 'www.tianyancha.com',
                'Upgrade-Insecure-Requests': '1',
                'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0',
            }
            self.search_queue = queue.Queue()
            self.cids = set()
            self.redis_r = redis.StrictRedis(host=REDIS_HOST, port=REDIS_PORT, db=REDIS_DB)
         
        #列表数据
        def load_search_data(self, text):
            soup = BeautifulSoup(text, 'lxml')
            companys = soup.find_all('a', class_='name select-none')
            for company in companys:
                company_id =company['href'].split('/')[-1]
                print("%s 成功" % company_id)
                print('开始下载详情页!======')
                self.load_detail_data(company_id)
                print('详情页成功======')

        #详细数据
        def load_detail_data(self, company_id):
            detail_url = 'https://www.tianxxxcha.com/company/{}'.format(company_id)
            detail_text = self.get_html(detail_url)
            soup = BeautifulSoup(detail_text, 'lxml')
            name = soup.find('h1', class_="f18 mt0 mb0 in-block vertival-middle sec-c2").text if soup.find('h1', class_="f18 mt0 mb0 in-block vertival-middle sec-c2") else company_id
            #获取详细数据
            get_all_info(soup, company_id, name)
            print("%s 详细数据成功" % company_id)

        def get_html(self, url):
            while True:
                try:
                    proxy = get_proxy()#获取代{过}{滤}理IP
                    #time.sleep(1 + random())
                    print('代{过}{滤}理IP:'+str(proxy))
                    resp = requests.get(url, headers=self.headers, timeout=20, proxies=proxy)
                    if resp.status_code == requests.codes.ok:
                        if '请输入验证码' not in resp.text:
                            return resp.text
                        else:
                            print('{}被封了!'.format(proxy))
                    elif '融资历史' in resp.text:
                        return resp.text
                    else:
                        print('错误的代码编号:{}, url:{}'.format(resp.status_code, url))
                except Exception as e:
                    print('url :{},错误:{}'.format(url, e))
        #分页爬数据
        def load_page_data(self,url,word):
            #第一页数据
            print('开始搜索页数据======')
            text = self.get_html(url)
            self.load_search_data(text)
            print('完成搜索数据======')
            #获取分页数据(2-5页)
            print('开始分页数据======')
            soup = BeautifulSoup(text, 'lxml')
            #total = int(soup.find('div', class_='total').lists_text.replace('共', '').replace('页', '')) if soup.find('div', class_='total') else 1
            for index in range(2, 6):
                print('page:https://www.tianxxxcha.com/search/p{}?key={}'.format(index, word))
                page_url='https://www.tianyancha.com/search/p{}?key={}'.format(index, word)
                text = self.get_html(page_url)
                self.load_search_data(text)
            print('完毕分页数据======')


    破解天某查爬虫,如何解决采集数据IP被封的问题?
    我4个月前用python开发了一套天查分布式爬虫系统,实现对天查网站的数据进行实时更新采集。网站的数据模块,数据存储结构和他一样,当时的想法是做一个和天眼查一模一样的数据服务平台,然后数据源就通过我的爬虫技术从天某查、启某宝实时、企某查同步采集。采集天某查数据需要做的工作准备:
    1、首先分析目标网站数据模块:
    在采用python3写爬虫程序开始爬天查的数据时候,首先需要我先分析这个网站有那些数据模块,整个网站有主要核心数据有以下30大模块:1基本信息、2法人代表、3主要成员、4股东&出资、5变更记录、6公司年报、7司法风险、8舆情事件、9岗位招聘、10商品信息、11网站备案、12商标数据、13专利数据,、14 作品著作权软件著作权、对外投资关系、税务评级、行政处罚、进出口信用、企业评级信用等三十几个维度的企业数据
    2、写一个爬虫demo模型分析网站的页面结构和代码结构
    我们模拟http请求到天某查目标网站,看看天某查响应的的数据信息是什么样子?
    当我们正常访问的时候是可以很轻松得到列表的数据以及进入列表的详细链接,我们在通过链接采集得到每个企业的详细的数据包。
    3 采集速度太频繁了,会被封IP问题 怎么解决
    当我们发出去的http请求到天某查网站的时候,正常情况下返回200状态,说明请求合法被接受,而且会看到返回的数据,但是天眼查有自己的一套反爬机制算法,如果检查到同一个IP来不断的采集他网站的数据,那么他会被这个IP列入异常黑名单,您再去采集它网站数据的时候,那么就永远被拦截了。怎么解决这个问题呢,其实很简单,没有错用代{过}{滤}理IP去访问,每一次请求的时候都采用代{过}{滤}理IP方式去请求,而且这个代{过}{滤}理IP是随机变动的,每次请求都不同,所以用这个代{过}{滤}理IP技术解决了被封的问题。
    4 天某查2个亿的数据量怎么存储?需要多少的代{过}{滤}理IP
    我在写爬虫去爬天某查的时候,刚开始使用网上的免费或者收费的代{过}{滤}理IP,结果90%都被封号,所以建议大家以后采集这种大数据量网站的时候 不要使用网上免费的或者那种收费的IP,因为这种ip几秒钟就会过期,意思就是你没有采集网或者刚刚访问到数据的时候,这个IP就过期了导致你无法采集成功,所以最后我自己搭建了自己的代{过}{滤}理池解决了2个亿天眼查数据的采集封IP问题。
    5 天某查网站数据几个亿数据的存储
    数据库设计很重要,几个亿的数据存储 数据库设计很重要
    我当时花了10天时间把天查爬虫系统全部开发完毕,可以每天爬去百万条数据,19个维度的数据,数据爬下来后主要是数据的存储和管理,数据库的我采用了mongdb,爬虫开发技术我采用了python,几个亿的数据后台管理系统我采用php,我自己架构了分布式架构系统,所以我采集的我采用分布式+多线程+集群的方式,采集速度相当的快!
    6 字体库加密破解
    字体库加密,是最新的一种反爬技术,几个做企业信息搜索的网站都在采用字体库加密的方式进行反爬,来实现保护自己的网站数据不被网络爬虫采集到,这种技术的原理很简单,借用浏览器的解析和渲染,让你用浏览器看到的内容和查看元素看到的内容是不同的,利用字体库加密码技术进行混淆渲染,实现爬虫爬到的是脏数据而不是真实数据的目的,比如天眼查的 公司介绍字段就引用了字体库加密技术,然后这种技术有一定的算法规则,只要您认真分析规律自然就轻松破解了!
    (对爬虫技术和大数据感兴趣朋友可私信)

    上一页:百家号、企鹅号、大鱼号的教程 下一页:【零基础直达六级水平】 新东方英语学习全能套装
    
    全部评论(0)

    让创业更简单

    • 反馈建议:5718324348@qq.com
    • 工作时间:周一到周六 9:00-17:00
    17191084669

    关注我们