python自动化CSDN评论盖楼赢大奖小工具

wylc123 1年前 ⋅ 3224 阅读

参加CSDN举办的有奖评论活动,20倍数评论楼层的有效评论,奖励一个带CSDN,Intel标志的背包,最佳评论奖励Intel 2代神经棒或机械键盘

1.chrome浏览器手机调试模式

#coding=utf-8
#!文件类型: python
#!创建时间: 2018/11/12 10:37
#!作者: SongBin
#!文件名称: csdnDownloadPl.py
#!设置手机调试模式,评论CSDN盖楼讨论赢大奖
import re

from selenium import webdriver
import time
import random
import linecache
# browser=webdriver.Chrome()#用google会报错,暂时不知道为什么
from selenium.common.exceptions import NoAlertPresentException, UnexpectedAlertPresentException
import logging

from selenium.webdriver.chrome.options import Options

from utils.MySqlConn import MyPymysqlPool

logging.basicConfig(level=logging.INFO,#控制台打印的日志级别
                    filename='C:\softs\csdn_pl\pl.log',
                    filemode='a',##模式,有w和a,w就是写模式,每次都会重新写日志,覆盖之前的日志
                    #a是追加模式,默认如果不写的话,就是追加模式
                    format=
                    '%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s'
                    #日志格式
                    )
chrome_options = Options()
#设置user agent为iphone6plus
mobile_emulation = {"deviceName":"iPhone 6"}
chrome_options.add_experimental_option("mobileEmulation", mobile_emulation)
chrome_options.add_argument("--headless")

