-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathspider.py
More file actions
68 lines (58 loc) · 1.96 KB
/
Copy pathspider.py
File metadata and controls
68 lines (58 loc) · 1.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#coding=utf-8
__author__ = 'Yiner'
import threading
import sys
from workermanager import WorkManager
from fetcher import Fetch
import time
from logger import Logger
resourcelist = []
urllist = []
class Timer(threading.Thread):
def __init__(self, workmanager,max_size):
super(Timer, self).__init__()
self.workmanager = workmanager
self.start()
def run(self):
while True:
call_quit_flag = False
#workmanager.check_thread()
try:
if not call_quit_flag and len(resourcelist) > max_size:#如果资源数达到 清空任务队列
call_quit_flag = True
self.workmanager.clear_queue()
if call_quit_flag:
break
time.sleep(1)
except Exception,e:
break
def do_work(argv):
url = argv.get('url')
workmanager = argv.get('workmanager')
max_size = argv.get('max_size')
fetcher = Fetch(url)
for resource in fetcher.get_all_resource():
if len(resourcelist) >max_size:
break
if resource not in resourcelist:
resourcelist.append(resource)
logger.get_logger.info(resource)
for href in fetcher.get_all_link():
if len(resourcelist) >max_size:
break
if href not in urllist:
urllist.append(href)
workmanager.add_job(do_work,workmanager=workmanager,url=href,max_size=max_size)
def main(workmanager,site,max_size):
resourcelist.append(site)
urllist.append(site)
workmanager.add_job(do_work,workmanager=workmanager,url=site,max_size=max_size)
time = Timer(workmanager,max_size)
workmanager.start_thread_pool()
workmanager.wait_allcomplete()
if __name__ =='__main__':
site = sys.argv[2]
max_size = int(sys.argv[4])
logger = Logger(logname="spider-log", loglevel=1,callfile='spider')
workmanager = WorkManager()
main(workmanager,site,max_size)