1. 程式人生 > >python3網路爬蟲-破解天眼查+企業工商資料-分散式爬蟲系統-原始碼深度解析

python3網路爬蟲-破解天眼查+企業工商資料-分散式爬蟲系統-原始碼深度解析

Python爬蟲-2018年-我破解天眼查和啟信寶企業資料爬蟲--破解反爬技術那些事情

最近在自己用python3+mongdb寫了一套分散式多執行緒的天眼查爬蟲系統,實現了對天眼查整個網站的全部資料各種維度的採集和儲存,主要是為了深入學習爬蟲技術使用,並且根據天眼查網頁的資料結構建立了30個表來儲存30個維度的資料,很多做技術的朋友在爬天眼查的時候會遇到以下幾個問題,我把我的經歷和解決方案分享給大家。(需要爬蟲技術交流的朋友歡迎加我qq:2779571288)

#大資料爬蟲系統-主要包含這些維度

def get_all_info(soup, cid, company):

passmethod(get_base(soup, cid, company)) # 1、工商資訊資料

passmethod(get_partner(soup, cid, company)) # 2、主要成員資料

passmethod(get_gudong(soup, cid, company)) # 3、股東資訊資料

passmethod(get_invest(soup, cid, company)) # 4、對外投資資料

#passmethod(get_uplog(soup, cid, company)) # 5、變更記錄資料

passmethod(get_report(soup, cid, company)) # 6、公司年報資料

passmethod(get_branch(soup, cid, company)) # 7、分支機構資料

passmethod(get_rongzi(soup, cid, company)) # 8、融資歷史資料

passmethod(get_team(soup, cid, company)) # 9、核心團隊資料

passmethod(get_touzhi(soup, cid, company)) # 10、投資事件資料

passmethod(get_jingpin(soup, cid, company)) # 12、競品資訊資料

passmethod(get_court_notice(soup, cid, company)) # 13、開庭公告資料

passmethod(get_laws(soup, cid, company)) # 14、法律訴訟資料

passmethod(get_court_report(soup, cid, company)) # 15、法院公告資料

passmethod(get_punish(soup, cid, company)) # 16、行政處罰資料

passmethod(get_zhaobiao(soup, cid, company)) # 17、招標資料

passmethod(get_zhaopin(soup, cid, company)) # 18、招聘資料資料

passmethod(get_swlevel(soup, cid, company)) # 19、稅務評級資料

passmethod(get_credit(soup, cid, company)) # 20、進出口信用資料

passmethod(get_certificate(soup, cid, company)) # 21、資質證書資料

passmethod(get_weixin(soup, cid, company)) # 22、微信公眾號資訊

passmethod(get_pright(soup, cid, company)) # 23、智慧財產權資料

passmethod(get_soft(soup, cid, company)) # 24、軟體著作權資料

passmethod(get_pright2(soup, cid, company)) # 25、作品著作權資料

passmethod(get_site(soup, cid, company)) # 26、網站備案資料

passmethod(get_product(soup, cid, company)) # 27、產品資訊資料

passmethod(get_zhuanli(soup, cid, company)) # 28、專利資料資料

print ('success!')

1、天眼查和啟信寶哪一個的資料更難爬呢?

其實在準備爬天眼查資料的時候,我對啟信寶、企查查類似的網站分佈從資料的完整性和資料的更新及時性分析了,結果個人覺得天眼查的資料比其他網站的要完整,資料維度要多一些,資料更新的時候也比較快,所以最後選擇了爬取天眼查裡面的企業資料。

2、天眼查的30個核心資料維度:

3. 採集速度太頻繁了,會被封IP問題 怎麼解決

當我們發出去的http請求到天眼查網站的時候,正常情況下返回200狀態,說明請求合法被接受,而且會看到返回的資料,但是天眼查有自己的一套反爬機制演算法,如果檢查到同一個IP來不斷的採集他網站的資料,那麼他會被這個IP列入異常黑名單,您再去採集它網站資料的時候,那麼就永遠被攔截了。怎麼解決這個問題呢,其實很簡單,沒有錯用代理IP去訪問,每一次請求的時候都採用代理IP方式去請求,而且這個代理IP是隨機變動的,每次請求都不同,所以用這個代理IP技術解決了被封的問題。

4  天眼查2個億的資料量怎麼儲存?需要多少的代理IP

我在寫爬蟲去爬天眼查的時候,剛開始使用網上的免費或者收費的代理IP,結果90%都被封號,所以建議大家以後採集這種大資料量網站的時候 不要使用網上免費的或者那種收費的IP,因為這種ip幾秒鐘就會過期,意思就是你沒有采集網或者剛剛訪問到資料的時候,這個IP就過期了導致你無法採集成功,所以最後我自己搭建了自己的代理池解決了2個億天眼查資料的採集封IP問題。

5 天眼查網站資料幾個億資料的儲存

資料庫設計很重要,幾個億的資料儲存 資料庫設計很重要

我當時花了10天時間吧天眼查爬蟲系統全部開發完畢,可以每天爬去百萬條資料,30個維度的資料,資料爬下來後主要是資料的儲存和管理,資料庫的我採用了mongdb,爬蟲開發技術我採用了python,幾個億的資料後臺管理系統我採用php,我自己架構了分散式架構系統,所以我採集的我採用分散式+多執行緒+叢集的方式,採集速度相當的快!

python3 模擬請求目標網站:

我自己封裝了一個方法,把請求頭引數拼接後,然後呼叫requests的get方法直接模擬請求到目標網站,然後根據頁面返回的關鍵詞來識別是請求失敗或者成功或者是被封了

def get_html(url, mheaders={}, cookies={}):

while True:

try:

proxy = get_proxy() # 獲取代理

if not mheaders:

resp = requests.get(url, headers=headers, cookies=cookies, proxies=proxy, timeout=3)

else:

resp = requests.get(url, headers=mheaders, cookies=cookies, proxies=proxy, timeout=3)

if 'tianyancha' in url:

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))

else:

if resp.status_code == requests.codes.ok:

if '小查為' in resp.text or '基本資訊' in resp.text:

return resp.text

else:

print('錯誤的程式碼編號:{}, url:{}'.format(resp.status_code, url))

except Exception as e:

print('url :{},錯誤:{}'.format(url, e))