while 1==1:
    try:
        browser = webdriver.Chrome(executable_path='C:\\softs\\chrome\\chromedriver.exe',
                                   options=chrome_options)  # .Firefox()  # .PhantomJS(desired_capabilities=dcap) # executable_path='/usr/local/bin/phantomjs'  phantomjs没有设置环境变量时可加参数

        while 1==1:
            try:
                # 转到的评论页面
                browser.get('https://bbs.csdn.net/topics/392758183')
                # 获取我下载过的内容的评价链接
                time.sleep(5)
                browser.find_element_by_id("read_more_btn").click()
                time.sleep(1)
                # 获取页面内容
                es = browser.find_elements_by_css_selector("[class='bbs_pl']")
                hgcount = 0
                for esx in es:
                    textStr = esx.text
                    # print(textStr)
                    # 是否合格
                    wtcount = len(re.findall(r"#问题[一|二|三|四|五|六|七]#",textStr))
                    if wtcount>0:
                        mysql = MyPymysqlPool("notdbMysql")
                        sql = "select * from pl where pl = %s"
                        flag = mysql.getOne(sql, textStr)
                        if flag == False:
                            insql = "insert into pl(pl) values (%s)"
                            vals = (textStr)
                            newID = mysql.insertOneGetId(insql, vals)
                            mysql.dispose()
                mysql = MyPymysqlPool("notdbMysql")
                sqlC = "select count(*) num from pl"
                numDic = mysql.getTabCount(sqlC)
                mysql.dispose()
                hgcount = numDic["num"]
                print('合格评论数:',hgcount)
                logging.error('合格评论数:'+str(hgcount))
                strlists = [
                            "#问题四#可以利用基于英特尔至强可扩展处理器平台的大内存容量和高性能计算能力。高内涵筛选是药物发现的重要工具。这是一项极具挑战性且耗时的工作,需要从图像中提取成千上万的预定义特征。今天,在我们以数据为中心的创新峰会上,我们描述了诺华如何与英特尔合作,利用深度学习来加快细胞培养显微图像的分析,以研究各种治疗的效果。由于使用了完整的显微镜图像,本评估中的图像尺寸比普通深度学习基准中使用的图像尺寸大得多。例如,比 ImageNet数据集中的图像尺寸大超出 26 倍。尽管由于训练模型中的参数数量以及所用图像的尺寸和数量,提出了计算要求和内存需求,但团队使用了英特尔至强金牌 6148 处理器、英特尔Omni-Path 架构和 TensorFlow 1.7.0 搭建的系统进行训练,因而训练时间节省了 20 倍1。英特尔硬件可支持卓越的内存容量,支持每秒超过 120 张 390 万像素的图像。正如此例和其他例子所展示的那样,CPU 架构更适合满足很多现实世界深度学习应用的需求。此外,源源不断的投资正在涌入,旨在增强基于英特尔至强可扩展处理器的平台性能,随着平台发布,很多热门框架的推理速度都有提升。而随着我们新一代英特尔至强处理器(代号为 Cascade Lake)的推出,推理速度更提升至 11 倍。未来对英特尔Optane DC 持久内存的平台支持,将扩展 CPU 附近的内存容量,以支持对更大数据集的训练。  在创新峰会上,我们还宣布了英特尔DL Boost,这是一套旨在加快人工智能深入学习速度的处理器技术。Cascade Lake 还将采用矢量神经网络指令集 (VNNI),该指令集在一条指令中完成了之前采用的三条指令。Cooper Lake 是继 Cascade Lake 后的英特尔至强可扩展处理器,将为英特尔DL Boost 增加对 bfloat 16 的支持,进一步提升了训练性能。",
                            "#问题五#没有必要,因特尔已经有一套完整的产品组合。除了不断优化CPU在AI方面的算力,英特尔也不断向外界传达一个信息:英特尔是唯一能够提供完整的人工智能解决方案组合的公司。这句话如何理解?通俗地说,完整的解决方案就是完整的产品组合,英特尔的AI产品组合包括至强可扩展处理器、英特尔Nervana神经网络处理器和FPGA、网络以及存储技术等;针对深度学习/机器学习而优化的基于英特尔架构的数学函数库(Intel MKL)以及数据分析加速库(Intel DAAL)等;支持和优化开源深度学习框架如Spark、Caffe、Theano以及Neon等;构建以英特尔Movidius和Saffron为代表的平台以推动前后端协同人工智能发展。“AI不仅仅是模型的训练,还有推理,行业的应用落地需要更庞大的技术支撑。”杨旭解释道,同时也回应了开发者的疑问。在英特尔人工智能大会的一周后,英伟达在11月21日举办了GPU技术大会,开场时进行了一个RTX技术(实时光线追踪技术)的演示,让游戏画面中的光影质感更加惊艳,非常fancy(华丽)。相比之下,英特尔更加务实,拿出了一个个产品说话。比较受关注的NNP领域,Naveen Rao宣布了更新情况,包括将于2019年面市的云端AI芯片NNP“Spring Crest”以及神经计算棒二代(简称英特尔NCS 2)。据英特尔介绍,利用计算棒可以在网络边缘构建智能的AI算法和计算机视觉原型设备,使用非常简单且易于开发,可以帮助开发者进入实际应用的量产阶段。NCS 2可以在标准USB 3.0 端口上运行,只要一台笔记本电脑,不需要额外的硬件,开发者仅需数分钟就可以让他们的 AI 和计算机视觉应用程序运转起来,无论开发者研发的时智能相机、无人机、工业机器人还是智能家居设备。",
                            "#问题六#Intel开源了基于Apache Spark的分布式深度学习框架BigDL。BigDL借助现有的Spark集群来运行深度学习计算,并简化存储在Hadoop中的大数据集的数据加载。BigDL适用的应用场景主要为以下三种:直接在Hadoop/Spark框架下使用深度学习进行大数据分析(即将数据存储在HDFS、HBase、Hive等数据库上);在Spark程序中/工作流中加入深度学习功能;利用现有的 Hadoop/Spark 集群来运行深度学习程序,然后将代码与其他的应用场景进行动态共享,例如ETL(Extract、Transform、Load,即通常所说的数据抽取)、数据仓库(data warehouse)、功能引擎、经典机器学习、图表分析等。运行于Spark集群上  Spark是被工业界验证过的,并有很多部署的大数据平台。BigDL针对那些想要将机器学习应用到已有Spark或Hadoop集群的人。对于直接支持已有Spark集群的深度学习开源库,BigDL是唯一的一个框架。BigDL可以直接运行在已有Spark集群之上,和Spark RDD, DataFrame/DataSet直接接口,不需要额外的集群数据加载,从而大大提高从数据抽取到深度学习建模的开发运行效率。用户不需要对他们的集群做任何改动,就可以直接运行BigDL。BigDL可以和其它的Spark的workload一起运行,非常方便的进行集成。BigDL库支持Spark 1.5、1.6和2.0版本。BigDL库中有把Spark RDDs转换为BigDL DataSet的方法,并且可以直接与Spark ML Pipelines一起使用。BigDL是基于Apache Spark的分布式深度学习框架,借助现有的Spark集群来运行深度学习计算,并简化存储在Hadoop中的大数据集的数据加载。1.1丰富的深度学习支持。模拟Torch之后,BigDL为深入学习提供全面支持,包括数字计算(通过Tensor)和高级神经网络 ; 此外,用户可以使用BigDL将预先训练好的Caffe或Torch模型加载到Spark程序中。1.2极高的性能。为了实现高性能,BigDL在每个Spark任务中使用英特尔MKL和多线程编程。因此,在单节点Xeon(即与主流GPU 相当)上,它比开箱即用开源Caffe,Torch或TensorFlow快了数量级。1.2有效地横向扩展。BigDL可以通过利用Apache Spark(快速分布式数据处理框架),以及高效实施同步SGD和全面减少Spark的通信,从而有效地扩展到“大数据规模”上的数据分析2.为了满足什么应用场景2.1直接在Hadoop/Spark框架下使用深度学习进行大数据分析(即将数据存储在HDFS、HBase、Hive等数据库上);2.2在Spark程序中/工作流中加入深度学习功能;2.3利用现有的 Hadoop/Spark 集群来运行深度学习程序,然后将代码与其他的应用场景进行动态共享,例如ETL(Extract、Transform、Load,即通常所说的数据抽取)、数据仓库(data warehouse)、功能引擎、经典机器学习、图表分析等。3.核心技术点是那些BigDL的API是参考torch设计的,为用户提供几个模块:Module: 构建神经网络的基本组件,目前提供100+的module,覆盖了主流的神经网络模型。Criterion:机器学习里面的目标函数,提供了十几个,常用的也都包含了。Optimizer:分布式模型训练。包括常用的训练算法(SGD,Adagrad),data partition的分布式训练。4.同类对比速度对比:BigDL目前的测试结果是基于单节点Xeon服务器的(即,与主流GPU相当的CPU),在Xeon上的结果表明,比开箱即用的开源Caffe,Torch或TensorFlow速度上有“数量级”的提升,最高可达到48倍的提升。而且能够扩展到数十个Xeon服务器语言对比:Caffe和Torch主要使用C++架构,bigDL主要使用Scala开发对GPU的支持:caffe和Torch对GPU有较好的支持,但不同版本接口不兼容,BigDL不支持5.优势劣势 优势:针对每个Spark task使用了多线程编程。BigDL使用英特尔数学内核库(Intel MKL)来得到最高性能要求使用BigDL,由caffe和torch创建的模型可以加载到Spark程序并运行。Spark还允许跨集群的高效扩展。劣势:对机器要求高 jdk7上运行性能差 在CentOS 6和7上,要将最大用户进程增加到更大的值(例如514585); 否则,可能会看到错误,如“无法创建新的本机线程”。 训练和验证的数据会加载到内存,挤占内存6.发展前景BigDL 是基于Spark的深度学习库,对大数据的实现有着非常好的契合度,也有着比较全面的API,非常适合直接在Hadoop/Spark框架下使用深度学习进行大数据分析。但与其他深度学习框架相比,开源时间较短,发展不成熟,对GPU并没有良好的支持,是intel为了提高自家处理器的竞争能力而设计的,如果能整合加入对GPU的支持,发展前景将会很好。",
                            "#问题七#英特尔在工具、硬件和社区三个方面的专注,将软硬结合,能够去解决AI的复杂挑战,帮助开发者轻松实现从云端到终端侧的跨平台部署,更快地构建端到端的深度学习应用。一、工具:在工具层面,英特尔加速AI发展,持续优化提升性能,助力更快、更便捷的AI部署。 1. MKL-DNN英特尔人工智能部门数据科学部主任刘茵茵介绍了第一款工具——MKL-DNN。它是英特尔的开源性能库,能为当今的深度学习软件框架提供高度优化的内核,帮助开发人员发挥出英特尔硬件的最大性能。 2. nGraphnGraph是一种跨所有英特尔所有硬件的统一中间层编译器。不仅可为开发者提供高灵活性和兼容性,降低开发难度,而且能提升开发效率。它可以改善硬件互操作性,让框架更灵活,还能大大提升性能。. BigDL它是英特尔开发的分布式深度学习库,运行在现有的 Spark 集群之上,可以加快对大型数据集的深入学习,同时支持Scala和Python。 4. OpenVINO是一款软件工具包,专为在边缘部署深度神经网络而设计,可以快速优化和压缩经过训练的视觉模型,并将其部署在英特尔硬件和加速器上。应用深度学习框架时,关键性能会获得重大提升,且无需大幅调整当前的部署方式。、硬件英特尔公司全球副总裁兼人工智能产品事业部总经理Naveen Rao称,“AI并非‘万金油’,从通用到专用,从毫瓦到百瓦,我们提供广泛的方案组合。”他表示,今天大多数的人工智能推理运行在至强处理器上,它为数据中心提供能量。1. Cascade Lake这是英特尔将要推出的新款至强可扩展处理器,将支持英特尔傲腾数据中心级持久内存以及全新的AI功能——英特尔 DL Boost。这种人工智能加速技术将加速深度学习推理工作负载,图像识别能力比当前至强可扩展处理器的性能得到大大提升。据悉,Cascade Lake至强可扩展处理器计划明年发展。. 英特尔Movidius VPU英特尔还推出了Movidius VPU,或被称为视觉处理单元,它能帮助用户在边缘部署深度神经网络和计算机视觉,配备原生FP16和定点8位支持,功耗仅为1W,4TOPS,其中1TOPS DNN计算,适用于家庭、安防监控、无人机等诸多场景。3. 第二代神经计算棒在本次大会,英特尔宣布推出第二代神经计算棒,简称“英特尔NCS 2”。 它配备英特尔Movidius Myriad X视觉处理单元,支持英特尔OpenVINO工具包,可以让开发者拥有更大的灵活性。并且它支持深度神经网络测试、调整和原型制作,可以帮助开发者进入实际应用的量产阶段。大小犹如普通U盘,AI开发者利用该产品可以轻松地将计算机视觉和人工智能部署到物联网和边缘设备原型上。 4. Nervana神经网络处理器(NNP)Nervana目标是实现高利用率和模型并行性,该系列产品利用了人工智能深度学习专用的计算特性,比如密集矩阵乘法和用于并行计算的定制互联。据悉,英特尔Nervana NNPL-1000将于2019年推出。 三、社区据悉,英特尔通过开源工具与社区建立联系,其提供的开源库可以为研究或应用提供合作平台。目前,它们针对开发者开源了一些产品和工具:第一个开源了NLP架构;第二个开源了RL Coach;第三个是神经网络压缩包Distiller。些开源库都可以通过Github进行下载。"
                            ]
                if (hgcount+1) % 20 == 0:
                    print(hgcount, '是20的倍数的前三条,开始写7条!')
                    logging.error(str(hgcount) + '是20的倍数的前三条,开始写7条!')
                    browser.get('https://passport.csdn.net/account/login')
                    browser.find_element_by_class_name("tab-two").click()
                    time.sleep(1)
                    # browser.find_element_by_id('all').send_keys('') #账号
                    browser.find_element_by_id('all').send_keys('') #账号
                    # time.sleep(1)
                    # browser.find_element_by_id('password-number').send_keys('') #密码
                    browser.find_element_by_id('password-number').send_keys('') #密码
                    time.sleep(1)
                    browser.find_element_by_id('button-submit').click()
                    print("login success!")
                    logging.error("登录成功!")
                    time.sleep(2)
                    fbcount = 1
                    for msg in strlists:
                        # 跳转到评论页
                        # browser.find_element_by_xpath("/html/body/div[2]/div[2]/div[3]/div[4]/span[2]/a").click()
                        browser.get("https://bbs.csdn.net/posts/new?topic_id=392758183")
                        browser.find_element_by_id("post_body").send_keys(msg)
                        browser.find_element_by_name("commit").click()
                        logging.error("发布成功"+str(fbcount)+"次!")
                        fbcount = fbcount+1
                        time.sleep(10)
                else:
                    pass
            except (NoAlertPresentException,UnexpectedAlertPresentException):
                pass
    except Exception as e:
        print("异常信息:"+str(e))
        browser.quit()
        pass

