导航:首页 > 编程语言 > python查询es

python查询es

发布时间:2023-12-05 09:56:53

python自带及pandas、numpy数据结构(一)

1.python自带数据结构:序列(如list)、映射(如字典)、集合(set)。
以下只介绍序列中的list:
创建list:
list1 = []
list1 = [1,2,3,4,5,6,7,8,9] #逗号隔开
list2 = [[1,2],[3,4],[5,6],[7,8]] #list2长度(len(list2))为2,list2[0] = [1,2]
liststring = list(“thisisalist”) #只用于创建字符串行表
索引list:
e = list1[0] #下标从零开始,用中括号
分片list:
es = list1[0:3]
es = list1[0:9:2] #步长在第二个冒号后
list拼接(list1.append(obj)、加运算及乘运算):

list长度:

list每个元素乘一个数值:
list2 = numpy.dot(list2,2)
list类似矩阵相乘(每个元素对应相乘取和):
list3 = numpy.dot(list1,list1)
#要求相乘的两个list长度相同
list3 = numpy.dot(list2,list22)
#要求numpy.shape(list2)和numpy.shape(list22)满足“左行等于右列”的矩阵相乘条件,相乘结果numpy.shape(list3)满足“左列右行”

2.numpy数据结构:

Array:
产生array:
data=np.array([[1, 9, 6], [2, 8, 5], [3, 7, 4]])
data=np.array(list1)
data1 = np.zeros(5) #data1.shape = (5,),5列
data1 = np.eye(5)
索引array:
datacut = data[0,2] #取第零行第二列,此处是6
切片array:
datacut = data[0:2,2] # array([6, 5])
array长度:
data.shape
data.size
np.shape(data)
np.size(data)
len(data)
array拼接:
#括号内也有一个括号(中括号或者小括号)!
d = np.concatenate((data,data))
d = np.concatenate((data,data),axis = 1) #对应行拼接
array加法:逐个相加
array乘法:
d = data data #逐个相乘
d = np.dot(data,data) #矩阵相乘
d = data
3 #每个元素乘3
d = np.dot(data,3) #每个元素乘3
array矩阵运算:
取逆 : np.linalg.inv(data)
转置:data.T
所有元素求和 : np.sum(data)
生成随机数:np.random.normal(loc=0, scale=10, size=None)
生成标准正态分布随机数组:np.random.normal(size=(4,4))
生成二维随机数组:
np.random.multivariate_normal([0,0],np.eye(2))
生成范围在0到1之间的随机矩阵(M,N):
np.random.randint(0,2,(M,N))

Matrix:
创建matrix:
mat1 = np.mat([[1, 2, 3], [4, 5, 6]])
mat1 = np.mat(list)
mat1 = np.mat(data)
matrix是二维的,所有+,-,*都是矩阵操作。
matrix索引和分列:
mat1[0:2,1]
matrix转置:
np.transpose(mat1)
mat1.transpose()
matrix拼接:
np.concatenate([mat1,mat1])
np.concatenate([mat1,mat1],axis = 1)

numpy数据结构总结:对于numpy中的数据结构的操作方法基本相同:
创建:np.mat(list),np.array(list)
矩阵乘:np.dot(x,y)
转置:x.T or np.transpose(x)
拼接:np.concatenate([x,y],axis = 1)
索引:mat[0:1,4],ary[0:1,4]

3.pandas数据结构:
Series:
创建series:
s = pd.Series([[1,2,3],[4,5,6]],index = [‘a’,‘b’])
索引series:
s1 = s[‘b’]
拼接series:
pd.concat([s1,s1],axis = 1) #也可使用s.append(s)

DataFrame:
创建DaraFrame:
df = pd.DataFrame([[1,2,3],[1,2,3]],index = ['a','b'],columns = ['x','y','z'])
df取某一列:
dfc1 =df.x
dfc1 = df[‘x’]
dfc2 = df.iloc[:,0] #用.iloc方括号里是数字而不是column名!
dfc2 = df.iloc[:,0:3]
df取某一行:
dfr1 = df.iloc[0]
df1 = df.iloc[0:2]
df1 = df[0:2] #这种方法只能用于取一个区间
df取某个值:
dfc2 = df.iloc[0,0]
dfc2 = df.iloc[0:2,0:3]

② 如何用Python爬取搜索引擎的结果

我选取的是爬取网络知道的html 作为我的搜索源数据,目前先打算做网页标题的搜索,选用了 Python 的 scrapy 库来对网页进行爬取,爬取网页的标题,url,以及html,用sqlist3来对爬取的数据源进行管理。
爬取的过程是一个深度优先的过程,设定四个起始 url ,然后维护一个数据库,数据库中有两个表,一个 infoLib,其中存储了爬取的主要信息:标题,url ,html;另一个表为urlLib,存储已经爬取的url,是一个辅助表,在我们爬取每个网页前,需要先判断该网页是否已爬过(是否存在urlLib中)。在数据存储的过程中,使用了SQL的少量语法,由于我之前学过 MySQL ,这块处理起来比较驾轻就熟。
深度优先的网页爬取方案是:给定初始 url,爬取这个网页中所有 url,继续对网页中的 url 递归爬取。代码逐段解析在下面,方便自己以后回顾。
1.建一个 scrapy 工程:
关于建工程,可以参看这个scrapy入门教程,通过运行:

[python] view plain
scrapy startproject ***

在当前目录下建一个scrapy 的项目,然后在 spiders 的子目录下建立一个 .py文件,该文件即是爬虫的主要文件,注意:其中该文件的名字不能与该工程的名字相同,否则,之后调用跑这个爬虫的时候将会出现错误,见ImportError。
2.具体写.py文件:

[python] view plain
import scrapy
from scrapy import Request
import sqlite3

class rsSpider(scrapy.spiders.Spider): #该类继承自 scrapy 中的 spider
name = "" #将该爬虫命名为 “知道”,在执行爬虫时对应指令将为: scrapy crawl
#download_delay = 1 #只是用于控制爬虫速度的,1s/次,可以用来对付反爬虫
allowed_domains = ["..com"] #允许爬取的作用域
url_first = 'http://..com/question/' #用于之后解析域名用的短字符串
start_urls = ["http://..com/question/647795152324593805.html", #python
"http://..com/question/23976256.html", #database
"http://..com/question/336615223.html", #C++
"http://..com/question/251232779.html", #operator system
"http://..com/question/137965104.html" #Unix programing
] #定义初始的 url ,有五类知道起始网页

#add database
connDataBase = sqlite3.connect(".db") #连接到数据库“.db”
cDataBase = connDataBase.cursor() #设置定位指针
cDataBase.execute('''''CREATE TABLE IF NOT EXISTS infoLib
(id INTEGER PRIMARY KEY AUTOINCREMENT,name text,url text,html text)''')
#通过定位指针操作数据库,若.db中 infoLib表不存在,则建立该表,其中主键是自增的 id(用于引擎的docId),下一列是文章的标题,然后是url,最后是html

#url dataBase
cDataBase.execute('''''CREATE TABLE IF NOT EXISTS urlLib
(url text PRIMARY KEY)''')
#通过定位指针操作数据库,若.db中urlLib表不存在,则建立该表,其中只存了 url,保存已经爬过的url,之所以再建一个表,是猜测表的主键应该使用哈希表存储的,查询速度较快,此处其实也可以用一个外键将两个表关联起来

2. .py文件中的parse函数:

.py文件中的parse函数将具体处理url返回的 response,进行解析,具体代码中说明:

[python] view plain
def parse(self,response):
pageName = response.xpath('//title/text()').extract()[0] #解析爬取网页中的名称
pageUrl = response.xpath("//head/link").re('href="(.*?)"')[0] #解析爬取网页的 url,并不是直接使用函数获取,那样会夹杂乱码
pageHtml = response.xpath("//html").extract()[0] #获取网页html

# judge whether pageUrl in cUrl
if pageUrl in self.start_urls:
#若当前url 是 start_url 中以一员。进行该判断的原因是,我们对重复的 start_url 中的网址将仍然进行爬取,而对非 start_url 中的曾经爬过的网页将不再爬取
self.cDataBase.execute('SELECT * FROM urlLib WHERE url = (?)',(pageUrl,))
lines = self.cDataBase.fetchall()
if len(lines): #若当前Url已经爬过
pass #则不再在数据库中添加信息,只是由其为跟继续往下爬
else: #否则,将信息爬入数据库
self.cDataBase.execute('INSERT INTO urlLib (url) VALUES (?)',(pageUrl,))
self.cDataBase.execute("INSERT INTO infoLib (name,url,html) VALUES (?,?,?)",(pageName,pageUrl,pageHtml))
else: #此时进入的非 url 网页一定是没有爬取过的(因为深入start_url之后的网页都会先进行判断,在爬取,在下面的for循环中判断)
self.cDataBase.execute('INSERT INTO urlLib (url) VALUES (?)',(pageUrl,))
self.cDataBase.execute("INSERT INTO infoLib (name,url,html) VALUES (?,?,?)",(pageName,pageUrl,pageHtml))

self.connDataBase.commit() #保存数据库的更新

print "-----------------------------------------------" #输出提示信息,没啥用

for sel in response.xpath('//ul/li/a').re('href="(/question/.*?.html)'): #抓出所有该网页的延伸网页,进行判断并对未爬过的网页进行爬取
sel = "http://..com" + sel #解析出延伸网页的url
self.cDataBase.execute('SELECT * FROM urlLib WHERE url = (?)',(sel,)) #判断该网页是否已在数据库中
lines = self.cDataBase.fetchall()
if len(lines) == 0: #若不在,则对其继续进行爬取
yield Request(url = sel, callback=self.parse)

③ python使用mysql查询语句时,怎么实现selecct in方法非固定个数的查询条件

MySQLdb.connect是python 连接MySQL数据库的方法,在Python中 import MySQLdb即可使用,至于connect中的参数很简单:
host:MySQL服务器名
user:数据库使用者
password:用户登录密码
db:操作的数据库名
charset:使用的字符集(一般是gb2312)
cursor = db.cursor() 其实就是用来获得python执行Mysql命令的方法,也就是
我们所说的操作游标
下面cursor.execute则是真正执行MySQL语句,即查询TABLE_PARAMS表的数据。
至于fetchall()则是接收全部的返回结果行 row就是在python中定义的一个变量,用来接收返回结果行的每行数据。同样后面的r也是一个变量,用来接收row中的每个字符,如果写成C的形式就更好理解了
for(string row = ''; row<= cursor.fetchall(): row++)
for(char r = ''; r<= r川郸贬肝撞菲鳖十搏姜ow; r++)
printf("%c", r);
大致就是这么个意思!

④ python中列表的增删改查

关于列表首先需要知道它是一系列按特定顺序排列的元素组成

你可以创建包含字母表中所有字母、数字0至9或所有家庭成员姓名的列表;也可以将任何东西加入列表中,其中的元素之间可以没有任何关系。鉴于列表通常包含多个元素,给列表指定一个表示复的名称是个不错的主意。

以下内容是基于python来做列表的讲解,主要讲的是列表的增删改查,包括哪些函数及例子,本次涉及的函数如下:

在实际的数稿乎据处理场景中,可以通过循环,把每次循环的结果依次添加到列表中,便于我们处理数据。

List(列表) 是 Python 中使用  最频繁  的数据类型,在其他语言中通常叫做  数组

列表有以下特性:

·  专门用于存储一串信息

· 用[ ]定义,数据之间用逗号(,)分隔

·  索引从0开始

列表从0开始,如果超过索引值就会报错:list index out of range

insert(0,8) 在索引为0的位置插入数字8 

append 在列表结尾插入数字8

append 在列表结尾插入新的列表,会出现数据不会依次加上,而是作为一个整体。

extend 在结尾插入别的列表的数据,该函数可以解决添加列表数据的问题

注意使用 append 追加的是将后面的 列表作为一个整体追加到最后 ,而使用 extend 追加的是将里面的 元素依次追加到最后 。

del 列表掘搜[索引]:删除指定索引元素

列表.remove(数据):删除第一个数值

列表.pop():可指定索引删除,不指定会删除最后一个

列表.index(数据):查询给定值的索引,即想要知道元素的位置,如果查询元素有多个相同值只会返回第一个值出现的记录

len(列表):有多少个元素

一个学校,有3个办公室,现在有8位老师等待工位的分配,请编写程序,完成随机的分配,假设每个教室可以容纳任意数量的教师

对列表for遍历出来,找出我们需要的数值。

尽管 Python 的  列表  中可以  存储不同类判敬历型的数据

但是在开发中,更多的应用场景是

· 列表  一般只存储 相同类型 的数据

·  通过  for循环 ,在循环体内部,针对列表中的每一项元素,执行相同的操作

⑤ python读取mysql数据写入ES总结

准备工作: mysql库的安装。
python中mysql库用的是mysql-connector,安装执行如下命令:

第一步: 连接mysql,读取数据。

通过执行sql语句,读取mysql数据。

至此渣陆,获得mysql的原始数据raw_data 。接下来对数据进行预处理,按日期进行埋梁销分组聚合,然后重命名行和列名,得到dataFrame格式的数据。

第二步: 连接ES。
这步没有太多的可解释的地方,就是配置信息。

第三步: ES主键加密
这步的目的是为了保持主键唯一性,防止重复写入。用的方法是md5加密。

第四步: 写入ES
至此,一切的准备工作都做好弯游了,数据也有了,主键加密也做了,就开始写入了。

用main方法执行以上方法:

最后查看一下ES写的是否成功,用查询方法

如果返回以下信息,说明ES里成功插入了数据。

另外,ES删除索引的操作:

阅读全文

与python查询es相关的资料

热点内容
歌库服务器能做其他什么用途 浏览:95
安卓44虚拟机怎么root 浏览:38
程序员瘦身c盘空间 浏览:243
dell服务器温度怎么看 浏览:303
游戏服务器地址是什么 浏览:69
C语言经过编译之后的程序是 浏览:160
编程设计一个简易计算机界面 浏览:516
游戏压缩包损坏 浏览:485
压缩包图标下载 浏览:229
日本解压喜剧 浏览:38
芜湖程序员兼职如何接 浏览:368
句译app怎么用 浏览:342
vs2010编译c怎么用 浏览:104
摩拜单车没app怎么退款 浏览:469
苹果手机下载的app怎么变色了 浏览:903
韵母app怎么写 浏览:603
命令提示符是中文 浏览:167
vsqt编译出的程序版本号 浏览:892
快表服务器如何更改 浏览:688
萨缪尔森微观经济学pdf 浏览:182