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)])