喽,大家好啊,这里是雷工笔记,我是雷工。
数据类型比较常见,无论是对程序员,还是电气工程师来说,都再熟悉不过了,这里跟着教程了解一下,主要看跟自己以往在其他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小时内与您取得联系。