import bs4
import requests
import pandas as pd
import cx_Oracle as cx
from datetime import datetime
time=datetime.now().strftime('%Y-%m-%d')#获取当前系统时间 并规定格式
n_url='所需要爬取的网址'# 网址
header_dic={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko'}
respon=requests.get(n_url)#用get解析网址
#print(respon)
#print(respon.text)
soup=bs4.BeautifulSoup(respon.text,'html.parser')#用bs4来解析得到的文本
#print(soup)
div_hq=soup.select('tbody tr')#运用select选择器来找到所要爬取的数据的标签
list1=[]#创建一个列表并把遍历的数据去空格写到列表里
for temp in div_hq:
temp = temp.text.split()#去空格
list1.append(temp)
#print(list1)
temp=pd.DataFrame(list1)#用DF的方法整合表格
temp=temp.fillna('0')#pandas里把所有空值用0替换
#print(temp)
temp.columns=['a','b','c','d']
temp=temp.reindex(columns=['time','a','b','c','d'],fill_value=time)#reindex重新设置列 在最前面插入一列
#print(temp)
conn = cx.connect('ytsj2019/YTsj2019@10.66.152.69:1521/kfzxsjtb') #创建连接
db = conn.cursor()# 获得游标 游标作用,其实和循环差不多,就是你把数据放在游标里面,然后使用游标一行一行的取得数据。最终达到循环处理数据的目的
val=[tuple(i) for i in temp.values]#DF表格的值 遍历并转换成元组 val是这个格式的[(),()]
for j in range(len(temp)):#原数据的长度
#数据太长 做个字符串拼接
sqlstr="insert into 表名(列名1,列名2,列名3,列名4)"
#下面一行要写成Oracle可以执行的语句下面都是Oracle的转换类型的函数
sqlstr+="values (to_date('"+val[j][0]+"','yyyy-mm-dd')"+",'"+str(val[j][1])+"',to_number("+str(val[j][2])+"),to_number("+str(val[j][3])+"))"
print(sqlstr)
db.execute(sqlstr)#逐行写入
conn.commit()#提交
conn.close()#关闭连接
python向Oracle写大量数据
最新推荐文章于 2025-04-09 15:48:38 发布