Python 使用总结

配置类

配置jupyter notebook

配置远程访问

1.生成配置文件
运行–》输入一下代码

$jupyter notebook --generate-config
#会在home目录下生成一个配置文件夹,.jupyter

在这里插入图片描述

2.使用ipython生成密文

from notebook.auth import passwd
password()
Enter password:###输入密码
Verify password:###再次输入密码

在这里插入图片描述

3.找到/jupyter_notebook_config.py文件

4.修改配置

c.NotebookApp.ip='*'
c.NotebookApp.password = u'sha:ce...刚才复制的那个密文'
c.NotebookApp.open_browser = False
c.NotebookApp.port =8888 #随便指定一个端口

在这里插入图片描述
在这里插入图片描述

爬虫类

关于selenium与webdriver

webdriver文档
selenium中文文档

引用的库

import selenium
from selenium import webdriver

引用webdriver是模拟一个浏览器,不管是IE,Chrome,Fixfox都需要本机安装的浏览器对应的驱动器,
谷歌浏览器要求下载的驱动器与本机安装的谷歌浏览器版本一致
IE驱动器最好下载32位的
IE浏览器驱动器下载地址
谷歌浏览器驱动器下载地址1
谷歌浏览器驱动器下载地址2

可以将.exe文件放在python的安装目录下
注:装python环境时,已经将python的安装目录添加到系统环境变量Path下面了

IE浏览器注意事项

IE浏览器中的保护模式必须设置为一致,例如,都设置为不启用保护模式
设置地址:IE—》设置—》Internet选项—》安全
在这里插入图片描述
ie浏览器的缩放改为100%
地址:IE–》设置–》缩放
在这里插入图片描述

实例化浏览器

###IE
driver = webdriver.Ie("IEDriverserver.exe")
###如果已经把.exe文件放入python安装文件下
driver = webdriver.Ie()
###Chrome
options = webdriver.ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-logging'])###此选项可以禁用显示 "DevTools on ws..."
driver=webdriver.Chrome(executable_path="chromedriver.exe",chrome_options=options)

webdriver常用的方法

driver.get("http://www.baidu.com")#打开百度网页
driver.refresh()###刷新当前标签页
driver.close()##关闭当前标签页
driver.exit()###退出所有浏览器
driver.quit()###关闭浏览器全部标签页
webdriver.find_element_by_id("te").send_keys("test")#查找id=te的文本框并输入值"test"
driver.find_element_by_xpath("").send_keys("")#使用xpath查找元素
xpath详解

XPath,全称 XML Path Language,即 XML 路径语言,它是一门在 XML 文档中查找信息的语言。最初是用来搜寻 XML 文档的,但同样适用于 HTML 文档的搜索。所以在做爬虫时完全可以使用 XPath 做相应的信息抽取。
Xpath官方文档
W3sc教程
首先要安装lxml :

pip install lxml
常用规则
表达式描述
节点名称选择所有此节点下的内容,例如:div
/right-aligned 选择当前节点下的内容,例如:/div
//选择当前节点下的内容,本质与/相同,例如://div
.选取当前节点,例如:./div
选取当前节点的父节点
@选取属性,例如://div[@id=“a”],选取所有名称为div的节点下属性id的值为a的内容
*选择所有值,例如://div/*,选择div下的所有值
运算符
运算符描述实例返回值
|计算两个节点集//book|//cd返回所有拥有 book 和 cd 元素的节点集
+加法6 + 410
-减法6 - 42
*乘法6 * 424
div除法8 div 42
=等于price=9.80如果 price 是 9.80,则返回 true。如果 price 是 9.90,则返回 false。
!=不等于price!=9.80如果 price 是 9.90,则返回 true。如果 price 是 9.80,则返回 false。
<小于price<9.80如果 price 是 9.00,则返回 true。如果 price 是 9.90,则返回 false。
<=小于或等于price<=9.80如果 price 是 9.00,则返回 true。如果 price 是 9.90,则返回 false。
>大于price>9.80如果 price 是 9.90,则返回 true。如果 price 是 9.80,则返回 false。
>=大于或等于price>=9.80如果 price 是 9.90,则返回 true。如果 price 是 9.70,则返回 false。
orprice=9.80 or price=9.70如果 price 是 9.80,则返回 true。如果 price 是 9.50,则返回 false。
andprice>9.00 and price<9.90如果 price 是 9.80,则返回 true。如果 price 是 8.50,则返回 false。
mod计算除法的余数5 mod 21
driver.find_element_by_id("in").click() #查找id=te的按钮并点击
driver.switch_to.parent_frame()#回到最开始的框架结构
driver.page_source ###获取当前页面内容
driver.get_cookies()###获取当前页面的cookie值

