Python 爬取网页上的图片 以及hbase数据库中图片的读写

背景:根据图片网址爬取图片,使用python实现

预习:Hbase数据库中是列族,可以根据列族:列名设置自己储存的列信息,列名可以自由添加和设置,灵活度很高

1、使用urllib 保存到本地或者其他地址(数据库暂时还没有尝试)

import urllib
urllib.request.urlretrieve(imgurl, 'tmp.jpg')

2、使用 opencv+urllib+numpy 比较复杂,但是可以转换为矩阵表示的图片变量,进行操作

from bs4 import BeautifulSoup
from urllib.request import urlopen
import requests
import urllib
from cv2 import *
import numpy as np

urlText=readHtmlsoup(url)
div=urlText.find('li',{'data-title':'户型图(1/1)'})
img=div.find('img')
imgurl=img.attrs['imglazyload-src']
imgname=img.attrs['alt']
print(imgname,imgurl)
#urllib.request.urlretrieve(imgurl, 'tmp.jpg')#url数据恢复 直接保存
resp = urlopen(imgurl)
image = np.asarray(bytearray(resp.read()), dtype="uint8")#转换二进制数组
image = imdecode(image, IMREAD_COLOR)#彩色图进行解码 自动转化为合适的size RGB 图
imshow("image", image)#显示验证
waitKey(0)

3、将网页上的图片存储到hbase数据库并读取下载到本地

python环境中 利用pip install *** 安装 thrift hbase-thrift  happybase 三个工具包


import  time
#liyong code test 向hbase数据库中写入数据
IMAGE_URL = "image url"
import requests
r = requests.get(IMAGE_URL)
import happybase
connection = happybase.Connection('hostip', table_prefix=b'DBname',table_prefix_separator=b':')#其中的b表示二进制数据,整个表都是二进制存储
connection.open()
table = connection.table(bytes("tablename", encoding = "utf8"))
attribs = {}
attribs['picture:value'] = r.content #picture是列族名,value是可以自定义的列名 同一个表中的不同数据都可以任意添加
imagename='zxtest'
#info={'modelid':'001','imagename':imagename,'posttime':time.strftime('%Y-%m-%d #%H:%M:%S',time.localtime(time.time()))}#info是第二个列名 这个必须是str type 
attribs['info:modelid']='001'
attribs['info:modelname']=modelname
rowkey='test'#数据的唯一标识,类似sql中的主键
table.put(row=bytes(rowkey, encoding = "utf8"),data=attribs) #添加一条数据
#table.put(b'zxrtest',attribs)

#从hbase数据库中读取数据都本地
import happybase
connection = happybase.Connection('hostip', table_prefix=b'DBname',table_prefix_separator=b':')#连接数据库
connection.open()
table = connection.table(bytes("tablename", encoding = "utf8"))
r = table.row(b'zxtest') #参数就是row key
rs=table.scan()#扫描表中的数据 也可以加参数限制
for key,v in rs:
    print(key,v)
with open('ttt.jpg','wb') as f:
    f.write(r[b'picture:value'])#和列名对应

4、hbase 的其他常用操作(python)

下面的table均是已经连接hbase成功的表对象

rows=table.rows([b'test', b'test1', b'zxrtest']),获取某个rowkey对应的数据,括号中是rowkey list

table.delete(rowkeyname)删除rowkeyname对应的数据,一次只能删除一个

table.delete(rowkeyname,columns=[列族:列名1,列族:列名2])删除其中的一列或者几列

 

初步学习,如有错误,欢迎留言指出~

你可能感兴趣的:(Python,数据库)