python爬取新闻并归数据库_Python 爬取数据并保存到Oracle数据库

环境win7 Python 3.6

工具PyCharm2017

直接命令 pip install cx_Oracle

导入cx_Oracleimportcx_Oracle

1.Python连接数据库 写法有多种 百度很多try:

tns = cx_Oracle.makedsn('localhost','1521','ORABI')

db = cx_Oracle.connect('username','password',tns)

print('连接成功...')

exceptExceptionase:

print(e)

print('连接失败...')

2.建立游标cursor 并执行 查询,建表,插入,删除

创建游标 执行SQL 并提交 关闭游标 关闭连接

建表cr = db.cursor()

sql = ("CREATE TABLE tb_products("

"titles char(100),"

"shops char(30),"

"deals char(20),"

"prices char(10),"

"locations char(50))")

cr.execute(sql)

db.commit()

cr.close()

db.close()

查询数据cr = db.cursor()

sql = 'select*from GB_USERINFO'cr.execute(sql)

list = cr.fetchall()

fori inlist:

print(i)

cr.close()

db.close()

插入数据cr = db.cursor()

sql = ("insert into tb_products(TITLES,SHOPS,DEALS,PRICES,LOCATIONS) VALUES(:1,:2,:3,:4,:5)")

其中这边需要注意 网上大多都是关于写入MYSQL数据库 VALUES后面所带参数为%s 但是这样写Oracle会报

ora-01036: 非法的变量名/编号 错误 所以这边应为 :1 ,:2

result 可接收爬取值传入values后面的参数内cr.execute(sql,result)

db.commit()

其中爬取数据中若带有特殊字符也应处理掉,否则可能会出现转码错误

贴上完整代码 爬取代码参考天善崔庆才大神的# coding=utf-8importcx_Oracle

fromselenium importwebdriver

fromselenium.common.exceptions importTimeoutException

fromselenium.webdriver.common.by importBy

fromselenium.webdriver.support importexpected_conditions asEC

fromselenium.webdriver.support.wait importWebDriverWait

fromconfig import*

fromurllib.parse importquote

frompyquery importPyQuery aspq

browser = webdriver.Chrome()

try:

tns = cx_Oracle.makedsn('localhost','1521','ORABI')

db = cx_Oracle.connect('username','password',tns)

print('连接成功...')

exceptExceptionase:

print(e)

print('连接失败...')

# browser = webdriver.PhantomJS(service_args=SERVICE_ARGS)'''chrome_options = webdriver.ChromeOptions()chrome_options.add_argument('--headless')browser = webdriver.Chrome(chrome_options=chrome_options)'''wait = WebDriverWait(browser,10)

defindex_page(page):

"""抓取索引页:parampage:页码"""print('正在爬取第',page,'页')

try:

url = 'https://s.taobao.com/search?q='+ quote(KEYWORD)

browser.get(url)

ifpage > 1:

input = wait.until(

EC.presence_of_element_located((By.CSS_SELECTOR,'#mainsrp-pager div.form > input')))

submit = wait.until(

EC.element_to_be_clickable((By.CSS_SELECTOR,'#mainsrp-pager div.form > span.btn.J_Submit')))

input.clear()

input.send_keys(page) #send_keys()中k是小写submit.click()

wait.until(

EC.text_to_be_present_in_element((By.CSS_SELECTOR,'#mainsrp-pager li.item.active > span'),str(page)))

wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'.m-itemlist .items .item')))

get_product()

exceptTimeoutException:

index_page(page)

defget_product():

"""抓取产品数据"""html = browser.page_source

doc = pq(html)

items = doc('#mainsrp-itemlist .items .item').items()

foritem initems:

product = (

item.find('.title').text(),item.find('.shop').text(),item.find('.deal-cnt').text(),item.find('.price').text().replace('¥',''),item.find('.location').text()

)

print(product)

save_to_oracle(product)

defsave_to_oracle(result):

"""把抓取的数据写入数据库:paramresult::return:"""cr = db.cursor()

sql = ("insert into tb_products(TITLES,SHOPS,DEALS,PRICES,LOCATIONS) VALUES(:1,:2,:3,:4,:5)")

try:

cr.execute(sql,result)

db.commit()

print('保存成功!')

exceptExceptionase:

print(e)

print('保存失败...')

#创建表defcreate_table():

"""在数据库中创建表tb_products:return:"""cr = db.cursor()

sql = ("CREATE TABLE tb_products(""titleschar(100),""shopschar(30),""dealschar(20),""priceschar(10),""locationschar(50))")

try:

cr.execute(sql)

db.commit()

print('建表成功!')

except:

print('建表失败...')

#查询defselectsql():

"""测试查询表数据:return:"""cr = db.cursor()

sql = 'select*from GB_USERINFO'cr.execute(sql)

list = cr.fetchall()

fori inlist:

print(i)

cr.close()

#defmain():

#create_table()

fori inrange(1,MAX_PAGE + 1):

index_page(i)

db.close()

if__name__ == '__main__':

main()

config.py内代码MAX_PAGE = 100KEYWORD = 'ipad'

5b11a6463082a75f514d38a2fb923cc6.png

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值