2.PC模式自动登录盖楼

#coding=utf-8
#!文件类型: python
#!创建时间: 2018/11/12 10:37
#!作者: SongBin
#!文件名称: csdnDownloadPl.py
#!PC模式自动登录盖楼
import re

from selenium import webdriver
import time
import random
import linecache
# browser=webdriver.Chrome()#用google会报错,暂时不知道为什么
from selenium.common.exceptions import NoAlertPresentException, UnexpectedAlertPresentException
import logging

from selenium.webdriver.chrome.options import Options

from utils.MySqlConn import MyPymysqlPool

logging.basicConfig(level=logging.INFO,#控制台打印的日志级别
                    filename='C:\softs\csdn_pl\pl.log',
                    filemode='a',##模式,有w和a,w就是写模式,每次都会重新写日志,覆盖之前的日志
                    #a是追加模式,默认如果不写的话,就是追加模式
                    format=
                    '%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s'
                    #日志格式
                    )
chrome_options = Options()
#设置user agent为iphone6plus
# mobile_emulation = {"deviceName":"iPhone 6"}
# chrome_options.add_experimental_option("mobileEmulation", mobile_emulation)
# chrome_options.add_argument("--headless")

while 1==1:
    try:
        browser = webdriver.Chrome(executable_path='C:\\softs\\chrome\\chromedriver.exe',
                                   options=chrome_options)  # .Firefox()  # .PhantomJS(desired_capabilities=dcap) # executable_path='/usr/local/bin/phantomjs'  phantomjs没有设置环境变量时可加参数

        while 1==1:
            try:
                # 转到的评论页面
                browser.get('https://bbs.csdn.net/topics/392758183')
                time.sleep(1)
                pageCountStr = browser.find_element_by_xpath('//*[@id="bbs_title_bar"]/div[2]/div/div/em[1]').text
                pageCount = int(pageCountStr[1])
                baseUrl = 'https://bbs.csdn.net/topics/392758183?page='
                nowUrl = baseUrl+str(pageCount)
                browser.get(nowUrl)
                time.sleep(1)
                try:
                    browser.find_element_by_css_selector("[class='show_topic js_show_topic']").click()
                except Exception as e:
                    pass
                # 获取页面内容
                es = browser.find_elements_by_class_name("post_body")
                hgcount = 0
                for esx in es:
                    textStr = esx.text
                    # print(textStr)
                    # 是否合格
                    wtcount = len(re.findall(r"#问题[一|二|三|四|五|六|七]#",textStr))
                    if wtcount>0:
                        mysql = MyPymysqlPool("notdbMysql")
                        sql = "select * from pl where pl = %s"
                        flag = mysql.getOne(sql, textStr)
                        if flag == False:
                            insql = "insert into pl(pl) values (%s)"
                            vals = (textStr)
                            newID = mysql.insertOneGetId(insql, vals)
                            mysql.dispose()
                mysql = MyPymysqlPool("notdbMysql")
                sqlC = "select count(*) num from pl"
                numDic = mysql.getTabCount(sqlC)
                mysql.dispose()
                hgcount = numDic["num"]
                print('合格评论数:',hgcount)
                logging.error('合格评论数:'+str(hgcount))
                strlists = [
                            "#问题四#可以利用基于英特尔至强可扩展处理器平台的大内存容量和高性能计算能力。高内涵筛选是药物发现的重要工具。这是一项极具挑战性且耗时的工作,需要从图像中提取成千上万的预定义特征。今天,在我们以数据为中心的创新峰会上,我们描述了诺华如何与英特尔合作,利用深度学习来加快细胞培养显微图像的分析,以研究各种治疗的效果。由于使用了完整的显微镜图像,本评估中的图像尺寸比普通深度学习基准中使用的图像尺寸大得多。例如,比 ImageNet数据集中的图像尺寸大超出 26 倍。尽管由于训练模型中的参数数量以及所用图像的尺寸和数量,提出了计算要求和内存需求,但团队使用了英特尔至强金牌 6148 处理器、英特尔Omni-Path 架构和 TensorFlow 1.7.0 搭建的系统进行训练,因而训练时间节省了 20 倍1。英特尔硬件可支持卓越的内存容量,支持每秒超过 120 张 390 万像素的图像。正如此例和其他例子所展示的那样,CPU 架构更适合满足很多现实世界深度学习应用的需求。此外,源源不断的投资正在涌入,旨在增强基于英特尔至强可扩展处理器的平台性能,随着平台发布,很多热门框架的推理速度都有提升。而随着我们新一代英特尔至强处理器(代号为 Cascade Lake)的推出,推理速度更提升至 11 倍。未来对英特尔Optane DC 持久内存的平台支持,将扩展 CPU 附近的内存容量,以支持对更大数据集的训练。  在创新峰会上,我们还宣布了英特尔DL Boost,这是一套旨在加快人工智能深入学习速度的处理器技术。Cascade Lake 还将采用矢量神经网络指令集 (VNNI),该指令集在一条指令中完成了之前采用的三条指令。Cooper Lake 是继 Cascade Lake 后的英特尔至强可扩展处理器,将为英特尔DL Boost 增加对 bfloat 16 的支持,进一步提升了训练性能。",
                            "#问题五#没有必要,因特尔已经有一套完整的产品组合。除了不断优化CPU在AI方面的算力,英特尔也不断向外界传达一个信息:英特尔是唯一能够提供完整的人工智能解决方案组合的公司。这句话如何理解?通俗地说,完整的解决方案就是完整的产品组合,英特尔的AI产品组合包括至强可扩展处理器、英特尔Nervana神经网络处理器和FPGA、网络以及存储技术等;针对深度学习/机器学习而优化的基于英特尔架构的数学函数库(Intel MKL)以及数据分析加速库(Intel DAAL)等;支持和优化开源深度学习框架如Spark、Caffe、Theano以及Neon等;构建以英特尔Movidius和Saffron为代表的平台以推动前后端协同人工智能发展。“AI不仅仅是模型的训练,还有推理,行业的应用落地需要更庞大的技术支撑。”杨旭解释道,同时也回应了开发者的疑问。在英特尔人工智能大会的一周后,英伟达在11月21日举办了GPU技术大会,开场时进行了一个RTX技术(实时光线追踪技术)的演示,让游戏画面中的光影质感更加惊艳,非常fancy(华丽)。相比之下,英特尔更加务实,拿出了一个个产品说话。比较受关注的NNP领域,Naveen Rao宣布了更新情况,包括将于2019年面市的云端AI芯片NNP“Spring Crest”以及神经计算棒二代(简称英特尔NCS 2)。据英特尔介绍,利用计算棒可以在网络边缘构建智能的AI算法和计算机视觉原型设备,使用非常简单且易于开发,可以帮助开发者进入实际应用的量产阶段。NCS 2可以在标准USB 3.0 端口上运行,只要一台笔记本电脑,不需要额外的硬件,开发者仅需数分钟就可以让他们的 AI 和计算机视觉应用程序运转起来,无论开发者研发的时智能相机、无人机、工业机器人还是智能家居设备。",
                            "#问题六#Intel开源了基于Apache Spark的分布式深度学习框架BigDL。BigDL借助现有的Spark集群来运行深度学习计算,并简化存储在Hadoop中的大数据集的数据加载。BigDL适用的应用场景主要为以下三种:直接在Hadoop/Spark框架下使用深度学习进行大数据分析(即将数据存储在HDFS、HBase、Hive等数据库上);在Spark程序中/工作流中加入深度学习功能;利用现有的 Hadoop/Spark 集群来运行深度学习程序,然后将代码与其他的应用场景进行动态共享,例如ETL(Extract、Transform、Load,即通常所说的数据抽取)、数据仓库(data warehouse)、功能引擎、经典机器学习、图表分析等。运行于Spark集群上  Spark是被工业界验证过的,并有很多部署的大数据平台。BigDL针对那些想要将机器学习应用到已有Spark或Hadoop集群的人。对于直接支持已有Spark集群的深度学习开源库,BigDL是唯一的一个框架。BigDL可以直接运行在已有Spark集群之上,和Spark RDD, DataFrame/DataSet直接接口,不需要额外的集群数据加载,从而大大提高从数据抽取到深度学习建模的开发运行效率。用户不需要对他们的集群做任何改动,就可以直接运行BigDL。BigDL可以和其它的Spark的workload一起运行,非常方便的进行集成。BigDL库支持Spark 1.5、1.6和2.0版本。BigDL库中有把Spark RDDs转换为BigDL DataSet的方法,并且可以直接与Spark ML Pipelines一起使用。BigDL是基于Apache Spark的分布式深度学习框架,借助现有的Spark集群来运行深度学习计算,并简化存储在Hadoop中的大数据集的数据加载。1.1丰富的深度学习支持。模拟Torch之后,BigDL为深入学习提供全面支持,包括数字计算(通过Tensor)和高级神经网络 ; 此外,用户可以使用BigDL将预先训练好的Caffe或Torch模型加载到Spark程序中。1.2极高的性能。为了实现高性能,BigDL在每个Spark任务中使用英特尔MKL和多线程编程。因此,在单节点Xeon(即与主流GPU 相当)上,它比开箱即用开源Caffe,Torch或TensorFlow快了数量级。1.2有效地横向扩展。BigDL可以通过利用Apache Spark(快速分布式数据处理框架),以及高效实施同步SGD和全面减少Spark的通信,从而有效地扩展到“大数据规模”上的数据分析2.为了满足什么应用场景2.1直接在Hadoop/Spark框架下使用深度学习进行大数据分析(即将数据存储在HDFS、HBase、Hive等数据库上);2.2在Spark程序中/工作流中加入深度学习功能;2.3利用现有的 Hadoop/Spark 集群来运行深度学习程序,然后将代码与其他的应用场景进行动态共享,例如ETL(Extract、Transform、Load,即通常所说的数据抽取)、数据仓库(data warehouse)、功能引擎、经典机器学习、图表分析等。3.核心技术点是那些BigDL的API是参考torch设计的,为用户提供几个模块:Module: 构建神经网络的基本组件,目前提供100+的module,覆盖了主流的神经网络模型。Criterion:机器学习里面的目标函数,提供了十几个,常用的也都包含了。Optimizer:分布式模型训练。包括常用的训练算法(SGD,Adagrad),data partition的分布式训练。4.同类对比速度对比:BigDL目前的测试结果是基于单节点Xeon服务器的(即,与主流GPU相当的CPU),在Xeon上的结果表明,比开箱即用的开源Caffe,Torch或TensorFlow速度上有“数量级”的提升,最高可达到48倍的提升。而且能够扩展到数十个Xeon服务器语言对比:Caffe和Torch主要使用C++架构,bigDL主要使用Scala开发对GPU的支持:caffe和Torch对GPU有较好的支持,但不同版本接口不兼容,BigDL不支持5.优势劣势 优势:针对每个Spark task使用了多线程编程。BigDL使用英特尔数学内核库(Intel MKL)来得到最高性能要求使用BigDL,由caffe和torch创建的模型可以加载到Spark程序并运行。Spark还允许跨集群的高效扩展。劣势:对机器要求高 jdk7上运行性能差 在CentOS 6和7上,要将最大用户进程增加到更大的值(例如514585); 否则,可能会看到错误,如“无法创建新的本机线程”。 训练和验证的数据会加载到内存,挤占内存6.发展前景BigDL 是基于Spark的深度学习库,对大数据的实现有着非常好的契合度,也有着比较全面的API,非常适合直接在Hadoop/Spark框架下使用深度学习进行大数据分析。但与其他深度学习框架相比,开源时间较短,发展不成熟,对GPU并没有良好的支持,是intel为了提高自家处理器的竞争能力而设计的,如果能整合加入对GPU的支持,发展前景将会很好。",
                            "#问题七#英特尔在工具、硬件和社区三个方面的专注,将软硬结合,能够去解决AI的复杂挑战,帮助开发者轻松实现从云端到终端侧的跨平台部署,更快地构建端到端的深度学习应用。一、工具:在工具层面,英特尔加速AI发展,持续优化提升性能,助力更快、更便捷的AI部署。 1. MKL-DNN英特尔人工智能部门数据科学部主任刘茵茵介绍了第一款工具——MKL-DNN。它是英特尔的开源性能库,能为当今的深度学习软件框架提供高度优化的内核,帮助开发人员发挥出英特尔硬件的最大性能。 2. nGraphnGraph是一种跨所有英特尔所有硬件的统一中间层编译器。不仅可为开发者提供高灵活性和兼容性,降低开发难度,而且能提升开发效率。它可以改善硬件互操作性,让框架更灵活,还能大大提升性能。. BigDL它是英特尔开发的分布式深度学习库,运行在现有的 Spark 集群之上,可以加快对大型数据集的深入学习,同时支持Scala和Python。 4. OpenVINO是一款软件工具包,专为在边缘部署深度神经网络而设计,可以快速优化和压缩经过训练的视觉模型,并将其部署在英特尔硬件和加速器上。应用深度学习框架时,关键性能会获得重大提升,且无需大幅调整当前的部署方式。、硬件英特尔公司全球副总裁兼人工智能产品事业部总经理Naveen Rao称,“AI并非‘万金油’,从通用到专用,从毫瓦到百瓦,我们提供广泛的方案组合。”他表示,今天大多数的人工智能推理运行在至强处理器上,它为数据中心提供能量。1. Cascade Lake这是英特尔将要推出的新款至强可扩展处理器,将支持英特尔傲腾数据中心级持久内存以及全新的AI功能——英特尔 DL Boost。这种人工智能加速技术将加速深度学习推理工作负载,图像识别能力比当前至强可扩展处理器的性能得到大大提升。据悉,Cascade Lake至强可扩展处理器计划明年发展。. 英特尔Movidius VPU英特尔还推出了Movidius VPU,或被称为视觉处理单元,它能帮助用户在边缘部署深度神经网络和计算机视觉,配备原生FP16和定点8位支持,功耗仅为1W,4TOPS,其中1TOPS DNN计算,适用于家庭、安防监控、无人机等诸多场景。3. 第二代神经计算棒在本次大会,英特尔宣布推出第二代神经计算棒,简称“英特尔NCS 2”。 它配备英特尔Movidius Myriad X视觉处理单元,支持英特尔OpenVINO工具包,可以让开发者拥有更大的灵活性。并且它支持深度神经网络测试、调整和原型制作,可以帮助开发者进入实际应用的量产阶段。大小犹如普通U盘,AI开发者利用该产品可以轻松地将计算机视觉和人工智能部署到物联网和边缘设备原型上。 4. Nervana神经网络处理器(NNP)Nervana目标是实现高利用率和模型并行性,该系列产品利用了人工智能深度学习专用的计算特性,比如密集矩阵乘法和用于并行计算的定制互联。据悉,英特尔Nervana NNPL-1000将于2019年推出。 三、社区据悉,英特尔通过开源工具与社区建立联系,其提供的开源库可以为研究或应用提供合作平台。目前,它们针对开发者开源了一些产品和工具:第一个开源了NLP架构;第二个开源了RL Coach;第三个是神经网络压缩包Distiller。些开源库都可以通过Github进行下载。"
                            ]
                if (hgcount+3) % 20 == 0:
                    print(hgcount, '是20的倍数的前三条,开始写7条!')
                    logging.error(str(hgcount) + '是20的倍数的前三条,开始写7条!')
                    browser.get('https://passport.csdn.net/account/login')
                    browser.find_element_by_xpath("/html/body/div[1]/div/div/div/div[2]/div[5]/ul/li[2]/a").click()
                    time.sleep(1)
                    browser.find_element_by_id('all').send_keys('')#账号
                    # browser.find_element_by_id('all').send_keys('')#密码
                    # time.sleep(1)
                    browser.find_element_by_id('password-number').send_keys('')#账号
                    # browser.find_element_by_id('password-number').send_keys('')#密码
                    browser.find_element_by_xpath('/html/body/div[1]/div/div/div/div[2]/div[5]/div/div[6]/div/button').click()
                    time.sleep(1)
                    print("login success!")
                    logging.error("登录成功!")
                    time.sleep(2)
                    fbcount = 1
                    for msg in strlists:
                        # 跳转到评论页
                        # browser.find_element_by_xpath("/html/body/div[2]/div[2]/div[3]/div[4]/span[2]/a").click()
                        browser.get("https://bbs.csdn.net/posts/new?topic_id=392758183")
                        browser.find_element_by_id("post_body").send_keys(msg)
                        browser.find_element_by_name("commit").click()
                        logging.error("发布成功"+str(fbcount)+"次!")
                        fbcount = fbcount+1
                        time.sleep(10)
                else:
                    pass
            except (NoAlertPresentException,UnexpectedAlertPresentException):
                pass
    except Exception as e:
        print("异常信息:"+str(e))
        browser.quit()
        pass