BeautifulSoup

from bs4 import BeautifulSoup
BeautifulSoup(driver.page_source, 'html.parser')

BeautifulSoup是一个模块,该模块用于格式化Html或者XML字符串
官方文档

'''
	<a name="test" class="c" id="a3"> 测试 </a>
'''
soup.get_text()###获取所有文本内容,返回,测试
soup.a.string ###返回,测试
soup.a ###得到所有<a>标签的内容,返回<a name="test" class="c" > 测试 </a>
soup.a.name###得到<a>标签的name属性,返回,test
soup.a["class"]###得到<a>标签的class属性,返回,C
soup.find(id="a3")###得到id=a3的内容,返回,<a name="test" class="c" id="a3"> 测试 </a>
soup.find_all('a')###得到所有标签为a的内容

Requests

requests库是一个常用的用于http请求的模块,它使用python语言编写,可以方便的对网页进行爬取,是学习python爬虫的较好的http请求模块。
官方文档

安装

pip install requests

使用

###自定义一个headers,具体以爬取网站为准
    headers ={
        "Accept":"application/json, text/javascript",
        "User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36",
        #"Content-Type":"application/x-www-form-urlencoded",
        #"Content-Type":"application/json",
        "Accept-Encoding":"gzip, deflate, br",
        "Accept-Language":"zh-CN,zh;q=0.9",
        "Cookie":"cookie值来自于要爬取网站的规则或者使用driver.get_cookies()获取"
    } 
GET请求
requests.get("请求地址",verify = False,headers=headers,allow_redirects=False) 
POST请求
post_param={'key':'value'}##json字符串/请求参数
requests.post("请求地址",data=post_param,verify = False,headers=headers, allow_redirects=False)
allow_redirects 重定向请求

默认情况下,除了 HEAD, Requests 会自动处理所有重定向。

可以使用响应对象的 history 方法来追踪重定向。

Response.history 是一个 Response 对象的列表,为了完成请求而创建了这些对象。这个对象列表按照从最老到最近的请求进行排序。

如果你使用的是GET、OPTIONS、POST、PUT、PATCH 或者 DELETE,那么你可以通过 allow_redirects 参数禁用重定向处理:

requests.post("请求地址", allow_redirects=False)

如果你使用了 HEAD,你也可以启用重定向:

requests.head("请求地址",allow_redirects=True)
verfiy

为了避免ssl认证,可以将verify=False, 但是这么设置会带来一个问题,日志中会有大量的warning信息, 如:

requests.post("请求地址",data=post_param,verify = False,headers=headers, allow_redirects=False)

如果想把这些报错信息去掉,只需要在请求的地方加上requests.packages.urllib3.disable_warnings()

原文地址

响应状态码
r = requests.get('http://httpbin.org/get')
r.status_code
### 返回:200

1xx(临时响应)
2xx (成功)
3xx (重定向)
4xx(请求错误)
5xx(服务器错误)

