乙個簡單的ip池的搭建

2021-09-13 15:00:01 字數 2342 閱讀 7955

import requests

from bs4 import beautifulsoup

from redis import strictredis

store=

strictredis

(host=

'localhost'

,port=

6379

,db=0)

default=5

def get_ip()

:####從西刺ip**爬取免費的**ip。

url=

''header =

r=requests.

get(url=url,headers=header)

soup=

beautifulsoup

(r.text,

'lxml'

) infos=soup.

find

(id=

'ip_list').

find_all

('tr'

) count=

0for info in infos:

if info.

select

('td'):

ip=info.

select

('td')[

1].text

port=info.

select

('td')[

2].text

count+=

1 store.

zadd

('xici_ip',)

print

(count)

def check_ip()

:test_url

=''store.

zremrangebyscore

('xici_ip',0

,0) count2=

0 header =

for proxy in store.

zrangebyscore

('xici_ip',1

,9):####只檢測分數在1

-9之間的,其它的沒管

+' ...第'

+str

(count2)

+'個 '

)try

:####異常就都捕獲了。

r = requests.

get(url=

test_url

, headers=header, proxies=proxys, timeout=

1.0)

if r.status_code ==

200:

store.

zincrby

('xici_ip',1

, proxy)

print

('第'

+str

(count2)

+'個: '

+'成功'

) except:

store.

zincrby

('xici_ip',-

1, proxy)

print

('第'

+str

(count2)

+'個: '

+'失敗'

)if __name__ ==

'__main__'

:get_ip()

check_ip

()

總體上來說,這個程式只能說是將就著用吧。還有許多可以改進的地方,首先就是多執行緒的問題。其次檢測函式做的不好,我就是簡單的加一減一就行了,實際上可以在檢測成功後,直接賦予其預設值也就是最高值比較好一點,失敗後減去1並且在分數為0後從ip池中刪除掉,這樣會更好一點的。用redis的zset去儲存ip還是比較好用的,速度快就先不說了,本機上的其他程式可以很方便的去呼叫這個ip池。我ip池的程式是在pycharm上完成的,在jupyterlab上都很好的呼叫它,賊方便。

在呼叫的時候只需要將ip從redis中匯出就行了,而且zset還提供按照分數排序,我們可以很方便的匯出那些可用性比較高點的ip。

如果覺得ip量太少不夠用,可以從網上多抓取點。

乙個簡單的物件池

在伺服器的的執行過程中,由於大量的計算會導致某些物件頻繁地分配和釋放,久而久之就會產生大量的記憶體碎片,從而影響伺服器的效率和穩定。本文通過實現乙個輕量級的物件池重用物件來解決這個問題。include include mutex.h define min increasize 30 每次最少分配30...

乙個簡單的物件池

從書上直接摘抄下來的物件池,以後別給忘了 template class objectpool template objectpool objectpool int chunksize throw std invalid argument,std bad alloc mchunksize chunks...

乙個簡單的記憶體池

為什仫要使用記憶體池?1.通常我們用new delete和malloc free來管理記憶體,可能會需要頻繁的呼叫記憶體,減少執行時間,增加效率.2.避免記憶體碎片 傳統的new delete的弊端 1.分配記憶體時要檢視空閒分割槽表,根據一定的演算法來分配,比如最佳適應演算法,最差適應演算法.然後...