有效评论存mysql数据库,便于统计有效评论数。

python 写Mysql工具类:

MySqlConn.py

#!/usr/bin/env python
#coding=utf-8
#!文件类型: python
#!创建时间: 2018/12/3 16:46
#!作者: SongBin
#!文件名称: MySqlConn.py

import pymysql, os, configparser
from pymysql.cursors import DictCursor
from DBUtils.PooledDB import PooledDB


class Config(object):
    """
    # Config().get_content("user_information")

    配置文件里面的参数
    [notdbMysql]
    host = 192.168.1.101
    port = 3306
    user = root
    password = python123
    """

    def __init__(self, config_filename="C:\\softs\\csdn_pl\\utils\\mysqlConfig.cfg"):
        file_path = os.path.join(os.path.dirname(__file__), config_filename)
        self.cf = configparser.ConfigParser()
        # 读取中文配置文件要加 encoding="utf-8" 或 encoding="utf-8-sig"
        self.cf.read(file_path,encoding="utf-8")

    def get_sections(self):
        return self.cf.sections()

    def get_options(self, section):
        return self.cf.options(section)

    def get_content(self, section):
        result = {}
        for option in self.get_options(section):
            value = self.cf.get(section, option)
            result[option] = int(value) if value.isdigit() else value
        return result