代码说明
100(继续) 请求者应当继续提出请求。 服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。
101(切换协议) 请求者已要求服务器切换协议,服务器已确认并准备切换。
200(成功) 服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页。
201(已创建) 请求成功并且服务器创建了新的资源。
202(已接受) 服务器已接受请求,但尚未处理。
203(非授权信息) 服务器已成功处理了请求,但返回的信息可能来自另一来源。
204(无内容) 服务器成功处理了请求,但没有返回任何内容。
205(重置内容) 服务器成功处理了请求,但没有返回任何内容。
206(部分内容) 服务器成功处理了部分 GET 请求。
207(多状态)代表之后的消息体将是一个XML消息,并且可能依照之前子请求数量的不同,包含一系列独立的响应代码。
208(已报告)DAV绑定的成员已经在(多状态)响应之前的部分被列举,且未被再次包含。
226(IM Used)服务器已经满足了对资源的请求,对实体请求的一个或多个实体操作的结果表示。
300(多种选择) 针对请求,服务器可执行多种操作。 服务器可根据请求者 (user agent) 选择一项操作,或提供操作列表供请求者选择。
301(永久移动) 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。
302(临时移动) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
303(查看其他位置) 请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。
304(未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。
305(使用代理) 请求者只能使用代理访问请求的网页。 如果服务器返回此响应,还表示请求者应使用代理。
307(临时重定向) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
308(请求重复)请求和所有将来的请求应该使用另一个URI重复。 307和308重复302和301的行为,但不允许HTTP方法更改。 例如,将表单提交给永久重定向的资源可能会顺利进行。
400(错误请求) 服务器不理解请求的语法。
401(未授权) 请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。
403(禁止) 服务器拒绝请求。
404(未找到) 服务器找不到请求的网页。
405(方法禁用) 禁用请求中指定的方法。
406(不接受) 无法使用请求的内容特性响应请求的网页。
407(需要代理授权) 此状态代码与 401(未授权)类似,但指定请求者应当授权使用代理。
408(请求超时) 服务器等候请求时发生超时。
409(冲突) 服务器在完成请求时发生冲突。 服务器必须在响应中包含有关冲突的信息。
410(已删除) 如果请求的资源已永久删除,服务器就会返回此响应。
411(需要有效长度) 服务器不接受不含有效内容长度标头字段的请求。
412(未满足前提条件) 服务器未满足请求者在请求中设置的其中一个前提条件。
413(请求实体过大) 服务器无法处理请求,因为请求实体过大,超出服务器的处理能力。
414(请求的 URI 过长) 请求的 URI(通常为网址)过长,服务器无法处理。
415(不支持的媒体类型) 请求的格式不受请求页面的支持。
416(请求范围不符合要求) 如果页面无法提供请求的范围,则服务器会返回此状态代码。
417(未满足期望值) 服务器未满足”期望”请求标头字段的要求。
418(彩蛋)本操作码是在1998年作为IETF的传统愚人节笑话, 在RFC 2324超文本咖啡壶控制协议’中定义的,并不需要在真实的HTTP服务器中定义。当一个控制茶壶的HTCPCP收到BREW或POST指令要求其煮咖啡时应当回传此错误。这个HTTP状态码在某些网站(包括Google.com)与项目(如Node.js、ASP.NET和Go语言)中用作彩蛋
420(特定限速)Twitter Search与Trends API在客户端被限速的情况下返回。
421(无法响应)该请求针对的是无法产生响应的服务器(例如因为连接重用)。
422(语义错误)请求格式正确,但是由于含有语义错误,无法响应
423(锁定)当前资源被锁定。
424(依赖请求失败)由于之前的某个请求发生的错误,导致当前请求失败,例如PROPPATCH。
425(无序连接)在WebDAV Advanced Collections Protocol中定义,但Web Distributed Authoring and Versioning (WebDAV) Ordered Collections Protocol中并不存在
426(请求升级)客户端应当切换到TLS/1.0,并在HTTP/1.1 Upgrade header中给出。
428(先决条件缺失)原服务器要求该请求满足一定条件。这是为了防止“‘未更新’问题,即客户端读取(GET)一个资源的状态,更改它,并将它写(PUT)回服务器,但这期间第三方已经在服务器上更改了该资源的状态,因此导致了冲突。”
429(请求数量过多)用户在给定的时间内发送了太多的请求。旨在用于网络限速。
431(请求头某一个或者多个字段过大)服务器不愿处理请求,因为一个或多个头字段过大。
444(无响应)Nginx上HTTP服务器扩展。服务器不向客户端返回任何信息,并关闭连接(有助于阻止恶意软件)。
450(被Windows家长控制系统阻止)这是一个由Windows家庭控制(Microsoft)HTTP阻止的450状态代码的示例,用于信息和测试。
451(由于法律原因无法使用)主条目:HTTP 451 该访问因法律的要求而被拒绝,由IETF在2015核准后新增加。
494(请求头过大)在错误代码431提出之前Nginx上使用的扩展HTTP代码。
500(服务器内部错误) 服务器遇到错误,无法完成请求。
501(尚未实施) 服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码。
502(错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。
503(服务不可用) 服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态。
504(网关超时) 服务器作为网关或代理,但是没有及时从上游服务器收到请求。
505(HTTP 版本不受支持) 服务器不支持请求中所用的 HTTP 协议版本。
506(代表服务器存在内部配置错误)由《透明内容协商协议》(RFC 2295)扩展,代表服务器存在内部配置错误,[64]被请求的协商变元资源被配置为在透明内容协商中使用自己,因此在一个协商处理中不是一个合适的重点。
507(存储空间不足)服务器无法存储完成请求所必须的内容。这个状况被认为是临时的。
508(死循环)服务器在处理请求时陷入死循环。 (可代替 208状态码)
510(获取资源所需要的策略并没有没满足)获取资源所需要的策略并没有被满足。
511(要求网络认证)客户端需要进行身份验证才能获得网络访问权限,旨在限制用户群访问特定网络。(例如连接WiFi热点时的强制网络门户)
返回内容

Requests 会自动解码来自服务器的内容。大多数 unicode 字符集都能被无缝地解码。
请求发出后,Requests 会基于 HTTP 头部对响应的编码作出有根据的推测。当你访问 r.text 之时,Requests 会使用其推测的文本编码。你可以找出 Requests 使用了什么编码,并且能够使用 r.encoding 属性来改变它:

>>> r.encoding
'utf-8'
>>> r.encoding = 'ISO-8859-1'
二进制响应内容

可以用于下载图片

r.content()
####如果创建图片
from PIL import Image
from io import BytesIO

 i = Image.open(BytesIO(r.content))
JSON响应内容

用于得到json字符
Requests 中也有一个内置的 JSON 解码器,助你处理 JSON 数据:

r.json()
原始响应内容
r.raw()
r.raw.read(10)###读取值
###如果要下载文件,请设置stream=true,并且使用get方法
r = requests.get('https://api.github.com/events', stream=True)
####下载
with open("文件保存位置", "wb") as f:
     for chunk in r.iter_content(1024000):            
         #print (chunk)
         if chunk:
             f.write(chunk)             

Pandas

Pandas 是基于 BSD 许可的开源支持库,为 Python 提供了高性能、易使用的数据结构与数据分析工具。
Pandas中文文档

DataFrame

1、DataFrame是一种数据框结构,相当于是一个矩阵形式,单元格可以存放数值、字符串等,这和excel表很像;
2、DataFrame是有 行(index)和 列(columns)可以设置的;

可以参考
文档

from pandas import DataFrame

创建

####方式一
df=pd.DataFrame()
df.columns=[u'col1',u'col2',u'col3']
### 方式二,list对象
d = {'col1': [1, 2], 'col2': [3, 4]}
df = pd.DataFrame(data=d)
### 方式三,字典对象
d=['a','b','c']
df=pd.DataFrame(data=[d],columns=(['col1','col2','col3'])) 

修改

####修改列名
df=df.rename(columns={'原列名':'新列名'})
###重置索引
df=df.reindex(axis='index')
###追加列,并设置默认值
df=df.assign(l="value")

删除

df=df.drop("列名")

df=df.drop([列的索引值])

筛选

####排除列1为空的情况
df=df[~df[u'列1'].isnull()]
####得到日期2020-08-12的销售收入与销售数量
sale,count = df.loc[(df.tdate=='2020-08-12'),(u'销售收入',u'销售数量')].sum()
####选取门店编号在1001,1002中的门店编号,门店名称列
df[['门店编号','门店名称']][df['门店编号'].isin(['1001','1002'])]
#####筛选期初数量大于0或者当前数量大于0的数据
df[(df['期初数量']>0) | df['当前数量']>0]

合并,连接

#######复制,合并,追加
frame_body=[]
order_details=[]
order_detail_body=df()
frame_body.append(order_details.copy())###追加
order_detail_body = pd.concat(frame_body)####合并
######左、右、内、全连接,类似于SQL中的LEFT JOIN、RIGHT JOIN、OUTER JOIN、INNER JOIN
pd.merge(dfA, dfB,how='left', on=['dfA与dfB相同的列'])
pd.merge(dfA, dfB,how='left', left_on=['dfA列'],right_on=['dfB列'])
pd.merge(dfA, dfB,how='right', on=['dfA与dfB相同的列'])
pd.merge(dfA, dfB,how='outer', on=['dfA与dfB相同的列'])
pd.merge(dfA, dfB,how='inner', on=['dfA与dfB相同的列'])
pd.merge方法

pd.merge(left, right, how=‘inner’, on=None, left_on=None, right_on=None,
left_index=False, right_index=False, sort=True,
suffixes=(’_x’, ‘_y’), copy=True, indicator=False,
validate=None)
参数如下:

参数
left拼接的左侧DataFrame对象
right拼接的右侧DataFrame对象
on要加入的列或索引级别名称。 必须在左侧和右侧DataFrame对象中找到。 如果未传递且left_index和right_index为False,则DataFrame中的列的交集将被推断为连接键。
left_on左侧DataFrame中的列或索引级别用作键。 可以是列名,索引级名称,也可以是长度等于DataFrame长度的数组。
right_on左侧DataFrame中的列或索引级别用作键。 可以是列名,索引级名称,也可以是长度等于DataFrame长度的数组。
left_index如果为True,则使用左侧DataFrame中的索引(行标签)作为其连接键。 对于具有MultiIndex(分层)的DataFrame,级别数必须与右侧DataFrame中的连接键数相匹配。
right_index与left_index功能相似。
howOne of ‘left’, ‘right’, ‘outer’, ‘inner’. 默认inner。inner是取交集,outer取并集。比如left:[‘A’,‘B’,‘C’];right[’'A,‘C’,‘D’];inner取交集的话,left中出现的A会和right中出现的买一个A进行匹配拼接,如果没有是B,在right中没有匹配到,则会丢失。'outer’取并集,出现的A会进行一一匹配,没有同时出现的会将缺失的部分添加缺失值。
sort按字典顺序通过连接键对结果DataFrame进行排序。 默认为True,设置为False将在很多情况下显着提高性能。
suffixes用于重叠列的字符串后缀元组。 默认为(‘x’,’ y’)。
copy始终从传递的DataFrame对象复制数据(默认为True),即使不需要重建索引也是如此。
indicator将一列添加到名为_merge的输出DataFrame,其中包含有关每行源的信息。 _merge是分类类型,并且对于其合并键仅出现在“左”DataFrame中的观察值,取得值为left_only,对于其合并键仅出现在“右”DataFrame中的观察值为right_only,并且如果在两者中都找到观察点的合并键,则为left_only。

DataFrame.to_sql()

将数据写入数据库

DataFrame.to_sql(name, con, flavor=None, schema=None, if_exists='fail', index=True, index_label=None, chunksize=None, dtype=None)
参数
namestring,数据库表名
conSQLAlchemy引擎或DBAPI2连接(旧模式)
使用SQLAlchemy可以使用该库支持的任何数据库。如果是DBAPI2对象,则仅支持sqlite3。
flavor‘sqlite’, 默认值None,不推荐使用:
此参数将在将来的版本中删除,因为如果未安装SQLAlchemy,则“ sqlite”是唯一受支持的选项。
schemastring, 默认值 None,指定schema (如果数据库支持). 如果是None值, 则使用默认的schema.
if_exists{‘fail’, ‘replace’, ‘append’}, 默认值‘fail’
fail:如果表存在,不做任何操作
replace:如果表存在,则删除该表,再添加数据
append
index布尔值,默认值为True,将DataFrame索引写为列。
index_labelstring or 序列, 默认值None,
索引列的列标签。如果给出None(默认)并且 index为True,则使用索引名。
如果DataFrame使用MultiIndex,则应给出一个序列。
chunksizeint, 默认值为None,
如果不是None,那么将一次批量写入此大小的行。如果为None,则将立即写入所有行。
dtype列名称为sql类型的字典,默认为None
可选指定列的数据类型。SQL类型应该是SQLAlchemy类型,或者是sqlite3后备连接的字符串。

示例

df.to_sql('table_name',con,dtype={'col1':VARCHAR(20)},if_exits="append",chunksize=1000)

DataFrame.to_excel

将DataFrame对象数据存入excel文件中

要将单个对象写入Excel .xlsx文件,仅需要指定目标文件名。要写入多张页签,必须使用目标文件名创建一个ExcelWriter对象,并在文件中指定要写入的页签名称。

通过指定唯一的sheet_name可以写入多张页签。将所有数据写入文件后,必须保存更改。
请注意,使用已经存在的文件名创建ExcelWriter对象将导致现有文件的内容被删除。

DataFrame.to_excel(excel_writer, sheet_name='Sheet1', na_rep='', float_format=None, columns=None, header=True, index=True, index_label=None, startrow=0, startcol=0, engine=None, merge_cells=True, encoding=None, inf_rep='inf', verbose=True, freeze_panes=None)
参数描述
excel_writerstr or ExcelWriter object,文件路径或者已存在的ExcelWriter对象,例如,“a.xlsx”
sheet_namestr, default ‘Sheet1’,页签名称
na_repstr,默认’’,数据缺失时的默认显示
float_formatstr,可选,浮点数字的显示格式,例如 float_format="%.2f"将格式0.1234设置为0.12
columns序列或str列表,可选,写入页签的列头名称
header布尔或str列表,默认为True,写出列名。如果给出了字符串列表,则假定它是列名的别名。
index布尔值,默认为True,写行名(索引)。

JSON

####将JSON字符串转换为pandas对象
pandas.read_json()

参考文档

pandas.json_normalize()####将半结构化JSON数据规范化为一个平面表。
data = [{'id': 1, 'name': {'first': 'Coleen', 'last': 'Volk'}},
        {'name': {'given': 'Mose', 'family': 'Regner'}},
        {'id': 2, 'name': 'Faye Raker'}]
pandas.json_normalize(data)
#    id        name name.family name.first name.given name.last
#0  1.0         NaN         NaN     Coleen        NaN      Volk
#1  NaN         NaN      Regner        NaN       Mose       NaN
#2  2.0  Faye Raker         NaN        NaN        NaN       NaN

参考文档

json.loads()与json.dumps()

import json
json.loads()###将json格式的数据转换为字典
json.dumps()###将字典转换为json格式的数据

pandas.read

pandas.read_sql()

从数据库查询数据并返回DataFrame类型值
与read_sql_table和read_sql_query相同

pandas.read_sql(
			sql, 
			con, 
			index_col=None, 
			coerce_float=True, 
			params=None, 
			parse_dates=None, 
			columns=None, 
			chunksize=None)
参数描述
sql数据查询sql语句,例如:select * from test
con数据库连接对象
index_col索引列
coerce_float将数字形式的字符串直接以float型读入
params使用list 或者 dict或者tuple传递值,传递给执行方法的参数列表。用于传递参数的语法取决于数据库驱动程序。查看数据库驱动程序文档,以了解PEP 249的paramstyle中所描述的五种语法样式中的哪一种受支持。例如。对于psycopg2,使用%(name)s,因此请使用params = {‘name’:‘value’}。
parse_dates某一列日期型字符串转换为datetime型数据,与pd.to_datetime函数功能类似。可以直接提供需要转换的列名以默认的日期形式转换,也可以用字典的格式提供列名和转换的日期格式,比如{column_name: format string}(format string:"%Y:%m:%H:%M:%S")
columns选取返回的列
chunksize如果提供了一个整数值,那么就会返回一个generator,每次输出的行数就是提供的值的大小。
PEP 249的paramstyle:

在这里插入图片描述

创建数据库连接
import sqlalchemy
import pyodbc

from sqlalchemy.types import *
from sqlalchemy import create_engine
engine=sqlalchemy.create_engine(
	'数据库类型+数据库驱动名称://用户名:口令@机器地址:端口号/数据库名',###"mssql+pyodbc://用户名:密码@数据源名称"此语句为连接SQLServer数据库
	echo=True,  # 设置为True,则输出sql语句
	pool_size=5,  # 数据库连接池初始化的容量
	max_overflow=10,  # 连接池最大溢出容量,该容量+初始容量=最大容量。超出会堵塞等待,等待时间为timeout参数值默认30
	pool_recycle=7200  # 重连周期
)
配置数据源

1.运行–》control.exe–》管理工具
在这里插入图片描述
2.选择数据源—》系统DSN–>添加–>SQL Server
在这里插入图片描述

在这里插入图片描述
3.输入名称,描述,服务器地址
在这里插入图片描述
4.输入数据库登录名和密码
在这里插入图片描述
5.更改默认的数据库
在这里插入图片描述
6.完成
在这里插入图片描述
7.测试连接
在这里插入图片描述
8.配置成功!!!
在这里插入图片描述

pandas.read_excel()

读取excel文件并返回一个DataFrame
官方文档

pandas.read_excel(io, sheet_name=0, header=0, skiprows=None, skip_footer=0, index_col=None, names=None, usecols=None, parse_dates=False, date_parser=None, na_values=None, thousands=None, convert_float=True, converters=None, dtype=None, true_values=None, false_values=None, engine=None, squeeze=False, **kwds)

常用的参数io,sheet_name

参数描述
iostring,读取的excel文件的地址,例如:"./a.xlsx"
sheet_namestring, int, mixed list of strings/ints, or None, default 0,文件的页签名称或者索引,索引从0开始,默认值为“Sheet1”或者0
headerint, list of ints, default 0,指定作为列名的行,默认0,即取第一行的值为列名。数据为列名行以下的数据;若数据不含列名,则设定 header = None。
convertersdict, default None,将查询值转换为指定的类型

示例:

stockHead=pd.read_excel("a.xls",'Sheet1',converters={'序号':str})

pandas.read_json()

将json字符串转换为pandas对象
官方文档

pandas.read_json(path_or_buf=None, orient=None, typ='frame', dtype=True, convert_axes=True, convert_dates=True, keep_default_dates=True, numpy=False, precise_float=False, date_unit=None, encoding=None, lines=False, chunksize=None, compression='infer')
参数描述
path_or_bufa valid JSON string or file-like, default: None,json字符串或者json文件,该字符串可以是URL。
有效的URL方案包括http,ftp,s3和file。
对于文件URL,需要一个host。例如,本地文件可能是file://localhost/path/to/table.json
orientstring,预期的JSON字符串格式的指示。可以to_json()使用相应的orient值来生成兼容的JSON字符串。
值如下:
‘split’:dict格式为 {index -> [index], columns -> [columns], data -> [values]}
‘records’:list 格式为 [{column -> value}, … , {column -> value}]
‘index’:dict格式为 {index -> {column -> value}}
‘columns’:dict格式为 {column -> {index -> value}}‘values’ :仅是值数组
以上值和默认值取决于type参数的值。
当,type == 'series’
orients的值为 {‘split’,‘records’,‘index’}
默认值是 'index’
当orient的值为‘index’时,series的索引必须是唯一的。
当,type == 'frame’
orients的值为 {‘split’,‘records’,‘index’, ‘columns’,‘values’}
默认值是 'columns’
当orients的值为 ‘index’和’columns’时,DataFrame的索引必须是唯一的
当orients的值是’index’,'columns’和’records’时,DataFrame的列必须是唯一的

pandas.read_html()

读取当前页面的table标签内容并返回一个包含DataFrame对象的列表
官方文档

pandas.read_html(io, match='.+', flavor=None, header=None, index_col=None, skiprows=None, attrs=None, parse_dates=False, tupleize_cols=False, thousands=', ', encoding=None, decimal='.', converters=None, na_values=None, keep_default_na=True)

参数:
io:str或类似文件
URL,类似文件的对象或包含HTML的原始字符串。请注意,lxml仅接受http,ftp和文件url协 议。如果您有一个以开头的URL,则’https’可以尝试删除’s’。
match:str或编译的正则表达式,可选
将返回包含与该正则表达式或字符串匹配的文本的表集。除非HTML非常简单,否则您可能需要在此处传递非空字符串。
默认为“.+”(匹配任何非空字符串)。
默认值将返回页面上包含的所有表。此值转换为正则表达式,以便Beautiful Soup和lxml之间具有一致的行为。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值