博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
爬虫2
阅读量:5239 次
发布时间:2019-06-14

本文共 2497 字,大约阅读时间需要 8 分钟。

scrapMain.py

# -*- coding:utf-8 -*-import osimport xlrdimport Queueimport timefrom Excel_Main import Excel_Mainfrom ScrapData import ScrapDatafrom multiThread import MyThreadfrom write2Excel import writeRatioDateSHARE_Q = Queue.Queue()  # 构造一个不限制大小的的队列DATA_SET = set()         # 数据集合_WORKER_THREAD_NUM = 4   # 设置线程的个数def handleExcel(fileUrl='Excel.xlsx'):    ''' 将原始 Excel.xlsx 转化为: Intelligent_analysis.xlsx        Args:             file: 待转化的Excel    '''    excel = Excel_Main()    assert os.path.exists(fileUrl)    excel.handle(fileUrl)    print("Creat \'Intelligent_analysis.xlsx\' successfully!")def getLinks():    ''' 获取 Intelligent_analysis.xlsx 内的链接        Returns:            tcIndex_link_set: (index, link)    '''    workBook = xlrd.open_workbook("Intelligent_analysis.xlsx")    workSheet = workBook.sheets()[0]    # 链接(log trace)位于 L 列    tcIndex_link_set = zip(workSheet.col_values(0), workSheet.col_values(11))    print("Get links from \'Intelligent_analysis.xlsx\'!")    print(len(tcIndex_link_set))    del tcIndex_link_set[0]    return tcIndex_link_setdef worker() :    """    主要用来写工作逻辑, 只要队列不空持续处理    队列为空时, 检查队列, 由于Queue中已经包含了wait,    notify和锁, 所以不需要在取任务或者放任务的时候加锁解锁    """    global SHARE_Q    global DATA_SET    while not SHARE_Q.empty():        start = time.time()        tcIndex_link_set = SHARE_Q.get() #获得任务                scrapData = ScrapData()        tcIndex_ratio_set = scrapData.getPassRation(tcIndex_link_set)        DATA_SET.add(tcIndex_ratio_set)        end = time.time()        print("<<<<<<<<<<<<<<<<<<<<<<=================>>>>>>>>>>>>>>>>>>>>>>")        print("One job Done! PassRatio: %s | Used time: %s | TotalItem: %i" % (tcIndex_ratio_set, (end-start), len(DATA_SET)))                SHARE_Q.task_done() def main() :        global SHARE_Q    threads = []    # 预处理    handleExcel()    tcIndex_link_set = getLinks()    #向队列中放入任务, 真正使用时, 应该设置为可持续的放入任务    for job in tcIndex_link_set:        SHARE_Q.put(job)        #开启_WORKER_THREAD_NUM个线程    for i in xrange(_WORKER_THREAD_NUM):        thread = MyThread(worker)        thread.start()  #线程开始处理任务        threads.append(thread)    # for thread in threads :    #     thread.join()    #等待所有任务完成    SHARE_Q.join()    # 写入Excel.xlsx    writeRatioDate(DATA_SET, hightlightNum=5)if __name__ == '__main__':    startTime = time.time()    main()    print("Append PassRatio successfully!")    endTime = time.time()    print("Totally used time: %s" % (endTime-startTime))

 

转载于:https://www.cnblogs.com/charlieLeo/p/9540316.html

你可能感兴趣的文章
UIImage 和 iOS 图片压缩UIImage / UIImageVIew
查看>>
疯狂JAVA16课之对象与内存控制
查看>>
django ORM创建数据库方法
查看>>
php7 新特性整理
查看>>
RabbitMQ、Redis、Memcache、SQLAlchemy
查看>>
知识不是来炫耀的,而是来分享的-----现在的人们却…似乎开始变味了…
查看>>
口胡:[HNOI2011]数学作业
查看>>
数据库锁机制及乐观锁,悲观锁的并发控制
查看>>
03 线程池
查看>>
手机验证码执行流程
查看>>
设计模式课程 设计模式精讲 2-2 UML类图讲解
查看>>
Silverlight 的菜单控件。(不是 Toolkit的)
查看>>
初识lua
查看>>
我是插件狂人,jDuang,jValidator,jModal,jGallery
查看>>
jquery的contains方法
查看>>
linux后台运行和关闭SSH运行,查看后台任务
查看>>
cookies相关概念
查看>>
CAN总线波形中ACK位电平为什么会偏高?
查看>>
MyBatis课程2
查看>>
桥接模式-Bridge(Java实现)
查看>>