class BasePymysqlPool(object):
    def __init__(self, host, port, user, password, db_name=None):
        self.db_host = host
        self.db_port = int(port)
        self.user = user
        self.password = str(password)
        self.db = db_name
        self.conn = None
        self.cursor = None


class MyPymysqlPool(BasePymysqlPool):
    """
    MYSQL数据库对象,负责产生数据库连接 , 此类中的连接采用连接池实现获取连接对象:conn = Mysql.getConn()
            释放连接对象;conn.close()或del conn
    """
    # 连接池对象
    __pool = None

    def __init__(self, conf_name=None):
        self.conf = Config().get_content(conf_name)
        super(MyPymysqlPool, self).__init__(**self.conf)
        # 数据库构造函数,从连接池中取出连接,并生成操作游标
        self._conn = self.__getConn()
        self._cursor = self._conn.cursor()

    def __getConn(self):
        """
        @summary: 静态方法,从连接池中取出连接
        @return MySQLdb.connection
        """
        if MyPymysqlPool.__pool is None:
            __pool = PooledDB(creator=pymysql,
                              mincached=1,
                              maxcached=20,
                              host=self.db_host,
                              port=self.db_port,
                              user=self.user,
                              passwd=self.password,
                              db=self.db,
                              use_unicode=True,
                              charset="utf8",
                              cursorclass=DictCursor)
        return __pool.connection()

    def getTabCount(self, sql, param=None):
        """
        @summary: 获取表中相关条件下的数据条数
        @param sql:查询SQL,如果有查询条件,请只指定条件列表,并将条件值使用参数[param]传递进来
        @param param: 可选参数,条件列表值(元组/列表)
        @return: result list(字典对象)/boolean 查询到的结果集
        """
        if param is None:
            self._cursor.execute(sql)
        else:
            self._cursor.execute(sql, param)
        count = self._cursor.fetchone()
        return count
    def getAll(self, sql, param=None):
        """
        @summary: 执行查询,并取出所有结果集
        @param sql:查询SQL,如果有查询条件,请只指定条件列表,并将条件值使用参数[param]传递进来
        @param param: 可选参数,条件列表值(元组/列表)
        @return: result list(字典对象)/boolean 查询到的结果集
        """
        if param is None:
            count = self._cursor.execute(sql)
        else:
            count = self._cursor.execute(sql, param)
        if count > 0:
            result = self._cursor.fetchall()
        else:
            result = False
        return result

    def getOne(self, sql, param=None):
        """
        @summary: 执行查询,并取出第一条
        @param sql:查询SQL,如果有查询条件,请只指定条件列表,并将条件值使用参数[param]传递进来
        @param param: 可选参数,条件列表值(元组/列表)
        @return: result list/boolean 查询到的结果集
        """
        if param is None:
            count = self._cursor.execute(sql)
        else:
            count = self._cursor.execute(sql, param)
        if count > 0:
            result = self._cursor.fetchone()
        else:
            result = False
        return result

    def getMany(self, sql, num, param=None):
        """
        @summary: 执行查询,并取出num条结果
        @param sql:查询SQL,如果有查询条件,请只指定条件列表,并将条件值使用参数[param]传递进来
        @param num:取得的结果条数
        @param param: 可选参数,条件列表值(元组/列表)
        @return: result list/boolean 查询到的结果集
        """
        if param is None:
            count = self._cursor.execute(sql)
        else:
            count = self._cursor.execute(sql, param)
        if count > 0:
            result = self._cursor.fetchmany(num)
        else:
            result = False
        return result
    def insertOneGetId(self,sql, param=None):
        """
        @summary: 向数据表插入一条记录,并返回该记录的ID
        @param sql:要插入的SQL格式,使用(%s,%s)
        @param values:要插入的记录数据值 tuple/list
        @return: newId 新插入记录的ID
        """
        self.__query(sql, param)
        # 获取最新自增ID 获取最新自增ID 获取最新自增ID
        newId = self._cursor.lastrowid
        return newId

    def insertMany(self, sql, values):
        """
        @summary: 向数据表插入多条记录
        @param sql:要插入的SQL格式
        @param values:要插入的记录数据tuple(tuple)/list[list]
        @return: count 受影响的行数
        """
        count = self._cursor.executemany(sql, values)
        return count

    def __query(self, sql, param=None):
        if param is None:
            count = self._cursor.execute(sql)
        else:
            count = self._cursor.execute(sql, param)
        return count

    def update(self, sql, param=None):
        """
        @summary: 更新数据表记录
        @param sql: SQL格式及条件,使用(%s,%s)
        @param param: 要更新的  值 tuple/list
        @return: count 受影响的行数
        """
        return self.__query(sql, param)

    def insert(self, sql, param=None):
        """
        @summary: 更新数据表记录
        @param sql: SQL格式及条件,使用(%s,%s)
        @param param: 要更新的  值 tuple/list
        @return: count 受影响的行数
        """
        return self.__query(sql, param)

    def delete(self, sql, param=None):
        """
        @summary: 删除数据表记录
        @param sql: SQL格式及条件,使用(%s,%s)
        @param param: 要删除的条件 值 tuple/list
        @return: count 受影响的行数
        """
        return self.__query(sql, param)

    def begin(self):
        """
        @summary: 开启事务
        """
        self._conn.autocommit(0)

    def end(self, option='commit'):
        """
        @summary: 结束事务
        """
        if option == 'commit':
            self._conn.commit()
        else:
            self._conn.rollback()

    def dispose(self, isEnd=1):
        """
        @summary: 释放连接池资源
        """
        if isEnd == 1:
            self.end('commit')
        else:
            self.end('rollback')
        self._cursor.close()
        self._conn.close()


