栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python分布式通用爬虫(5)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python分布式通用爬虫(5)

Python分布式通用爬虫(5):将信息存入数据库
  • 划分.py文件部分
    • 将信息存入数据库
      • 代码展示


如有不同意见或者其他建议,欢迎前来讨论。


划分.py文件部分

该分布式爬虫主要分为五个部分:(1)执行文件(程序的开端)、(2)获取xpath信息、(3)获取所需内容、(4)时间处理、(5)数据入库

我们想要获取某些网站的信息可以通过下载网站内容、复制文字、利用程序获取内容等等方法。现在,我们如果只想要一部分内容,而不是所有的信息,就可以通过程序去获取相应的部分。这个时候我们可以使用的编程语言就有C、C++、JAVA、Python等等。由于Python使用起来比较便捷,我们本次使用的编程语言为Python。我们使用的工具有PyCharm、Oracle11G等等。


将信息存入数据库

万事俱备只欠东风啦,现在我们已经获取了所有我们想要的数据,最后只需要将这些数据添加进数据库即可。


代码展示

下面展示一些 将信息存入数据库代码片。
当然,我们在存入数据时,并不想要重复的数据,所以这里我们会在数据库里加一张URL查重表。
第一个函数是用来对URL进行哈希md5加密的。

def encrypt_url(bh):
    hs = hashlib.md5()
    hs.update(bh.encode('utf-8'))
    return hs.hexdigest()

在查重表里如果没有发现加密后的url,就可以放心大胆的存数据了。
由于有一些内容会比较长,不能直接存入数据库,这个时候,我们就使用一个to_clob('{}')的SQL语句,可以一直在后边添加。
如果信息存入成功,我们会把加密之后的url也存入相应的查重表里,方便以后进行查重使用。

def insert_database(items):
    cnn = cx_Oracle.connect('库名/密码@ip:1521/ORCL', encoding='utf-8')
    cursor = cnn.cursor()
    YQBH = uuid.uuid1()  # 随机生成一个通用的唯一识别码
    YQURL = items["url"]
    YQBT = items["title"].replace(''', '‘').replace('"', '“').strip()
    YQNR = items["content"].replace(''', '‘').replace('"', '“').strip()
    ZQWZ = items['l']
    SYBZ = '0'
    YQLY = items['l']
    now_time = datetime.now()
    if now_time > items["publish_time"]:
        FBSJ = items["publish_time"]
    else:
        FBSJ = datetime.combine(now_time.date(), datetime.min.time())
    LXDM = items['d']
    CLBZ = '00000000000000000000'
    YQLB = '0'
    GJDM = items['g']
    JZ = items['author']
    YZDM = items['y']
    YWBZDM = items['yb']
    URLID = encrypt_url(YQURL)
    cursor.execute("select * from YD_URL where URL='{}'".format(URLID))
    exit_url = cursor.fetchall()
    if len(exit_url) == 0 and YQNR != '':
        if len(YQNR) <= 900:
            cursor.execute("insert into YD_YQXX(YQBH,YQURL,YQBT,YQNR,ZQWZ,SYBZ,YQLY,YZDM,LXDM,CLBZ,FBSJ,YQLB,GJDM,JZ,YWBZDM) VALUES ('{}','{}','{}','{}','{}','{}','{}','{}','{}','{}',to_date('{}', 'yyyy-mm--dd hh24:mi:ss'),'{}','{}','{}','{}')".format(YQBH, YQURL, YQBT, YQNR, ZQWZ, SYBZ, YQLY, YZDM, LXDM, CLBZ, FBSJ, YQLB, GJDM, JZ, YWBZDM))
            cursor.execute("insert into YD_URL(URL) values ('{}')".format(URLID))
            cnn.commit()
            print("成功存入~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
        elif len(YQNR) <= 1800:
            cursor.execute("insert into YD_YQXX(YQBH,YQURL,YQBT,YQNR,ZQWZ,SYBZ,YQLY,YZDM,LXDM,CLBZ,FBSJ,YQLB,GJDM,JZ,YWBZDM) VALUES ('{}','{}','{}',to_clob('{}')||to_clob('{}'),'{}','{}','{}','{}','{}','{}',to_date('{}', 'yyyy-mm--dd hh24:mi:ss'),'{}','{}','{}','{}')".format(YQBH, YQURL, YQBT, YQNR[:900], YQNR[900:], ZQWZ, SYBZ, YQLY, YZDM, LXDM, CLBZ, FBSJ, YQLB, GJDM, JZ, YWBZDM))
            cursor.execute("insert into YD_URL(URL) values ('{}')".format(URLID))
            cnn.commit()
            print("成功存入~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
    	else:
            print("内容过长,未能入库!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")
            print(str(YQURL) + 'nn')
    else:
        print("之前已经被存过的语句哦~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
    cursor.close()
    cnn.close()
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/314108.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号