嘍,大家好啊,這里是雷工筆記,我是雷工。
數據類型比較常見,無論是對程序員,還是電氣工程師來說,都再熟悉不過了,這里跟著教程了解一下,主要看跟自己以往在其他PLC,C#,組態軟件中應用的有啥不同。
在計算機的世界就像黑客帝國中的超級計算機,其中的人、物其實都是虛擬的數據。
數據類型:用來在計算機中標記程序的運算規則的。
計算機程序可以處理海量的數據,為啥要給數據分類?
1、為了更加充分和高效的應用計算機內存。
2、為了更加方便程序猿合理的使用數據。
JavaScript中的數據類型整體分為兩大類:
1、基本數據類型;
2、引用數據類型(復雜類型);
數字型即我們小學中學到的數字,可以是整數、小數、正數、負數。
數字類型:只要變量的值是純數字,且沒有引號,那么當前變量就是數字類型。
相比其他組態軟件中分16位整型,雙整型,有符號,無符號,浮點數等類型要簡單些。
示例:
let age=20 //整數
let pi=3.14 //小數
在JavaScript語言中正數、負數、小數等統稱為數字類型Number。
注意事項:
1、JavaScript語言屬于弱數據類型,變量到底屬于什么類型,需要等賦值后,才能確定。
2、Java語言屬于強數據類型,例如:int b=4;定義時就確認了,必須是整數。
1、數字類型在程序中可以有許多操作,例如,加+,減-,乘*、除/,等待,經常涉及運算。
運算涉及到算術運算符,也稱作數學運算符,主要包括加、減、乘、除、取余等。
2、說到計算就涉及計算的優先級,在JavaScript中的優先級和小學數學中的算術優先級一樣,都是先乘除,后加減,想改變加括號。
3、NaN代表一個計算錯誤。它是一個不正確的或者一個未定義的數學操作所得到的結果。
示例:
console.log('老師'-2) //NaN
NaN是粘性的。任何對NaN的操作都會返回NaN。
示例:
console.log(NaN +2) //NaN
1、通過單引號(‘’)、雙引號(“”)包裹的數據都叫字符串,單引號和雙引號沒有本質上的區別,推薦使用單引號。
示例:
let myName='雷工筆記' //使用單引號
let name=“雷工” // 使用雙引號
let tel='18712345678' // 看上去是數字,但是是引號包裹了,就是字符串。
let str=‘ ’ // 這種是空字符串
2、注意事項:
2.1、無論單引號或是雙引號必須成對應用;
2.2、單引號/雙引號可以互相嵌套,但是不可以自己嵌套自己;
2.3、必要時可以使用轉義符\,輸出單引號或者雙引號。
3、拼接字符串
使用場景:+運算符,可以實現字符串的拼接。
使用口訣:數字相加,字符相連;
示例:
document.write(‘我是’+‘雷工筆記’) //我是雷工筆記
let myName=‘高啟強’
let work=‘賣魚’
document.write( myName + work) //高啟強賣魚
注意:
只要變量中有一個數據類型是字符串類型,那么在計算的時候遇到加號,則直接拼接字符串;
如果遇到除加號以外的符號,那么計算機先將字符串轉換為對應的數字,然后再計算,
4、模板字符串
4.1、應用場景
拼接字符串和變量
在沒有它之前,要拼接變量比較麻煩
示例:
document.write(‘哈嘍,大家好,我是’+name+‘!今年‘+age+歲’)
4.2、模板字符串語法
● ``(反引號)
●在模板字符串中通過${變量}獲取變量的值。
● 反引號在英文輸入模式下,鍵盤鍵Tab上面那個按鍵(1左邊那個按鍵)
● 內容拼接時,用${}包裹住變量。
示例:
document.write(`哈嘍,大家好,我是${name}!今年${name}歲`)
好像C#中也有類似的應用方法。
表示開關量,是或否時在計算機中對應的是布爾類型。
他有兩個固定的值,True與False,表示真時用true,表示假時用False。
true:代表正確的,條件成立的;
False:代表錯誤的,條件不成立的;
示例:
//雷工筆記有趣嘛?
let isFun=true
console.log(isFun)
7.1、未定義是比較特殊的類型,只有一個值undefined。
7.2、什么情況下出現?
只聲明變量,不賦值的情況下,變量的默認值為undefined,一般很少【直接】為某個變量賦值為undefined。
undefined值本身表示的含義未定義;
示例:
let name // 聲明變量但是未賦值
document.write(name) //輸出undefined
7.3、實例場景:
我們開發中經常聲明一個變量,等待傳送過來的數值。
如果我們不確定這個數據是否有傳遞過來,此時我們可以通過檢測這個變量是不是undefined,來確定是否有數據傳遞過來。
8.1、如果變量的值是null,那么變量的數據類型叫空類型,——對象類型。
JS中的null僅僅是一個表示“無”、“空”或“值未知”的特殊值。
示例:
let name=null
console.log(name) //null
8.2、null和undefined的區別:
● undefined表示木有賦值
● null 表示賦值了,但是內容為空
8.3、null實例場景:
官方說明:把null作為尚未創建的對象。
將來有個變量里面存放的是一個對象,但是對象還沒創建好,可以先給個null
以上為學習JavaScript基礎知識數據類型的相關筆記。
ython-爬取HTML網頁數據
軟件環境
Mac 10.13.1 (17B1003)
Python 2.7.10
VSCode 1.18.1
摘要
本文是練手Demo,主要是使用 Beautiful Soup 來爬取網頁數據。
Beautiful Soup 介紹
Beautiful Soup提供一些簡單的、python式的用來處理導航、搜索、修改分析樹等功能。
Beautiful Soup 官方中文文檔
特點
簡單:它是一個工具箱,通過解析文檔為用戶提供需要抓取的數據
Beautiful Soup自動將輸入文檔轉換為Unicode編碼,輸出文檔轉換為utf-8編碼。
Beautiful Soup 的安裝
安裝 pip (如果需要): sudo easy_install pip
安裝 Beautiful Soup: sudo pip install beautifulsoup4
示例
本示例是抓取一個靠譜的真誠透明的互聯網金融公司的投資列表頁面【點我訪問網頁】,頁面如下圖:
確定獲取數據范圍
本示例是獲取項目列表,打開Chrome的調試欄,找到對應的位置,如下圖:
導包
import sys
import json
import urllib2 as HttpUtils
import urllib as UrlUtils
from bs4 import BeautifulSoup
1
2
3
4
5
獲取頁面信息(分頁)
def gethtml(page):
'獲取指定頁碼的網頁數據'
url='https://box.jimu.com/Project/List'
values={
'category': '',
'rate': '',
'range': '',
'page': page
}
data=UrlUtils.urlencode(values)
# 使用 DebugLog
httphandler=HttpUtils.HTTPHandler(debuglevel=1)
httpshandler=HttpUtils.HTTPSHandler(debuglevel=1)
opener=HttpUtils.build_opener(httphandler, httpshandler)
HttpUtils.install_opener(opener)
request=HttpUtils.Request(url + '?' + data)
request.get_method=lambda: 'GET'
try:
response=HttpUtils.urlopen(request, timeout=10)
except HttpUtils.URLError, err:
if hasattr(err, 'code'):
print err.code
if hasattr(err, 'reason'):
print err.reason
return None
else:
print '======Http request OK======'
return response.read().decode('utf-8')
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
TIPS
urlopen(url, data, timeout)
url: 請求的 URL
data: 訪問 URL 時要傳送的數據
timeout: 超時時間
HttpUtils.build_opener(httphandler, httpshandler)
開啟日志,將會在調試控制臺輸出網絡請求日志,方便調試
必要的 try-catch,以便可以捕獲到網絡異常
解析獲取的數據
創建BeautifulSoup對象
soup=BeautifulSoup(html, 'html.parser')
1
獲取待遍歷的對象
# items 是一個 <listiterator object at 0x10a4b9950> 對象,不是一個list,但是可以循環遍歷所有子節點。
items=soup.find(attrs={'class':'row'}).children
1
2
遍歷子節點,解析并獲取所需參數
projectList=[]
for item in items:
if item=='\n': continue
# 獲取需要的數據
title=item.find(attrs={'class': 'title'}).string.strip()
projectId=item.find(attrs={'class': 'subtitle'}).string.strip()
projectType=item.find(attrs={'class': 'invest-item-subtitle'}).span.string
percent=item.find(attrs={'class': 'percent'})
state='Open'
if percent is None: # 融資已完成
percent='100%'
state='Finished'
totalAmount=item.find(attrs={'class': 'project-info'}).span.string.strip()
investedAmount=totalAmount
else:
percent=percent.string.strip()
state='Open'
decimalList=item.find(attrs={'class': 'decimal-wrap'}).find_all(attrs={'class': 'decimal'})
totalAmount=decimalList[0].string
investedAmount=decimalList[1].string
investState=item.find(attrs={'class': 'invest-item-type'})
if investState !=None:
state=investState.string
profitSpan=item.find(attrs={'class': 'invest-item-rate'}).find(attrs={'class': 'invest-item-profit'})
profit1=profitSpan.next.strip()
profit2=profitSpan.em.string.strip()
profit=profit1 + profit2
term=item.find(attrs={'class': 'invest-item-maturity'}).find(attrs={'class': 'invest-item-profit'}).string.strip()
project={
'title': title,
'projectId': projectId,
'type': projectType,
'percent': percent,
'totalAmount': totalAmount,
'investedAmount': investedAmount,
'profit': profit,
'term': term,
'state': state
}
projectList.append(project)
1
2
6
18
19
20
2
輸出解析結果,如下:
TIPS
解析html代碼,主要是運用了BeautifulSoup的幾大對象,Tag、NavigableString、BeautifulSoup、Comment,可以參考Beautiful Soup 官方中文文檔
解析后的數據,可以持久化,然后做一個提醒投標的程序,不會放過每一筆收益 ^_^
本Pandas教程中,我們將詳細介紹如何使用Pandas read_html方法從HTML中獲取數據。首先,在最簡單的示例中,我們將使用Pandas從一個字符串讀取HTML。其次,我們將通過幾個示例來使用Pandas read_html從Wikipedia表格中獲取數據。在之前的一篇文章(關于Python中的探索性數據分析)中,我們也使用了Pandas從HTML表格中讀取數據。
在開始學習Python和Pandas時,為了進行數據分析和可視化,我們通常從實踐導入數據開始。在之前的文章中,我們已經了解到我們可以直接在Python中輸入值(例如,從Python字典創建Pandas dataframe)。然而,通過從可用的源導入數據來獲取數據當然更為常見。這通常是通過從CSV文件或Excel文件中讀取數據來完成的。例如,要從一個.csv文件導入數據,我們可以使用Pandas read_csv方法。這里有一個如何使用該方法的快速的例子,但一定要查看有關該主題的博客文章以獲得更多信息。
現在,上面的方法只有在我們已經有了合適格式的數據(如csv或JSON)時才有用(請參閱關于如何使用Python和Pandas解析JSON文件的文章)。
我們大多數人會使用Wikipedia來了解我們感興趣的主題信息。此外,這些Wikipedia文章通常包含HTML表格。
要使用pandas在Python中獲得這些表格,我們可以將其剪切并粘貼到一個電子表單中,然后,例如使用read_excel將它們讀入Python。現在,這個任務當然可以用更少的步驟來完成:我們可以通過web抓取來對它進行自動化。一定要查看一下什么是web抓取。
當然,這個Pandas讀取HTML教程將要求我們安裝Pandas及其依賴項。例如,我們可以使用pip來安裝Python包,比如Pandas,或者安裝一個Python發行版(例如,Anaconda、ActivePython)。下面是如何使用pip安裝Pandas: pip install pandas。
注意,如果出現消息說有一個更新版本的pip可用,請查看這篇有關如何升級pip的文章。注意,我們還需要安裝lxml或BeautifulSoup4,當然,這些包也可以使用pip來安裝: pip install lxml。
下面是如何使用Pandas read_html從HTML表格中抓取數據的最簡單的語法:
現在我們已經知道了使用Pandas讀取HTML表格的簡單語法,接下來我們可以查看一些read_html示例。
第一個示例是關于如何使用Pandas read_html方法的,我們將從一個字符串讀取HTML表格。
現在,我們得到的結果不是一個Pandas DataFrame,而是一個Python列表。也就是說,如果我們使用type函數,我們可以看到:
如果我們想得到該表格,我們可以使用列表的第一個索引(0)
在第二個Pandas read_html示例中,我們將從Wikipedia抓取數據。實際上,我們將得到蟒科蛇(也稱為蟒蛇)的HTML表格。
現在,我們得到了一個包含7個表(len(df))的列表。如果我們去Wikipedia頁面,我們可以看到第一個表是右邊的那個。然而,在本例中,我們可能對第二個表更感興趣。
在第三個示例中,我們將從瑞典的covid-19病例中讀取HTML表。這里,我們將使用read_html方法的一些附加參數。具體來說,我們將使用match參數。在此之后,我們還需要清洗數據,最后,我們將進行一些簡單的數據可視化操作。
如上圖所示,該表格的標題為:“瑞典各郡新增COVID-19病例”。現在,我們可以使用match參數并將其作為一個字符串輸入:
通過這種方式,我們只得到這個表,但它仍然是一個dataframes列表。現在,如上圖所示,在底部,我們有三個需要刪除的行。因此,我們要刪除最后三行。
現在,我們將使用Pandas iloc刪除最后3行。注意,我們使用-3作為第二個參數(請確保你查看了這個Panda iloc教程,以獲得更多信息)。最后,我們還創建了這個dataframe的一個副本。
在下一節中,我們將學習如何將多索引列名更改為單個索引。
現在,我們要去掉多索引列。也就是說,我們將把2列索引(名稱)變成唯一的列名。這里,我們將使用DataFrame.columns 和 DataFrame.columns,get_level_values:
最后,正如你在“date”列中所看到的,我們使用Pandas read_html從WikiPedia表格抓取了一些注釋。接下來,我們將使用str.replace方法和一個正則表達式來刪除它們:
現在,我們繼續使用Pandas set_index將日期列變成索引。這樣一來,我們稍后就可以很容易地創建一個時間序列圖。
現在,為了能夠繪制這個時間序列圖,我們需要用0填充缺失的值,并將這些列的數據類型更改為numeric。這里我們也使用了apply方法。最后,我們使用cumsum方法來獲得列中每個新值累加后的值:
在最后一個示例中,我們使用Pandas read_html獲取我們抓取的數據,并創建了一個時間序列圖。現在,我們還導入了matplotlib,這樣我們就可以改變Pandas圖例的標題的位置:
在這個Pandas教程中,我們學習了如何使用Pandas read_html方法從HTML中抓取數據。此外,我們使用來自一篇Wikipedia文章的數據來創建了一個時間序列圖。最后,我們也可以通過參數index_col來使用Pandas read_html將' Date '列設置為索引列。
英文原文:https://www.marsja.se/how-to-use-pandas-read_html-to-scrape-data-from-html-tables
譯者:一瞬
*請認真填寫需求信息,我們會在24小時內與您取得聯系。