- 划分.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()