if __name__ == '__main__':
    import datetime
    def getNowTime():
        # 格式化字符串
        now_time = datetime.datetime.now()
        now_time_str = datetime.datetime.strftime(now_time, '%Y-%m-%d %H:%M:%S')
        # now_time.strftime('%Y-%m-%d %H:%M:%S')
        return now_time_str

    print(getNowTime())

    mysql = MyPymysqlPool("notdbMysql")

    # sql = "select * from article where title = %s ORDER BY CreateTime DESC"
    # result9 = mysql.getOne(sql, '我们')
    # print(result9['id'])



    # sqlinMany = "insert into mgroup (groupname,Status,CreateUser,Createtime) values (%s,%s,%s,%s)"
    # # vals =[[1,'http://www.songbin.top/1.jpg',getNowTime()],[2,'http://www.songbin.top/2.jpg',getNowTime()]]
    # # vals =[(1,'http://www.songbin.top/3.jpg',getNowTime()),(2,'http://www.songbin.top/3.jpg',getNowTime())]
    # vals = ('美女图片', 1, 'root',getNowTime())
    # result4 = mysql.insertOneGetId(sqlinMany, vals)
    # print(result4)

    # 执行查询,并取出所有结果集

    # sqlAll = "SELECT * FROM article WHERE info like  '%%%s%%'" % '我'
    # result = mysql.getAll(sqlAll)
    # print(result)
    # 执行查询,并取出第一条
    # sqlOne = "select * from article"
    # result2 = mysql.getAll(sqlOne)
    # print(result2)

    # 执行查询,并取出num条结果
    # sqlMany = "select * from article"
    # result3 = mysql.getMany(sqlMany, 1)
    # print(result3)

    # 向数据表插入多条记录

    # sqlinMany = "insert into imglist (aid,imgurl,createtime) values (%s,%s,%s)"
    # # vals =[[1,'http://www.songbin.top/1.jpg',getNowTime()],[2,'http://www.songbin.top/2.jpg',getNowTime()]]
    # # vals =[(1,'http://www.songbin.top/3.jpg',getNowTime()),(2,'http://www.songbin.top/3.jpg',getNowTime())]
    # vals = ((1, 'http://www.songbin.top/4.jpg', getNowTime()), (2, 'http://www.songbin.top/4.jpg', getNowTime()))
    # result4 = mysql.insertMany(sqlinMany, vals)
    # print(result4)
    sqlC = "select count(*) num from pl"
    num = mysql.getTabCount(sqlC)
    print(num["num"])
    # 释放资源
    mysql.dispose()

mysqlConfig.cfg

#db_name可以不设置,实现多数据库连接
[notdbMysql]
host = 127.0.0.1
port = 3306
user = root
password = 123456
db_name = csdn_pl

两个都拿到了吆:》

更多内容请访问:IT源点

相关文章推荐

全部评论: 0

    我有话说: