用python3爬蟲-教大家如何解決驗證碼的問題
最近在自己用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個核心數據維度:
首先整個網站有主要核心數據有以下19大模塊:1基本信息、2法人代表、3主要成員、4股東&出資、5變更記錄、6公司年報、7司法風險、8輿情事件、9崗位招聘、10商品信息、11網站備案、12商標數據、13專利數據,、14 作品著作權軟件著作權、16對外投資關系、17稅務評級、18行政處罰、19進出口信用、20企業評級信用等十九個維度的企業數據,如果把這些數據爬下來,並且結構化,實現可以查詢可以檢索使用,可以導出到excel,可以生成企業報告,那麽需要建立數據庫來存儲這些數據,像這種非結構化的數據我們選擇mongdb數據庫是最合適的。
- 采集速度太頻繁了,會被封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))
用python3爬蟲-教大家如何解決驗證碼的問題