按照模板嵌套多进程,结果发现速度并没有显著提升!
是我哪里写错了,还是这个多进程只支持爬虫呢?[Python] 纯文本查看 复制代码 #! /usr/bin/env python3
#coding:utf-8
from gevent import monkey
#从gevent库里导入monkey模块。
monkey.patch_all()
#monkey.patch_all()能把程序变成协作式运行,就是可以帮助程序实现异步。
import gevent,time
#导入gevent、time、requests
from gevent.queue import Queue
#从gevent库里导入queue模块
start = time.time()
import re
keywords_filename = u'过滤词库.txt'
input_filename = u'待过滤.txt'
output_filename = u'过滤完成关键词.txt'
def to_be_filtered(word,keywords):
'''
is_filtered是否需要过滤掉,默认为不过滤
'''
is_filtered = False
for keyword in keywords:
if re.findall('^\s*$',keyword):
continue
if word.find(keyword)!=-1:
'''
如果标题中发现含有keyword,则过滤掉,并break.
'''
is_filtered = True
break
return is_filtered,keyword
def is_this_english(word):
'''
如果一个word中只包含
'''
if re.findall('[a-zA-Z]{2,}',word,re.I):
return True
else:
return False
def crawler():
while not work.empty():
word = work.get_nowait()
'''
查询要过滤的关键词是否在关键词列表中,如果不在关键词列表中,则添加到输出文件中。
'''
b,k = to_be_filtered(word,keywords)
if not is_this_english(word):
'''
如果这是一个英文字则不加入其中。
'''
if (not b):
'''
使用关键词进行过滤,如果不包含关键词,则加入结果中...
'''
keywords_filtered.append(word)
else:
print(word,'=> 在关键词中,因此过滤掉,关键词为:',k)
else:
print(word,'=> 不在关键词中,因为是英文单词')
if __name__=='__main__':
#将过滤词库读取到keywords中。
f = open(keywords_filename,'r',encoding='utf-8')
keywords = [line.strip() for line in f.readlines()]
f.close()
print('关键词个数:',len(keywords))
#读取待过滤的词库
f = open(input_filename,'r',encoding='utf-8')
words_to_filter = [line.strip() for line in f.readlines()]
f.close()
print('待过滤的标题个数:',len(words_to_filter))
print('请耐心等待....')
work = Queue()
#创建队列对象,并赋值给work。
for url in words_to_filter:
#遍历url_list
work.put_nowait(url)
keywords_filtered = []
tasks_list = [ ]
#创建空的任务列表
for x in range(100):
#相当于创建了100个任务
task = gevent.spawn(crawler)
#用gevent.spawn()函数创建执行crawler()函数的任务。
tasks_list.append(task)
#往任务列表添加任务。
gevent.joinall(tasks_list)
#用gevent.joinall方法,执行任务列表里的所有任务。
#输出到目标文件中...
print('输出标题个数:',len(keywords_filtered))
output_text = '\n'.join(keywords_filtered)
f = open(output_filename,'w',encoding='utf-8')
f.write(output_text)
f.close()
end = time.time()
print(end-start)
print('程序运行结束...')
|