配置環(huán)境概訴:
windos10
python 3
node.js -- npm環(huán)境
后話前說
除了pip安裝還有兩種方式
(一)署照、基于官方文檔的方式三+正向代理服務(wù)器功能
基于官方文檔的方式三下載完整項目在本地運行, 并使用curl和request集成的正向代理服務(wù)器功能獲取代理ip,
實際發(fā)現(xiàn), 方式三+ 正向代理服務(wù)器雖然能夠成功獲取代理ip , 但是大部分代理ip不能用, 所以最終改為windos下docker部署并接口獲取代理ip
巨坑, 請?zhí)^下面有關(guān) 方式三+ 正向代理服務(wù)器 的配置
(二)毡庆、官網(wǎng)方式一(docker部署) + API接口
使用docker部署, 接口方式獲取代理ip
推薦使用這種方式碍岔, 但本人 (一) 配置失敗后發(fā)現(xiàn)ip可用性不高就放棄了scylla, 所以沒再繼續(xù)配置下去
scylla 簡介
scylla 是一款高質(zhì)量的免費代理 IP 池工具豆巨,僅支持 Python 3.6灯萍。特性如下:
- 自動化的代理 IP 爬取與驗證
- 易用的 JSON API
- 簡單但美觀的 web 用戶界面,基于 TypeScript 和 React(例如,代理的地理分布)
- 最少僅用一條命令即可啟動
- 簡明直接的編程 API(將在 1.1 版本中加入)
- 最少僅用一行代碼即可與 Scrapy 和 requests 進(jìn)行集成
- 無頭瀏覽器(headless browser crawling)爬蟲
注意: 暫不支持https
(一)、scylla完整項目部署+正向代理服務(wù)器功能
由于本人使用方式二,pip安裝時自動部署一個附屬組件pycurl時出錯:
Command "python setup.py egg_info" failed with error code 10 in C:\Users\Public\Documents
\Wondershare\CreatorTemp\pip-install-2vh3p5oi\pycurl\
墻內(nèi)墻外都找遍了也沒有解決方案, 所以以下討論方式三琳骡、通過github下載整個項目, 修改其requirements.txt文件使其不再自動部署pycurl避免出錯, 運行該項目從而搭建本地正向代理ip池。
前置工作:
升級pip和setuptools工具讼溺。
pip install --upgrade setuptools
python -m pip install --upgrade pip
手動下載pycurl組件包:
這一步主要是因為在windos上安裝scylla 都會在自動下載pycurl上出錯, 我們這里先將其手動下載并安裝楣号。下載地址: 插件庫中選pycurl 64版本最新一個
下載后將文件放到python安裝目錄(如果是虛擬環(huán)境, 則為虛擬環(huán)境的Scripts目錄),和pip.exe同一目錄
然后使用pip 安裝
//cd 到pip.exe和下載文件都在的python安裝目錄
//如果是虛擬環(huán)境, 則為虛擬環(huán)境的python安裝目錄
cd C:\Users\LittleTrue\AppData\Local\Programs\Python\Python37\
//然后使用pip 安裝
pip install [下載第三方模塊的文件名] //我下載的是pycurl-7.43.1-cp37-cp37m-win_amd64.whl
提示successfull則安裝pycurl成功, 能夠避免scylla 自動安裝時失敗怒坯。
下載并構(gòu)建項目:
git clone https://github.com/imWildCat/scylla.git
cd scylla
//在scylla下requirements.txt文件修改pycurrl版本為你前置工作中下載并安裝的版本
pip install -r requirements.txt
npm install
make build-assets //本步不執(zhí)行則訪問不了部署在本地的web界面, 但是curl和正向代理訪問獲取依然可以獲取代理ip
運行項目:
cd 到scylla項目
python -m scylla
//python3 -m scylla
服務(wù)運行在本地(localhost)炫狱,使用口號 8899。
每次運行本項目時敬肚,需要等待 1~2 分鐘以爬取一定量的代理 IP毕荐。
獲取項目的代理ip:
curl獲取
curl http://api.ipify.org -x http://127.0.0.1:8081
集成在request項目中
requests.get('http://api.ipify.org', proxies={'http': 'http://127.0.0.1:8081'})