程序池爬蟲

2021-09-23 08:17:22 字數 1717 閱讀 9279

import requests

from urllib.request import urlopen

from multiprocessing import pool

# 200 網頁正常的返回

# 404 網頁找不到

# 502 504

def get(url):

response = requests.get(url)

if response.status_code == 200:

return url,response.content.decode('utf-8')

def get_urllib(url):

ret = urlopen(url)

return ret.read().decode('utf-8')

def call_back(args):

url,content = args

print(url,len(content))

if __name__ == '__main__':

url_lst = [

'','',

'','',

]p = pool(5)

for url in url_lst:

p.close()

p.join()

import re

from urllib.request import urlopen

from multiprocessing import pool

def get_page(url,pattern):

response=urlopen(url).read().decode('utf-8')

return pattern,response # 正規表示式編譯結果 網頁內容

def parse_page(info):

pattern,page_content=info

res=re.findall(pattern,page_content)

for item in res:

dic=

print(dic)

if __name__ == '__main__':

regex = r'.*?<.*?class="board-index.*?>(\d+).*?title="(.*?)".*?class="movie-item-info".*?(.*?)

.*?(.*?)

' pattern1=re.compile(regex,re.s)

url_dic=

p=pool()

res_l=

for url,pattern in url_dic.items():

for i in res_l:

i.get()

# 程序池

# cpu個數+1

# ret = map(func,iterable)

# 非同步 自帶close和join

# 所有結果的

# 同步的:只有當func執行完之後,才會繼續向下執行其他**

# 返回值就是func的return

# 非同步的:當func被註冊進入乙個程序之後,程式就繼續向下執行

# 為了使用者能從中獲取func的返回值obj.get()

# get會阻塞直到對應的func執行完畢拿到結果

# 需要先close後join來保持多程序和主程序**的同步性

程序池 執行緒池

程序池和執行緒池相似,所以這裡我們以程序池為例介紹,下面對程序池的討論完全適用於執行緒池 如果沒有特殊宣告 程序池是由伺服器預先建立的一組子程序,這些子程序的數目在3 10個之間 典型情況 執行緒池的數量應該和cpu數量差不多。程序池中的所有子程序都執行者相同的 並具有相同的屬性。因為程序池在伺服器...

執行緒池 程序池

執行緒池 程序池 池子解決什麼問題?1.建立 銷毀執行緒伴隨著系統開銷,如果過於頻繁會影響系統執行效率 2.執行緒併發數量過多,搶占系統資源,從而導致系統阻塞甚至宕機 3.能夠剛好的控制和管理池子裡面的執行緒和程序 concurrent.futures模組提供了高度封裝的非同步呼叫介面 thread...

程序池, 執行緒池

知識儲備 池 裝載固定數量介質,該介質值得是程序或者執行緒 為什麼要用?讓機器在自己可承受的範圍內去保證乙個高效的工作 from concurrent.futures import processpoolexecutor,threadpoolexecutor pool processpoolexec...