python實(shí)戰(zhàn)案例:爬取爬蟲代理IP
實(shí)戰(zhàn)案例內(nèi)容
現(xiàn)如今的網(wǎng)站,反爬蟲策略越來越厲害,我之前在使用爬蟲爬取需要的數(shù)據(jù)時,本機(jī)ip十分容易被封掉,使數(shù)據(jù)爬取受阻,后來我就發(fā)現(xiàn)了一個國內(nèi)高匿名免費(fèi)HTTP代理IP網(wǎng)站,網(wǎng)站網(wǎng)址見以下連接:https://www.kuaidaili.com/free/,其中有非常多的公開免費(fèi)的匿名IP,從而就有了今天這個爬取爬蟲代理IP的實(shí)戰(zhàn)案例。為了之后能爬取數(shù)據(jù)能夠更加便利的使用這些IP,我從這個網(wǎng)址爬取了最新的150個高匿名代理IP,并存儲到了數(shù)據(jù)庫中,每次我要獲取最新的ip存儲到數(shù)據(jù)時,只要運(yùn)行這個腳本就可以了。

整體思路
數(shù)據(jù)庫部分
因?yàn)槲沂褂胮ython爬蟲爬取數(shù)據(jù),所以我使用了python的第三方庫sqlite3來創(chuàng)建數(shù)據(jù)庫進(jìn)行ip數(shù)據(jù)存儲。
1、連接數(shù)據(jù)庫
使用connect()方法連接數(shù)據(jù)庫,代碼如下:

2、判斷表格是否為空
首先判斷表格是否存在,如果不存在就新建表格,并返回True,否則就清空表格記錄并返回False,實(shí)現(xiàn)的函數(shù)方法(輸入數(shù)據(jù)庫對象和表格名稱)和代碼如下:

3、插入數(shù)據(jù)
將爬蟲爬取到的數(shù)據(jù)實(shí)時寫入到數(shù)據(jù)庫表格中,全部插入完成后,關(guān)閉數(shù)據(jù)庫連接。
爬蟲部分
1、請求頭準(zhǔn)備
代理IP(proxies)初始化:從上文的免費(fèi)HTTP代理IP網(wǎng)站中選擇一個有效ip進(jìn)行初始化
請求頭(headers)初始化:需初始化的內(nèi)容有cookies、connection、user-agent
2、爬取數(shù)據(jù)
使用python的request庫爬取數(shù)據(jù),同時使用python中time庫的sleep()方法時程序暫停5s在繼續(xù)執(zhí)行,防止訪問網(wǎng)站在短時間內(nèi)過于頻繁,然后使用正則表達(dá)式匹配網(wǎng)頁中的對應(yīng)的數(shù)據(jù),再將數(shù)據(jù)插入到數(shù)據(jù)庫表格中。代碼如下:

數(shù)據(jù)爬取結(jié)果
最終爬取到的代理IP數(shù)據(jù)見下圖:
