導航:首頁 > 編程語言 > 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相關的資料

熱點內容
解放戰爭pdf王樹增 瀏覽:683
python壓測app介面 瀏覽:951
抖音app怎麼推薦 瀏覽:98
歌庫伺服器能做其他什麼用途 瀏覽: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