pool = Pool()
#創建進程池
pool.map(func,[i*10for i in range(10)])
[i*10for i in range(10)]:生成器,生成0到9的數字乘以10的結果,生成一個列表爲[0,10,20....]
func:函數
map:將函數作用於列表每一個元素
11、yield:生成器
案例:用上面的工具完成爬去貓眼電影TOP榜
#__author:PL.Li#導入需要使用的模塊import requests
from flask import json
from requests.exceptions import RequestException
import re
from multiprocessing import Pool
#嘗試連接獲取頁面defget_response(url):try:
response =requests.get(url)
if response.status_code ==200:
return response.text
returnNoneexcept RequestException:
returnNone#正則匹配需要的內容defre_one_page(html):#超級長的正則表達式進行匹配,匹配到的是個集合。
pat =re.compile('<dd>.*?board-index.*?">(/d+?)</i>.*?data-src="(.*?).*?name"><a.*?">(.*?)"class=.*?class="star">''(.*?)</p>.*?releasetime">(.*?)</p>.*?integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>',re.S)
#用迭代進行異步操作
items =re.findall(pat,html)
for item in items:
yield {
'index':item[0],
'image':item[1],
'title':item[2],
'actor':item[3].strip()[3:],
'time':item[4].strip(),
'score':item[5]+item[6]
}
#保存寫入文件defwrite_file(conrent):with open('result','a',encoding='utf-8')as f:
f.write(json.dumps(conrent,ensure_ascii =False)+'\n')
f.close()
#配置啓動函數defmain(offset):
url ='http://maoyan.com/board'+str(offset)
html=get_response(url)
for item in re_one_page(html):
write_file(item)
#使用多進程加速一秒完成if __name__ == '__main__':
pool = Pool()
pool.map(main,[i*10for i in range(10)])