Python 3.x版安装完成后有内附SQLite数据库,这一章将以此为实例讲解,在使用此SQLite前需要导入此SQLite
import sqlite3
为了使用 sqlite3 模块,您首先必须创建一个表示数据库的连接对象,然后您可以有选择地创建光标对象,这将帮助您执行所有
的 SQL 语句。
操作数据库之前需要先连接到一个现有的数据库。如果数据库不存在,那么它就会被创建,最后将返回一个数据库对象。
使用connect方法连接数据, 格式为:
sqlite3.connect(database [,timeout ,other optional arguments])
该 API 打开一个到 SQLite 数据库文件 database 的链接。您可以使用 “:memory:” 来在 RAM 中打开一个到 database 的数
据库连接,而不是在磁盘上打开。如果数据库成功打开,则返回一个连接对象。
当一个数据库被多个连接访问,且其中一个修改了数据库,此时 SQLite 数据库被锁定,直到事务提交。timeout 参数表示连接
等待锁定的持续时间,直到发生异常断开连接。timeout 参数默认是 5.0(5 秒)。
如果给定的数据库名称 filename 不存在,则该调用将创建一个数据库。如果您不想在当前目录中创建数据库,那么您可以指定
带有路径的文件名,这样您就能在任意地方创建数据库。
例如:
import sqlite3
conn = sqlite3.connect('test.db')
print ("数据库打开成功")
运行上面的程序,在当前目录中创建我们的数据库 test.db, 可以根据需要改变路径
在这里,您也可以把数据库名称复制为特定的名称 :memory: ,这样就会在 RAM 中创建一个数据库。
游标(cursor)是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果。每个游标区都有一个名字,用户可以用SQL语句
逐一从游标中获取记录,并赋给主变量,交由主语言进一步处理。
使用cursor函数获取游标, 格式如下
SQLite 数据类型是一个用来指定任何对象的数据类型的属性。SQLite 中的每一列,每个变量和表达式都有相关的数据类型。
您可以在创建表的同时使用这些数据类型。SQLite 使用一个更普遍的动态类型系统。在 SQLite 中,值的数据类型与值本身是
相关的,而不是与它的容器相关
每个存储在 SQLite 数据库中的值都具有以下存储类之一:
SQLite 的 CREATE TABLE 语句用于在任何给定的数据库创建一个新表。创建基本表,涉及到命名表、定义列及每一列的数据类
型。
CREATE TABLE 语句的基本语法如下:
CREATE TABLE database_name.table_name(
column1 datatype PRIMARY KEY(one or more columns),
column2 datatype,
column3 datatype,
.....
columnN datatype,
)
SQLite 的 INSERT INTO 语句用于向数据库的某个表中添加新的数据行
INSERT INTO 语句有两种基本语法,如下所示:
INSERT INTO TABLE_NAME [(column1, column2, column3,...columnN)]
VALUES (value1, value2, value3,...valueN);
在这里,column1, column2,…columnN 是要插入数据的表中的列的名称
如果要为表中的所有列添加值,您也可以不需要在 SQLite 查询中指定列名称。但要确保值的顺序与列在表中的顺序一致。
SQLite 的 INSERT INTO 语法如下:
INSERT INTO TABLE_NAME VALUES (value1,value2,value3,...valueN);
SQLite 的 SELECT 语句用于从 SQLite 数据库表中获取数据,以结果表的形式返回数据。这些结果表也被称为结果集。
SQLite 的 SELECT 语句的基本语法如下:
S
每个人家里都会有冰箱,冰箱是用来干什么的?冰箱是用来存放食物的地方
同样的,数据库是存放数据的地方。正是因为有了数据库后,我们可以直接查找数据。
例如支付宝查看自己的账户收益,就是从数据库读取数据后给你的。
有人可能会问了:我的数据就存放在自己电脑的excel表里就可以了,为什么还要搞个数据库呢?
这是因为数据库比excel有更多的优势。数据库可以存放大量的数据,允许很多人同时使用里面的数据。
举个例子,excel好比是一个移动硬盘,我们使用了这个移动硬盘其他人就用不了了。数据库好比是网盘,很多人可以同时访问里面里的数据。而且网盘比移动硬盘能放更多的数据。
数据库有很多种类,这里我们重点学习使用最广泛的关系数据库。
关系数据库是由多个表组成的。就像Excel一样,Excel是一张一张的二维表。每个表都是由行和列组成的。
同样的,关系数据库里存放的也是一张一张的表,只不过各个表之间是有联系的。所以,简单来说:
关系数据库=多张表+各表之间的关系
对应的,学会关系数据库我们只要掌握两点就可以:
表的结构是指要了解关系数据库中每张表长什么样。
每个表由一个名字标识。表包含带有列名的列,和记录数据的行。我们举个具体的例子就一目了然了。
下面图片里的表名是:学生表,记录了每个学生的信息。
表中每一列都有一个名字来标识出该列,这个表里有4列,列名分别是学号,姓名,出生日期,性别。从列名上你也可以知道这一列对应记录的是什么数据。
表的每一行里记录着数据。这里的一行表示该名学生的信息,比如第2行是学号0002学生的信息,他的姓名是猴子,出生日期是1990-12-21,性别是女。
关系数据库是由多张表组成的,图片里是存放在学校数据库里的4张表。
你能发现下面这4张表之间有什么关系吗?
其实,数据之间也是有关系的。关系数据库里各个表之间如何建立起关系呢?
我们来看图中“学生表”,“成绩表”这两个表之前的关系。
这两张表通过”学号”关联起来,为了更清楚的看到这两个表的关系,PPT里我用相同
Email(电子邮件)的历史比Web还要久远。直到现在,Email还是互联网上应用非常广泛的服务。
在我们开始编写邮件操作的相关代码之前,先了解一下电子邮件在互联网上是如何运作的。
相关概念:
假设自己的电子邮件地址是me@163.com,对方的电子邮件地址是friend@aliyun.com。用Outlook或Foxmail之类的软件写
好邮件,填上对方的Email地址,单击“发送”按钮,电子邮件就发送出去了。这些电子邮件软件被称为邮件用户代理(Mail
User Agent,MUA)。
Email从MUA发出去后,不是直接到达对方计算机,而是发到邮件传输代理(Mail Transfer Agent,MTA),就是Email服务
提供商,如网易、阿里云等。由于自己的电子邮件地址是163.com,因此Email首先被投递到网易提供的MTA,再由网易的
MTA发送到对方的服务商,也就是阿里的MTA。
Email到达阿里的MTA后,由于对方使用的是@aliyun.com的邮箱,因此阿里的MTA会把Email投递到邮件的最终目的地邮件投
递代理(Mail Delivery Agent,MDA)。Email到达MDA后,会存放在阿里云服务器的某个文件或特殊的数据库里,我们将这
个长期保存邮件的地方称为电子邮箱。
同普通邮件类似,Email不会直接到达对方的计算机,因为对方的计算机不一定开机,开机也不一定联网。对方要取到邮件,必
须通过MUA从MDA上获得。
SMTP的全称为Simple Mail Transfer Protocol,也就是简单邮件传输协议.
SMTP称为简单邮件传输协议(Simple Mail Transfer Protocal),目标是向用户提供高效、可靠的邮件传输。它的一个重要特
点是它能够在传送中接力传送邮件,即邮件可以通过不同网络上的主机接力式传送。通常它工作在两种情况下:一是邮件从客户
机传输到服务器;二是从某一个服务器传输到另一个服务器。SMTP是一个请求/响应协议,它监听25号端口,用于接收用户的
Mail请求,并与远端Mail服务器建立SMTP连接。
SM
在现实的自动化测试中关于鼠标的操作不仅仅是click()单击操作,还有很多操控方法包含在ActionChains类中。
from selenium import webdriver
#1.引入 ActionChains 类
from selenium.webdriver.common.action_chains import ActionChains
定位到要悬停的元素
element= driver.find_element_by_link_text("设置")
#3.对定位到的元素执行鼠标悬停操作
ActionChains(driver).move_to_element(element).perform()
右键菜单
action_chains = ActionChains(driver)
body = driver.find_element_by_tag_name('body') # [name="body"]
print(body)
action_chains.context_click(body).perform()
time.sleep(3)
pyautogui.typewrite(['down', 'down', 'down'])
time.sleep(3)
pyautogui.typewrite(['return'])
time.sleep(10)
Selenium中的Key模块为我们提供了模拟键盘按键的方法,那就是send_keys()方法。它不仅可以模拟键盘输入,也可以模拟键
盘的操作。
# 输入框输入关键词
driver.find_element_by_id("kw").send_keys("关键词")
# 提交
driver.find_element_by_id("btnSubmit").send_keys(Keys.ENTER)
在页面操作过程中有时候点击某个链接会弹出新的窗口,这时就需要主机切换到新打开的窗口上进行操作。WebDriver提供了
switch_to.window()方法,可以实现在不同的窗口之间切换。
#1.获
Selenium 是什么?一句话,自动化测试工具。它支持各种浏览器,包括 Chrome,Safari,Firefox 等主流界面式浏览器。使
用Selenium可以模拟人工对web浏览器进行自动化操作。
pip install Selenium
要使用Selenium,还需要下载安装浏览器驱动。
下载Microsoft Edge的webdriver,找到对应版本下载,解压后得到一个msedgedriver.exe
然后可以将msedgedriver.exe放到某个文件夹中,然后将路径配置到环境变量中
手动创建一个存放浏览器驱动的目录,如: D:\webdriver , 将下载的浏览器驱动文件(例如:chromedriver、geckodriver)
丢到该目录下,接着设置环境变量。
selenium提供8种元素定位方式,包括DOM元素id, name和tag等等。它还支持xpath和css选择器。返回结果是元素对象。
接下来将以下面这个html页面为例演示如何使用以上各种定位方法。
通过id定位:
dr.find_element_by_id("kw")
通过name定位:
dr.find_element_by_name("wd")
通过class name定位
dr.find_element_by_class_name("s_ipt")
通过tag name定
CSV (Comma Separated Values) ,即逗号分隔值(也称字符分隔值,因为分隔符可以不是逗号),是一种常用的文本格式, 用以存储表格数据,包括数字或者字符。很多程序在处理数据时都会碰到csv这种格式的文件,它的使用是非常广泛
Python中集成了专用于处理csv文件的库,名为:csv。
csv 库中有4个常用的对象:
本节课学习: csv.reader和csv.writer
假设我们现在要创建一个csv文件,将数据保存为如下形式
使用csv.writer写入数据
关于写入,需要注意:
假设现在要读取的csv文件内容如下:
可以看到,该文件的第一行表明数据类型,我们暂且称之为header
从第2行开始,保存的是设备采集到的数据。
使用csv.reader读取数据
正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的 子串替换或者从某个串中取出符合某个条件的子串等。
例如:
正则表达式是由 普通字符 (例如字符 a 到 z)以及 特殊字符 (称为”元字符”)组成的文字 模式 。模式描述在搜索文本时要匹 配的一个或多个字符串。
正则表达式,广泛用于与文字、字符串的格式化,放到Python里使用,再合适不过;尤其是在编写爬虫时,用正则表达式匹配 URL、匹配IP等,正则表达式都是一个简单、高效的选择。
普通字符:
普通字符包括没有显式指定为元字符的所有可打印和不可打印字符。这包括所有大写和小写字母、所有数字、所有标点符号和一 些其他符号。
如:
abc #匹配所有abc
123 #匹配所有123
元字符:
预定义字符集:
转义字符:
元字符要求在试图匹配它们时特别对待。若要匹配这些特殊字符,必须首先使字符”转义”,即,将反斜杠字符\ 放在它们前 面。
如:
\[ #匹配左中括号
\} #匹配右大括号
Python里的正则表达式,无需下载外部模块,只需要引入自带模块:re:
import re
在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果有多个匹配模式,则返回元组列表,如果没有找到匹配 的,则返回空列表。
注意: match 和 search 是匹配一次 findall 匹配所有。
语法格式为:
findal
超文本传输协议(HTTP)的设计目的是保证客户端与服务器之间的通信。
HTTP 的工作方式是客户端与服务器之间的请求-应答协议。
web 浏览器可能是客户端,而计算机上的网络应用程序也可能作为服务器端。
举例:客户端(浏览器)向服务器提交 HTTP 请求;服务器向客户端返回响应。响应包含关于请求的状态信息以及可能被请求 的内容。
在客户机和服务器之间进行请求-响应时,两种最常被用到的方法是:GET 和 POST。
请注意,查询字符串(名称/值对)是在 GET 请求的 URL 中发送的:
/test/demo_form.php?name1=value1&name2=value2
有关 GET 请求的其他一些注释:
请注意,查询字符串(名称/值对)是在 POST 请求的 HTTP 消息主体中发送的:
有关 POST 请求的其他一些注释:
下面的表格比较了两种 HTTP 方法:GET 和 POST。
HTTP 的全称是 Hyper Text Transfer Protocol,中文名叫作超文本传输协议,HTTP 协议是用于从网络传输超文本数据到本地 浏览器的传送协议,它能保证高效而准确地传送超文本文档
HTTPS 的全称是 Hyper Text Transfer Protocol over Secure Socket Layer,是以安全为目标的 HTTP 通道,简单讲是 HTTP 的安全版,即在