記錄項目數(shù)據(jù)采集工作中遇到的問題吆你,改進(jìn)的過程廉赔。
django==1.1.16 python==3.5.3
數(shù)據(jù)來源有三,所以結(jié)構(gòu)設(shè)計大概是下面這種:
將各源的爬取方法單獨(dú)寫成app_spider下的GetData模塊杈抢,在spider.views中寫總的爬取類SpiderMethod神汹,按照數(shù)據(jù)庫設(shè)計分別從IP/DOMAIN/HASH進(jìn)行匯總爬取庆捺,期間調(diào)用GetData模塊的三個py文件中的爬取方法。注意模塊的import路徑屁魏。
寫完run滔以,順序爬取沒有問題。
之后加了協(xié)程池gevent_pool氓拼,效率提高但是出現(xiàn)了常見爬蟲限制你画。
一開始每次數(shù)據(jù)庫寫入或讀取抵碟、更新操作后都會close(),造成下一次使用受限撬即,所以試著run的時候注釋掉了立磁。感覺量小。沒障礙剥槐。
協(xié)程池加上唱歧,先每輪開了100個協(xié)程,mysql默認(rèn)最大連接數(shù)默認(rèn)100粒竖,不改也不關(guān)就各種開著連接颅崩,理所當(dāng)然的阻塞了。所以修改mysql的my.init文件蕊苗, 修改max_connections為1000(最高)沿后,重啟mysql服務(wù)(管理--服務(wù)或者mysql command line)。
協(xié)程池加上朽砰,先每輪開了100個協(xié)程尖滚,分別出現(xiàn)了api請求頻率和次數(shù)限制。順著這些問題去查了爬蟲常出現(xiàn)的問題:IP限制瞧柔、驗證碼漆弄、身份驗證,大多有解決或緩解了我的問題造锅。但我現(xiàn)在遇到的一個谷歌人機(jī)驗證撼唾,沒找到為何出現(xiàn)驗證,也沒找到能力之內(nèi)的解決方法哥蔚。
下面記錄解決常見限制的一些過程倒谷。在過程中嘗試改用scrapy重寫了一下整個爬蟲。(scrapy默認(rèn)多線程的糙箍,任務(wù)隊列中請求失敗的會一直一直請求渤愁,最后會記錄請求次數(shù),成功任務(wù)數(shù)等等深夯。)所以在scrapy中遇到的這些常見限制也一起說了猴伶。
django多協(xié)程爬蟲/scrapy框架爬蟲開ip代理、頭部請求構(gòu)造塌西、UA代理、模擬登陸(cookies)
scrapy開啟ip代理需要在中間件增加ProxyMiddleware類筝尾,說明代理請求規(guī)則捡需,代理可以放在設(shè)置文件setting.py中手動更新,也可以建立自己的ip代理池筹淫,或者建立自己的ip代理庫站辉,每次從庫中隨機(jī)挑選呢撞,同時配合ip的有效驗證篩選等(還沒做)。
UA代理饰剥,模擬瀏覽器也是一樣的套路殊霞。中間件添加RandomUserAgent類,說明UA獲取方法汰蓉,UA同樣可以放在setting.py中手動更新绷蹲。常見UA網(wǎng)上都有。
頭部請求構(gòu)造放在項目文件py中定義顾孽。直接用祝钢。
使用cookies模擬登陸用到一些包。同樣中間件添加CookiesMiddleware類若厚。然后就是cookies獲取的問題了拦英。有手動有自動(selenium)。