更新了文档图片资源链接

pull/40/head
jackfrued 2022-06-13 21:22:04 +08:00
parent 620c7495bc
commit 4f1b090074
23 changed files with 90 additions and 87 deletions

View File

@ -14,4 +14,5 @@
下面是我创建的学习交流群群号789050736欢迎加入一起学习共同进步。
<img src="https://gitee.com/jackfrued/mypic/raw/master/20211205225143.png" style="zoom:50%;">
<img src="https://github.com/jackfrued/mypic/raw/master/20211205225143.png" style="zoom:50%;">

View File

@ -4,7 +4,7 @@
Python是由荷兰人吉多·范罗苏姆Guido von Rossum发明的一种编程语言是目前世界上最受欢迎和拥有最多用户群体的编程语言。
<img src="https://gitee.com/jackfrued/mypic/raw/master/20210816232538.png" width="85%">
<img src="https://github.com/jackfrued/mypic/raw/master/20210816232538.png" width="85%">
#### Python的历史
@ -41,29 +41,29 @@ Python最主要的缺点是执行效率低但是当我们更看重产品的
可以在[Python官方网站](https://www.python.org/downloads/)找到下载链接并下载Python 3的安装程序。
![](https://gitee.com/jackfrued/mypic/raw/master/20210719222940.png)
![](https://github.com/jackfrued/mypic/raw/master/20210719222940.png)
对于Windows操作系统可以下载“executable installer”。需要注意的是如果在Windows 7环境下安装Python 3需要先安装Service Pack 1补丁包大家可以在Windows的“运行”中输入`winver`命令从弹出的窗口上可以看到你的系统是否安装了该补丁包。如果没有该补丁包一定要先通过“Windows Update”或者类似“CCleaner”这样的工具自动安装该补丁包安装完成后通常需要重启你的Windows系统然后再开始安装Python环境。
![](https://gitee.com/jackfrued/mypic/raw/master/20210719222956.png)
![](https://github.com/jackfrued/mypic/raw/master/20210719222956.png)
双击运行刚才下载的安装程序会打开Python环境的安装向导。在执行安装向导的时候记得勾选“Add Python 3.x to PATH”选项这个选项会帮助我们将Python的解释器添加到PATH环境变量中不理解没关系照做就行具体的步骤如下图所示。
![](https://gitee.com/jackfrued/mypic/raw/master/20210719223007.png)
![](https://github.com/jackfrued/mypic/raw/master/20210719223007.png)
![](https://gitee.com/jackfrued/mypic/raw/master/20210719223021.png)
![](https://github.com/jackfrued/mypic/raw/master/20210719223021.png)
![](https://gitee.com/jackfrued/mypic/raw/master/20210719223317.png)
![](https://github.com/jackfrued/mypic/raw/master/20210719223317.png)
![](https://gitee.com/jackfrued/mypic/raw/master/20210719223332.png)
![](https://github.com/jackfrued/mypic/raw/master/20210719223332.png)
安装完成后可以打开Windows的“命令行提示符”工具或“PowerShell”并输入`python --version`或`python -V`来检查安装是否成功,命令行提示符可以在“运行”中输入`cmd`来打开或者在“开始菜单”的附件中找到它。如果看了Python解释器对应的版本号Python 3.7.8),说明你的安装已经成功了,如下图所示。
![](https://gitee.com/jackfrued/mypic/raw/master/20210719223350.png)
![](https://github.com/jackfrued/mypic/raw/master/20210719223350.png)
> **说明**如果安装过程显示安装失败或执行上面的命令报错很有可能是因为你的Windows系统缺失了一些动态链接库文件或C构建工具导致的问题。可以在[微软官网](https://www.microsoft.com/zh-cn/download/details.aspx?id=48145)下载Visual C++ Redistributable for Visual Studio 2015文件进行修复64位的系统需要下载有x64标记的安装文件。也可以通过下面的百度云盘地址获取修复工具运行修复工具按照如下图所示的方式进行修复链接: https://pan.baidu.com/s/1iNDnU5UVdDX5sKFqsiDg5Q 提取码: cjs3。
>
> ![QQ20210711-0](https://gitee.com/jackfrued/mypic/raw/master/20210816234614.png)
> ![QQ20210711-0](https://github.com/jackfrued/mypic/raw/master/20210816234614.png)
除此之外你还应该检查一下Python的包管理工具是否已经可用对应的命令是`pip --version`。

View File

@ -51,19 +51,19 @@ Visual Studio Code通常简称为VSCode是一个由微软开发能够在Wi
运行PyCharm可以看到如下图所示的欢迎界面可以选择“New Project”来创建一个新的项目。
<img src="https://gitee.com/jackfrued/mypic/raw/master/20210720102203.png" width="80%">
<img src="https://github.com/jackfrued/mypic/raw/master/20210720102203.png" width="80%">
创建项目的时候需要指定项目的路径并创建运行项目的”虚拟环境“,如下图所示。
<img src="https://gitee.com/jackfrued/mypic/raw/master/20210720102822.png" width="80%">
<img src="https://github.com/jackfrued/mypic/raw/master/20210720102822.png" width="80%">
项目创建好以后会出现如下图所示的画面我们可以通过在项目文件夹上点击鼠标右键选择“New”菜单下的“Python File”来创建一个Python文件创建好的Python文件会自动打开进入可编辑的状态。
![image-20210720133621079](https://gitee.com/jackfrued/mypic/raw/master/20210720133621.png)
![image-20210720133621079](https://github.com/jackfrued/mypic/raw/master/20210720133621.png)
写好代码后可以在编辑代码的窗口点击鼠标右键选择“Run”菜单项来运行代码下面的“Run”窗口会显示代码的执行结果如下图所示。
![image-20210720134039848](https://gitee.com/jackfrued/mypic/raw/master/20210720134039.png)
![image-20210720134039848](https://github.com/jackfrued/mypic/raw/master/20210720134039.png)
PyCharm常用的快捷键如下表所示我们也可以在“File”菜单的“Settings”中定制PyCharm的快捷键macOS系统是在“PyCharm”菜单的“Preferences”中对快捷键进行设置

View File

@ -2,7 +2,7 @@
第二次世界大战促使了现代电子计算机的诞生世界上的第一台通用电子计算机叫ENIAC电子数值积分计算机诞生于美国的宾夕法尼亚大学占地167平米重量27吨每秒钟大约能够完成约5000次浮点运算如下图所示。ENIAC诞生之后被应用于导弹弹道的计算而数值计算也是现代电子计算机最为重要的一项功能。
<img src="https://gitee.com/jackfrued/mypic/raw/master/20210727163610.jpg" width="65%">
<img src="https://github.com/jackfrued/mypic/raw/master/20210727163610.jpg" width="65%">
随着时间的推移虽然数值运算仍然是计算机日常工作中最为重要的组成部分但是今天的计算机还要处理大量的以文本形式存在的信息。如果我们希望通过Python程序来操作本这些文本信息就必须要先了解字符串这种数据类型以及与它相关的知识。

View File

@ -91,7 +91,7 @@ print((set1 | set2) - (set1 & set2)) # {1, 3, 5, 7, 8, 10}
通过上面的代码可以看出,对两个集合求交集,`&`运算符和`intersection`方法的作用是完全相同的,使用运算符的方式更直观而且代码也比较简短。相信大家对交集、并集、差集、对称差这几个概念是比较清楚的,如果没什么印象了可以看看下面的图。
<img src="https://gitee.com/jackfrued/mypic/raw/master/20210819154520.png" width="90%">
<img src="https://github.com/jackfrued/mypic/raw/master/20210819154520.png" width="90%">
集合的交集、并集、差集运算还可以跟赋值运算一起构成复合赋值运算,如下所示。

View File

@ -12,7 +12,7 @@ person3 = {'王大锤', 55, 60, '科华北路62号', '中同仁路8号', '131223
说到字典这个词,大家一定不陌生,读小学的时候每个人基本上都有一本《新华字典》,如下图所示。
![dictionary](https://gitee.com/jackfrued/mypic/raw/master/20210820204829.jpg)
![dictionary](https://github.com/jackfrued/mypic/raw/master/20210820204829.jpg)
Python程序中的字典跟现实生活中的字典很像它以键值对键和值的组合的方式把数据组织到一起我们可以通过键找到与之对应的值并进行操作。就像《新华字典》中每个字都有与它对应的解释一样每个字和它的解释合在一起就是字典中的一个条目而字典中通常包含了很多个这样的条目。

View File

@ -1,4 +1,4 @@
## 第13课:函数使用进阶
## 第15课:函数使用进阶
前面我们讲到了关于函数的知识我们还讲到过Python中常用的数据类型这些类型的变量都可以作为函数的参数或返回值用好函数还可以让我们做更多的事情。

View File

@ -22,7 +22,7 @@
在面向对象编程的世界中,**一切皆为对象****对象都有属性和行为****每个对象都是独一无二的**,而且**对象一定属于某个类**。对象的属性是对象的静态特征,对象的行为是对象的动态特征。按照上面的说法,如果我们把拥有共同特征的对象的属性和行为都抽取出来,就可以定义出一个类。
<img src="https://gitee.com/jackfrued/mypic/raw/master/20210731182741.png" width="75%">
<img src="https://github.com/jackfrued/mypic/raw/master/20210731182741.png" width="75%">
### 定义类
@ -224,7 +224,7 @@ print(p1.distance_to(p2))
面向对象编程是一种非常流行的编程范式,除此之外还有**指令式编程**、**函数式编程**等编程范式。由于现实世界是由对象构成的,而对象是可以接收消息的实体,所以**面向对象编程更符合人类正常的思维习惯**。类是抽象的,对象是具体的,有了类就能创建对象,有了对象就可以接收消息,这就是面向对象编程的基础。定义类的过程是一个抽象的过程,找到对象公共的属性属于数据抽象,找到对象公共的方法属于行为抽象。抽象的过程是一个仁者见仁智者见智的过程,对同一类对象进行抽象可能会得到不同的结果,如下图所示。
<img src="https://gitee.com/jackfrued/mypic/raw/master/20210731182914.png" width="75%">
<img src="https://github.com/jackfrued/mypic/raw/master/20210731182914.png" width="75%">
> **说明:** 本节课的插图来自于 Grady Booc 等撰写的《面向对象分析与设计》一书,该书是讲解面向对象编程的经典著作,有兴趣的读者可以购买和阅读这本书来了解更多的面向对象的相关知识。

View File

@ -20,7 +20,7 @@
下图展示了如何根据程序的需要来设置`open`函数的操作模式。
<img src="https://gitee.com/jackfrued/mypic/raw/master/20210803201644.png" width="75%">
<img src="https://github.com/jackfrued/mypic/raw/master/20210803201644.png" width="75%">
在使用`open`函数时,如果打开的文件是字符文件(文本文件),可以通过`encoding`参数来指定读写文件使用的字符编码。如果对字符编码和字符集这些概念不了解,可以看看[《字符集和字符编码》](https://www.cnblogs.com/skynet/archive/2011/05/03/2035105.html)一文,此处不再进行赘述。

View File

@ -32,11 +32,11 @@ let obj = {
}
```
<img src="https://gitee.com/jackfrued/mypic/raw/master/20210820143803.png" alt="image-20210820143756353" width="80%">
<img src="https://github.com/jackfrued/mypic/raw/master/20210820143803.png" alt="image-20210820143756353" width="80%">
上面的`obj`就是JavaScript中的一个对象我们可以通过`obj.name`或`obj["name"]`两种方式获取到`name`对应的值,如下图所示。可以注意到,`obj["name"]`这种获取数据的方式跟Python字典通过键获取值的索引操作是完全一致的而Python中也通过名为`json`的模块提供了字典与JSON双向转换的支持。
<img src="https://gitee.com/jackfrued/mypic/raw/master/20210820144411.png" width="85%">
<img src="https://github.com/jackfrued/mypic/raw/master/20210820144411.png" width="85%">
我们在JSON中使用的数据类型JavaScript数据类型和Python中的数据类型也是很容易找到对应关系的大家可以看看下面的两张表。
@ -205,7 +205,7 @@ pip uninstall -y ujson
国内有很多提供网络API接口的网站例如[聚合数据](https://www.juhe.cn/)、[阿凡达数据](http://www.avatardata.cn/)等,这些网站上有免费的和付费的数据接口,国外的[{API}Search](http://apis.io/)网站也提供了类似的功能,有兴趣的可以自行研究。下面的例子演示了如何使用[`requests`](http://docs.python-requests.org/zh_CN/latest/)库基于HTTP进行网络资源访问的三方库访问网络API获取国内新闻并显示新闻标题和链接。在这个例子中我们使用了名为[天行数据](https://www.tianapi.com/)的网站提供的国内新闻数据接口其中的APIKey需要自己到网站上注册申请。在天行数据网站注册账号后会自动分配APIKey但是要访问接口获取数据需要绑定验证邮箱或手机然后还要申请需要使用的接口如下图所示。
<img src="https://gitee.com/jackfrued/mypic/raw/master/20210820151134.png" alt="image-20210820151134034" width="100%">
<img src="https://github.com/jackfrued/mypic/raw/master/20210820151134.png" alt="image-20210820151134034" width="100%">
Python通过URL接入网络我们推荐大家使用`requests`三方库,它简单且强大,但需要自行安装。
@ -229,7 +229,7 @@ if resp.status_code == 200:
上面的代码通过`requests`模块的`get`函数向天行数据的国内新闻接口发起了一次请求,如果请求过程没有出现问题,`get`函数会返回一个`Response`对象,通过该对象的`status_code`属性表示HTTP响应状态码如果不理解没关系你只需要关注它的值如果值等于`200`或者其他`2`字头的值,那么我们的请求是成功的。通过`Response`对象的`json()`方法可以将返回的JSON格式的数据直接处理成Python字典非常方便。天行数据国内新闻接口返回的JSON格式的数据部分如下图所示。
<img src="https://gitee.com/jackfrued/mypic/raw/master/20210820154455.png" width="100%">
<img src="https://github.com/jackfrued/mypic/raw/master/20210820154455.png" width="100%">
> **提示**上面代码中的APIKey需要换成自己在天行数据网站申请的APIKey。天行数据网站上还有提供了很多非常有意思的API接口例如垃圾分类、周公解梦等大家可以仿照上面的代码来调用这些接口。每个接口都有对应的接口文档文档中有关于如何使用接口的详细说明。

View File

@ -175,7 +175,7 @@ wb.save('demo.xlsx')
运行上面的代码打开生成的Excel文件效果如下图所示。
<img src="https://gitee.com/jackfrued/mypic/raw/master/20210819235009.png" alt="image-20210819235009026" width="75%">
<img src="https://github.com/jackfrued/mypic/raw/master/20210819235009.png" alt="image-20210819235009026" width="75%">
### 简单的总结

View File

@ -87,7 +87,7 @@ document.save('demo.docx')
执行上面的代码打开生成的Word文档效果如下图所示。
<img src="https://gitee.com/jackfrued/mypic/raw/master/20210820002742.png" alt="image-20210820002742341" width="40%">&nbsp;&nbsp;<img src="https://gitee.com/jackfrued/mypic/raw/master/20210820002843.png" alt="image-20210820002843696" width="40%">
<img src="https://github.com/jackfrued/mypic/raw/master/20210820002742.png" alt="image-20210820002742341" width="40%">&nbsp;&nbsp;<img src="https://github.com/jackfrued/mypic/raw/master/20210820002843.png" alt="image-20210820002843696" width="40%">
对于一个已经存在的Word文件我们可以通过下面的代码去遍历它所有的段落并获取对应的内容。
@ -121,7 +121,7 @@ for no, p in enumerate(doc.paragraphs):
按照上面的思路,我们首先编辑一个离职证明的模板文件,如下图所示。
<img src="https://gitee.com/jackfrued/mypic/raw/master/20210820004223.png" alt="image-20210820004223731" width="75%" style="border:1px solid black"/>
<img src="https://github.com/jackfrued/mypic/raw/master/20210820004223.png" alt="image-20210820004223731" width="75%" style="border:1px solid black"/>
接下来我们读取该文件将占位符替换为真实信息就可以生成一个新的Word文档如下所示。
@ -182,7 +182,7 @@ for emp_dict in employees:
执行上面的代码会在当前路径下生成三个Word文档如下图所示。
<img src="https://gitee.com/jackfrued/mypic/raw/master/20210820004825.png" alt="image-20210820004825183" width="50%">
<img src="https://github.com/jackfrued/mypic/raw/master/20210820004825.png" alt="image-20210820004825183" width="50%">
### 生成PowerPoint
@ -238,7 +238,7 @@ pres.save('test.pptx')
运行上面的代码生成的PowerPoint文件如下图所示。
<img src="https://gitee.com/jackfrued/mypic/raw/master/20210820010306.png" alt="image-20210820010306008" width="75%" />
<img src="https://github.com/jackfrued/mypic/raw/master/20210820010306.png" alt="image-20210820010306008" width="75%" />
### 简单的总结

View File

@ -40,7 +40,7 @@ Pillow中最为重要的是`Image`类,可以通过`Image`模块的`open`函数
image.show()
```
<img src="https://gitee.com/jackfrued/mypic/raw/master/20210803202628.png" width="80%">
<img src="https://github.com/jackfrued/mypic/raw/master/20210803202628.png" width="80%">
2. 剪裁图像
@ -49,7 +49,7 @@ Pillow中最为重要的是`Image`类,可以通过`Image`模块的`open`函数
image.crop((80, 20, 310, 360)).show()
```
<img src="https://gitee.com/jackfrued/mypic/raw/master/20210803202701.png" width="80%">
<img src="https://github.com/jackfrued/mypic/raw/master/20210803202701.png" width="80%">
3. 生成缩略图
@ -59,7 +59,7 @@ Pillow中最为重要的是`Image`类,可以通过`Image`模块的`open`函数
image.show()
```
<img src="https://gitee.com/jackfrued/mypic/raw/master/20210803202722.png" width="100%">
<img src="https://github.com/jackfrued/mypic/raw/master/20210803202722.png" width="100%">
4. 缩放和黏贴图像
@ -77,7 +77,7 @@ Pillow中最为重要的是`Image`类,可以通过`Image`模块的`open`函数
luohao_image.show()
```
<img src="https://gitee.com/jackfrued/mypic/raw/master/20210803202749.png" width="80%">
<img src="https://github.com/jackfrued/mypic/raw/master/20210803202749.png" width="80%">
5. 旋转和翻转
@ -91,7 +91,7 @@ Pillow中最为重要的是`Image`类,可以通过`Image`模块的`open`函数
image.transpose(Image.FLIP_TOP_BOTTOM).show()
```
<img src="https://gitee.com/jackfrued/mypic/raw/master/20210803202829.png" width="80%">
<img src="https://github.com/jackfrued/mypic/raw/master/20210803202829.png" width="80%">
6. 操作像素
@ -103,7 +103,7 @@ Pillow中最为重要的是`Image`类,可以通过`Image`模块的`open`函数
image.show()
```
<img src="https://gitee.com/jackfrued/mypic/raw/master/20210803202932.png" width="80%">
<img src="https://github.com/jackfrued/mypic/raw/master/20210803202932.png" width="80%">
7. 滤镜效果
@ -115,13 +115,13 @@ Pillow中最为重要的是`Image`类,可以通过`Image`模块的`open`函数
image.filter(ImageFilter.CONTOUR).show()
```
<img src="https://gitee.com/jackfrued/mypic/raw/master/20210803202953.png" width="80%">
<img src="https://github.com/jackfrued/mypic/raw/master/20210803202953.png" width="80%">
### 使用Pillow绘图
Pillow中有一个名为`ImageDraw`的模块,该模块的`Draw`函数会返回一个`ImageDraw`对象,通过`ImageDraw`对象的`arc`、`line`、`rectangle`、`ellipse`、`polygon`等方法,可以在图像上绘制出圆弧、线条、矩形、椭圆、多边形等形状,也可以通过该对象的`text`方法在图像上添加文字。
<img src="https://gitee.com/jackfrued/mypic/raw/master/20210803203016.png" width="80%">
<img src="https://github.com/jackfrued/mypic/raw/master/20210803203016.png" width="80%">
要绘制如上图所示的图像,完整的代码如下所示。

View File

@ -10,9 +10,9 @@
我们先尝试一下发送一封极为简单的邮件,该邮件不包含附件、图片以及其他超文本内容。发送邮件首先需要接入邮件服务器,我们可以自己架设邮件服务器,这件事情对新手并不友好,但是我们可以选择使用第三方提供的邮件服务。例如,我在<www.126.com>已经注册了账号登录成功之后就可以在设置中开启SMTP服务这样就相当于获得了邮件服务器具体的操作如下所示。
<img src="https://gitee.com/jackfrued/mypic/raw/master/20210820190307.png" alt="image-20210820190306861" width="95%">
<img src="https://github.com/jackfrued/mypic/raw/master/20210820190307.png" alt="image-20210820190306861" width="95%">
![image-20210820190816557](https://gitee.com/jackfrued/mypic/raw/master/20210820190816.png)
![image-20210820190816557](https://github.com/jackfrued/mypic/raw/master/20210820190816.png)
用手机扫码上面的二维码可以通过发送短信的方式来获取授权码,短信发送成功后,点击“我已发送”就可以获得授权码。授权码需要妥善保管,因为一旦泄露就会被其他人冒用你的身份来发送邮件。接下来,我们就可以编写发送邮件的代码了,如下所示。
@ -147,7 +147,7 @@ def send_email(*, from_user, to_users, subject='', content='', filenames=[]):
发送短信也是项目中常见的功能,网站的注册码、验证码、营销信息基本上都是通过短信来发送给用户的。发送短信需要三方平台的支持,下面我们以[螺丝帽平台](https://luosimao.com/)为例为大家介绍如何用Python程序发送短信。注册账号和购买短信服务的细节我们不在这里进行赘述大家可以咨询平台的客服。
![image-20210820194420911](https://gitee.com/jackfrued/mypic/raw/master/20210820194421.png)
![image-20210820194420911](https://github.com/jackfrued/mypic/raw/master/20210820194421.png)
接下来,我们可以通过`requests`库向平台提供的短信网关发起一个HTTP请求通过将接收短信的手机号和短信内容作为参数就可以发送短信代码如下所示。
@ -189,11 +189,11 @@ if __name__ == '__main__':
上面请求螺丝帽的短信网关`http://sms-api.luosimao.com/v1/send.json`会返回JSON格式的数据如果返回`{'error': 0, 'msg': 'OK'}`就说明短信已经发送成功了,如果`error`的值不是`0`,可以通过查看官方的[开发文档](https://luosimao.com/docs/api/)了解到底哪个环节出了问题。螺丝帽平台常见的错误类型如下图所示。
<img src="https://gitee.com/jackfrued/mypic/raw/master/20210820195505.png" alt="image-20210820195505761" style="zoom:50%;">
<img src="https://github.com/jackfrued/mypic/raw/master/20210820195505.png" alt="image-20210820195505761" style="zoom:50%;">
目前大多数短信平台都会要求短信内容必须附上签名下图是我在螺丝帽平台配置的短信签名“【Python小课】”。有些涉及到敏感内容的短信还需要提前配置短信模板有兴趣的读者可以自行研究。一般情况下平台为了防范短信被盗用还会要求设置“IP白名单”不清楚如何配置的可以咨询平台客服。
![image-20210820194653785](https://gitee.com/jackfrued/mypic/raw/master/20210820194653.png)
![image-20210820194653785](https://github.com/jackfrued/mypic/raw/master/20210820194653.png)
当然国内的短信平台很多,读者可以根据自己的需要进行选择(通常会考虑费用预算、短信达到率、使用的难易程度等指标),如果需要在商业项目中使用短信服务建议购买短信平台提供的套餐服务。

View File

@ -100,7 +100,7 @@ if m1 and m2:
下面这张图是截止到2017年底国内三家运营商推出的手机号段。
<img src="https://gitee.com/jackfrued/mypic/raw/master/20210803203134.png">
<img src="https://github.com/jackfrued/mypic/raw/master/20210803203134.png">
```Python
import re

View File

@ -40,7 +40,7 @@ Disallow: /
图1. 百度搜索淘宝的结果
![](https://gitee.com/jackfrued/mypic/raw/master/20210824004320.png)
![](https://github.com/jackfrued/mypic/raw/master/20210824004320.png)
下面是豆瓣网的[`robots.txt`](https://www.douban.com/robots.txt)文件,大家可以自行解读,看看它做出了什么样的限制。
@ -89,19 +89,19 @@ Disallow: /j/
图2. HTTP请求
![http-request](https://gitee.com/jackfrued/mypic/raw/master/20210824003915.png)
![http-request](https://github.com/jackfrued/mypic/raw/master/20210824003915.png)
HTTP 请求通常是由请求行、请求头、空行、消息体四个部分构成如果没有数据发给服务器消息体就不是必须的部分。请求行中包含了请求方法GET、POST 等,如下表所示)、资源路径和协议版本;请求头由若干键值对构成,包含了浏览器、编码方式、首选语言、缓存策略等信息;请求头的后面是空行和消息体。
<img src="https://gitee.com/jackfrued/mypic/raw/master/20210825002720.PNG" width="65%">
<img src="https://github.com/jackfrued/mypic/raw/master/20210825002720.PNG" width="65%">
图3. HTTP响应
![http-response](https://gitee.com/jackfrued/mypic/raw/master/20210824234158.png)
![http-response](https://github.com/jackfrued/mypic/raw/master/20210824234158.png)
HTTP 响应通常是由响应行、响应头、空行、消息体四个部分构成,其中消息体是服务响应的数据,可能是 HTML 页面也有可能是JSON或二进制数据等。响应行中包含了协议版本和响应状态码响应状态码有很多种常见的如下表所示。
<img src="https://gitee.com/jackfrued/mypic/raw/master/20210825002802.PNG" width="65%">
<img src="https://github.com/jackfrued/mypic/raw/master/20210825002802.PNG" width="65%">
#### 相关工具
@ -115,11 +115,11 @@ HTTP 响应通常是由响应行、响应头、空行、消息体四个部分构
- 网络Network用于 HTTP 请求、HTTP 响应以及与网络连接相关的信息。
- 应用Application用于查看浏览器本地存储、后台任务等内容本地存储主要包括Cookie、Local Storage、Session Storage等。
![chrome-developer-tools](https://gitee.com/jackfrued/mypic/raw/master/20210824004034.png)
![chrome-developer-tools](https://github.com/jackfrued/mypic/raw/master/20210824004034.png)
2. Postman功能强大的网页调试与 RESTful 请求工具。Postman可以帮助我们模拟请求非常方便的定制我们的请求以及查看服务器的响应。
![postman](https://gitee.com/jackfrued/mypic/raw/master/20210824004048.png)
![postman](https://github.com/jackfrued/mypic/raw/master/20210824004048.png)
3. HTTPie命令行HTTP客户端。
@ -187,7 +187,7 @@ HTTP 响应通常是由响应行、响应头、空行、消息体四个部分构
一个基本的爬虫通常分为数据采集(网页下载)、数据处理(网页解析)和数据存储(将有用的信息持久化)三个部分的内容,当然更为高级的爬虫在数据采集和处理时会使用并发编程或分布式技术,这就需要有调度器(安排线程或进程执行对应的任务)、后台管理程序(监控爬虫的工作状态以及检查数据抓取的结果)等的参与。
![crawler-workflow](https://gitee.com/jackfrued/mypic/raw/master/20210824004107.png)
![crawler-workflow](https://github.com/jackfrued/mypic/raw/master/20210824004107.png)
一般来说,爬虫的工作流程包括以下几个步骤:

View File

@ -6,7 +6,7 @@
要使用 Python 获取网络数据,我们推荐大家使用名为`requests` 的三方库,这个库我们在之前的课程中其实已经使用过了。按照官方网站的解释,`requests`是基于 Python 标准库进行了封装,简化了通过 HTTP 或 HTTPS 访问网络资源的操作。上课我们提到过HTTP 是一个请求响应式的协议,当我们在浏览器中输入正确的 [URL](https://developer.mozilla.org/zh-CN/docs/Learn/Common_questions/What_is_a_URL)(通常也称为网址)并按下 Enter 键时,我们就向网络上的 [Web 服务器](https://developer.mozilla.org/zh-CN/docs/Learn/Common_questions/What_is_a_web_server)发送了一个 HTTP 请求,服务器在收到请求后会给我们一个 HTTP 响应。在 Chrome 浏览器中的菜单中打开“开发者工具”切换到“Network”选项卡就能够查看 HTTP 请求和响应到底是什么样子的,如下图所示。
![](https://gitee.com/jackfrued/mypic/raw/master/20210822093434.png)
![](https://github.com/jackfrued/mypic/raw/master/20210822093434.png)
通过`requests`库,我们可以让 Python 程序向浏览器一样向 Web 服务器发起请求,并接收服务器返回的响应,从响应中我们就可以提取出想要的数据。浏览器呈现给我们的网页是用 [HTML](https://developer.mozilla.org/zh-CN/docs/Web/HTML) 编写的,浏览器相当于是 HTML 的解释器环境,我们看到的网页中的内容都包含在 HTML 的标签中。在获取到 HTML 代码后,就可以从标签的属性或标签体中提取内容。下面例子演示了如何获取网页 HTML 代码,我们通过`requests`库的`get`函数,获取了搜狐首页的代码。
@ -54,7 +54,7 @@ with open('baidu.png', 'wb') as file:
接下来,我们以“豆瓣电影”为例,为大家讲解如何编写爬虫代码。按照上面提供的方法,我们先使用`requests`获取到网页的HTML代码然后将整个代码看成一个长字符串这样我们就可以使用正则表达式的捕获组从字符串提取我们需要的内容。下面的代码演示了如何从[豆瓣电影](https://movie.douban.com/)获取排前250名的电影的名称。[豆瓣电影Top250](https://movie.douban.com/top250)的页面结构和对应代码如下图所示可以看出每页共展示了25部电影如果要获取到 Top250 数据我们共需要访问10个页面对应的地址是<https://movie.douban.com/top250?start=xxx>,这里的`xxx`如果为`0`就是第一页,如果`xxx`的值是`100`,那么我们可以访问到第五页。为了代码简单易读,我们只获取电影的标题和评分。
![](https://gitee.com/jackfrued/mypic/raw/master/20210822093447.png)
![](https://github.com/jackfrued/mypic/raw/master/20210822093447.png)
```Python
import random
@ -92,7 +92,7 @@ for page in range(1, 11):
下面以[蘑菇代理](http://www.moguproxy.com/)为例,为大家讲解商业 IP 代理的使用方法。首先需要在该网站注册一个账号,注册账号后就可以[购买](http://www.moguproxy.com/buy)相应的套餐来获得商业 IP 代理。作为商业用途,建议大家购买不限量套餐,这样可以根据实际需要获取足够多的代理 IP 地址;作为学习用途,可以购买包时套餐或根据自己的需求来决定。蘑菇代理提供了两种接入代理的方式,分别是 API 私密代理和 HTTP 隧道代理,前者是通过请求蘑菇代理的 API 接口获取代理服务器地址,后者是直接使用统一的入口(蘑菇代理提供的域名)进行接入。
<img src="https://gitee.com/jackfrued/mypic/raw/master/20210829080647.png" width="75%">
<img src="https://github.com/jackfrued/mypic/raw/master/20210829080647.png" width="75%">
下面我们以HTTP隧道代理为例为大家讲解接入 IP 代理的方式,大家也可以直接参考蘑菇代理官网提供的代码来为爬虫设置代理。
@ -127,6 +127,8 @@ for page in range(1, 11):
```
> **说明**:上面的代码需要修改`APP_KEY`为自己创建的订单对应的`Appkey`值,这个值可以在用户中心用户订单中查看到。蘑菇代理提供了免费的 API 代理和 HTTP 隧道代理试用,但是试用的代理接通率不能保证,建议大家还是直接购买一个在自己支付能力范围内的代理服务来体验。
>
> **另注**:蘑菇代理目前已经停止服务了,大家可以按照上面讲解的方式使用其他商业代理即可。
### 简单的总结

View File

@ -6,7 +6,7 @@
我们在浏览器中打开任意一个网站,然后通过鼠标右键菜单,选择“显示网页源代码”菜单项,就可以看到网页对应的 HTML 代码。
![image-20210822094218269](https://gitee.com/jackfrued/mypic/raw/master/20210822094218.png)
![](https://github.com/jackfrued/mypic/raw/master/20210822094218.png)
代码的第`1`行是文档类型声明,第`2`行的`<html>`标签是整个页面根标签的开始标签,最后一行是根标签的结束标签`</html>`。`<html>`标签下面有两个子标签`<head>`和`<body>`,放在`<body>`标签下的内容会显示在浏览器窗口中,这部分内容是网页的主体;放在`<head>`标签下的内容不会显示在浏览器窗口中但是却包含了页面重要的元信息通常称之为网页的头部。HTML 页面大致的代码结构如下所示。
@ -78,7 +78,7 @@ XPath还支持通配符用法如下所示。
当然,如果不理解或不熟悉 XPath 语法,可以在浏览器的开发者工具中按照如下所示的方法查看元素的 XPath 语法,下图是在 Chrome 浏览器的开发者工具中查看豆瓣网电影详情信息中影片标题的 XPath 语法。
![](https://gitee.com/jackfrued/mypic/raw/master/20210822093707.png)
![](https://github.com/jackfrued/mypic/raw/master/20210822093707.png)
实现 XPath 解析需要三方库`lxml` 的支持,可以使用下面的命令安装`lxml`。

View File

@ -10,7 +10,7 @@
在程序中使用多线程技术通常都会带来不言而喻的好处,最主要的体现在提升程序的性能和改善用户体验,今天我们使用的软件几乎都用到了多线程技术,这一点可以利用系统自带的进程监控工具(如 macOS 中的“活动监视器”、Windows 中的“任务管理器”)来证实,如下图所示。
<img src="https://gitee.com/jackfrued/mypic/raw/master/20210822094243.png" width="80%">
<img src="https://github.com/jackfrued/mypic/raw/master/20210822094243.png" width="80%">
这里,我们还需要跟大家再次强调两个概念:**并发**concurrency和**并行**parallel。**并发**通常是指同一时刻只能有一条指令执行,但是多个线程对应的指令被快速轮换地执行。比如一个处理器,它先执行线程 A 的指令一段时间,再执行线程 B 的指令一段时间,再切回到线程 A 执行一段时间。由于处理器执行指令的速度和切换的速度极快,人们完全感知不到计算机在这个过程中有多个线程切换上下文执行的操作,这就使得宏观上看起来多个线程在同时运行,但微观上其实只有一个线程在执行。**并行**是指同一时刻,有多条指令在多个处理器上同时执行,并行必须要依赖于多个处理器,不论是从宏观上还是微观上,多个线程可以在同一时刻一起执行的。很多时候,我们并不用严格区分并发和并行两个词,所以我们有时候也把 Python 中的多线程、多进程以及异步 I/O 都视为实现并发编程的手段但实际上前面两者也可以实现并行编程当然这里还有一个全局解释器锁GIL的问题我们稍后讨论。

View File

@ -4,7 +4,7 @@
“360图片”网站的页面使用了 [Ajax](https://developer.mozilla.org/zh-CN/docs/Web/Guide/AJAX) 技术,这是很多网站都会使用的一种异步加载数据和局部刷新页面的技术。简单的说,页面上的图片都是通过 JavaScript 代码异步获取 JSON 数据并动态渲染生成的,而且整个页面还使用了瀑布式加载(一边向下滚动,一边加载更多的图片)。我们在浏览器的“开发者工具”中可以找到提供动态内容的数据接口,如下图所示,我们需要的图片信息就在服务器返回的 JSON 数据中。
<img src="https://gitee.com/jackfrued/mypic/raw/master/20211205221352.png" style="zoom:50%;">
<img src="https://github.com/jackfrued/mypic/raw/master/20211205221352.png" style="zoom:50%;">
例如要获取“美女”频道的图片我们可以请求如下所示的URL其中参数`ch`表示请求的频道,`=`后面的参数值`beauty`就代表了“美女”频道,参数`sn`相当于是页码,`0`表示第一页(共`30`张图片),`30`表示第二页,`60`表示第三页,以此类推。

View File

@ -6,7 +6,7 @@
Selenium 是一个自动化测试工具,利用它可以驱动浏览器执行特定的行为,最终帮助爬虫开发者获取到网页的动态内容。简单的说,只要我们在浏览器窗口中能够看到的内容,都可以使用 Selenium 获取到,对于那些使用了 JavaScript 动态渲染技术的网站Selenium 会是一个重要的选择。下面,我们还是以 Chrome 浏览器为例,来讲解 Selenium 的用法,大家需要先安装 Chrome 浏览器并下载它的驱动。Chrome 浏览器的驱动程序可以在[ChromeDriver官网](https://chromedriver.chromium.org/downloads)进行下载,驱动的版本要跟浏览器的版本对应,如果没有完全对应的版本,就选择版本代号最为接近的版本。
<img src="https://gitee.com/jackfrued/mypic/raw/master/20220310134558.png" style="zoom: 35%">
<img src="https://github.com/jackfrued/mypic/raw/master/20220310134558.png" style="zoom: 35%">
### 使用Selenium
@ -136,7 +136,7 @@ browser.execute_script('document.documentElement.scrollTop = document.documentEl
有一些网站专门针对 Selenium 设置了反爬措施,因为使用 Selenium 驱动的浏览器,在控制台中可以看到如下所示的`webdriver`属性值为`true`,如果要绕过这项检查,可以在加载页面之前,先通过执行 JavaScript 代码将其修改为`undefined`。
<img src="https://gitee.com/jackfrued/mypic/raw/master/20220310154246.png" style="zoom:50%">
<img src="https://github.com/jackfrued/mypic/raw/master/20220310154246.png" style="zoom:50%">
另一方面我们还可以将浏览器窗口上的“Chrome正受到自动测试软件的控制”隐藏掉完整的代码如下所示。

View File

@ -6,7 +6,7 @@
Scrapy 是基于 Python 的一个非常流行的网络爬虫框架,可以用来抓取 Web 站点并从页面中提取结构化的数据。下图展示了 Scrapy 的基本架构,其中包含了主要组件和系统的数据处理流程(图中带数字的红色箭头)。
![](https://gitee.com/jackfrued/mypic/raw/master/20210824003638.png)
![](https://github.com/jackfrued/mypic/raw/master/20210824003638.png)
#### Scrapy的组件

View File

@ -20,7 +20,7 @@
**ER模型**,全称为**实体关系模型**Entity-Relationship Model由美籍华裔计算机科学家陈品山先生提出是概念数据模型的高层描述方式如下图所示。
<img src="https://gitee.com/jackfrued/mypic/raw/master/20210826003119.png" width="75%">
<img src="https://github.com/jackfrued/mypic/raw/master/20210826003119.png" width="75%">
- 实体 - 矩形框
- 属性 - 椭圆框
@ -29,7 +29,7 @@
实际项目开发中我们可以利用数据库建模工具PowerDesigner来绘制概念数据模型其本质就是 ER 模型),然后再设置好目标数据库系统,将概念模型转换成物理模型,最终生成创建二维表的 SQL很多工具都可以根据我们设计的物理模型图以及设定的目标数据库来导出 SQL 或直接生成数据表)。
![](https://gitee.com/jackfrued/mypic/raw/master/20210826003212.png)
![](https://github.com/jackfrued/mypic/raw/master/20210826003212.png)
5. 关系数据库产品。
- [Oracle](https://www.oracle.com/index.html) - 目前世界上使用最为广泛的数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系数据库,它是一个完备关系的产品;作为分布式数据库,它实现了分布式处理的功能。在 Oracle 最新的 12c 版本中,还引入了多承租方架构,使用该架构可轻松部署和管理数据库云。
@ -52,85 +52,85 @@ MySQL 在过去由于性能高、成本低、可靠性好,已经成为最流
1. 通过[官方网站](https://www.mysql.com/)提供的[下载链接](https://dev.mysql.com/downloads/windows/installer/8.0.html)下载“MySQL社区版服务器”安装程序如下图所示建议大家下载离线安装版的MySQL Installer。
<img src="https://gitee.com/jackfrued/mypic/raw/master/20211105230905.png" style="zoom:50%">
<img src="https://github.com/jackfrued/mypic/raw/master/20211105230905.png" style="zoom:50%">
2. 运行 Installer按照下面的步骤进行安装。
- 选择自定义安装。
<img src="https://gitee.com/jackfrued/mypic/raw/master/20211105231152.jpg" style="zoom:35%">
<img src="https://github.com/jackfrued/mypic/raw/master/20211105231152.jpg" style="zoom:35%">
- 选择需要安装的组件。
<img src="https://gitee.com/jackfrued/mypic/raw/master/20211105231255.jpg" style="zoom:35%">
<img src="https://github.com/jackfrued/mypic/raw/master/20211105231255.jpg" style="zoom:35%">
- 如果缺少依赖项,需要先安装依赖项。
<img src="https://gitee.com/jackfrued/mypic/raw/master/20211105231620.png" style="zoom:35%">
<img src="https://github.com/jackfrued/mypic/raw/master/20211105231620.png" style="zoom:35%">
- 准备开始安装。
<img src="https://gitee.com/jackfrued/mypic/raw/master/20211105231719.jpg" style="zoom:35%">
<img src="https://github.com/jackfrued/mypic/raw/master/20211105231719.jpg" style="zoom:35%">
- 安装完成。
<img src="https://gitee.com/jackfrued/mypic/raw/master/20211105232024.jpg" style="zoom:35%">
<img src="https://github.com/jackfrued/mypic/raw/master/20211105232024.jpg" style="zoom:35%">
- 准备执行配置向导。
<img src="https://gitee.com/jackfrued/mypic/raw/master/20211105231815.jpg" style="zoom:35%">
<img src="https://github.com/jackfrued/mypic/raw/master/20211105231815.jpg" style="zoom:35%">
3. 执行安装后的配置向导。
- 配置服务器类型和网络。
<img src="https://gitee.com/jackfrued/mypic/raw/master/20211105232109.jpg" style="zoom:35%">
<img src="https://github.com/jackfrued/mypic/raw/master/20211105232109.jpg" style="zoom:35%">
- 配置认证方法(保护密码的方式)。
<img src="https://gitee.com/jackfrued/mypic/raw/master/20211105232408.jpg" style="zoom:35%">
<img src="https://github.com/jackfrued/mypic/raw/master/20211105232408.jpg" style="zoom:35%">
- 配置用户和角色。
<img src="https://gitee.com/jackfrued/mypic/raw/master/20211105232521.jpg" style="zoom:35%">
<img src="https://github.com/jackfrued/mypic/raw/master/20211105232521.jpg" style="zoom:35%">
- 配置Windows服务名以及是否开机自启。
<img src="https://gitee.com/jackfrued/mypic/raw/master/20211105232608.jpg" style="zoom:35%">
<img src="https://github.com/jackfrued/mypic/raw/master/20211105232608.jpg" style="zoom:35%">
- 配置日志。
<img src="https://gitee.com/jackfrued/mypic/raw/master/20211105232641.jpg" style="zoom:35%">
<img src="https://github.com/jackfrued/mypic/raw/master/20211105232641.jpg" style="zoom:35%">
- 配置高级选项。
<img src="https://gitee.com/jackfrued/mypic/raw/master/20211105232724.jpg" alt="ACAC15B8633133B65476286A49BFBD7E" style="zoom:35%">
<img src="https://github.com/jackfrued/mypic/raw/master/20211105232724.jpg" alt="ACAC15B8633133B65476286A49BFBD7E" style="zoom:35%">
- 应用配置。
<img src="https://gitee.com/jackfrued/mypic/raw/master/20211105232800.jpg" style="zoom:35%">
<img src="https://github.com/jackfrued/mypic/raw/master/20211105232800.jpg" style="zoom:35%">
4. 可以在 Windows 系统的“服务”窗口中启动或停止 MySQL。
<img src="https://gitee.com/jackfrued/mypic/raw/master/20211105232926.jpg" style="zoom:50%">
<img src="https://github.com/jackfrued/mypic/raw/master/20211105232926.jpg" style="zoom:50%">
5. 配置 PATH 环境变量,以便在命令行提示符窗口使用 MySQL 客户端工具。
- 打开 Windows 的“系统”窗口并点击“高级系统设置”。
<img src="https://gitee.com/jackfrued/mypic/raw/master/20211105233054.jpg" style="zoom:50%">
<img src="https://github.com/jackfrued/mypic/raw/master/20211105233054.jpg" style="zoom:50%">
- 在“系统属性”的“高级”窗口,点击“环境变量”按钮。
<img src="https://gitee.com/jackfrued/mypic/raw/master/20211105233312.jpg" style="zoom:50%">
<img src="https://github.com/jackfrued/mypic/raw/master/20211105233312.jpg" style="zoom:50%">
- 修改PATH环境变量将MySQL安装路径下的`bin`文件夹的路径配置到PATH环境变量中。
<img src="https://gitee.com/jackfrued/mypic/raw/master/20211105233359.jpg" style="zoom:50%">
<img src="https://github.com/jackfrued/mypic/raw/master/20211105233359.jpg" style="zoom:50%">
- 配置完成后,可以尝试在“命令提示符”下使用 MySQL 的命令行工具。
<img src="https://gitee.com/jackfrued/mypic/raw/master/20211105233643.jpg" style="zoom:50%">
<img src="https://github.com/jackfrued/mypic/raw/master/20211105233643.jpg" style="zoom:50%">
#### Linux 环境
@ -273,22 +273,22 @@ MySQL 在过去由于性能高、成本低、可靠性好,已经成为最流
- MySQL Workbench官方工具
<img src="https://gitee.com/jackfrued/mypic/raw/master/20211106063939.png" style="zoom:50%">
<img src="https://github.com/jackfrued/mypic/raw/master/20211106063939.png" style="zoom:50%">
- Navicat for MySQL界面简单友好
<img src="https://gitee.com/jackfrued/mypic/raw/master/20210521152457.png" style="zoom:50%;">
<img src="https://github.com/jackfrued/mypic/raw/master/20210521152457.png" style="zoom:50%;">
#### macOS环境
macOS 系统安装 MySQL 是比较简单的,只需要从刚才说到的官方网站下载 DMG 安装文件并运行就可以了,下载的时候需要根据自己使用的是 Intel 的芯片还是苹果的 M1 芯片选择下载链接,如下图所示。
<img src="https://gitee.com/jackfrued/mypic/raw/master/20211121215901.png" style="zoom:50%;">
<img src="https://github.com/jackfrued/mypic/raw/master/20211121215901.png" style="zoom:50%;">
安装成功后可以在“系统偏好设置”中找到“MySQL”在如下所示的画面中可以启动和停止 MySQL 服务器,也可以对 MySQL 核心文件的路径进行配置。
<img src="https://gitee.com/jackfrued/mypic/raw/master/20211121215153.png" style="zoom:40%;">
<img src="https://github.com/jackfrued/mypic/raw/master/20211121215153.png" style="zoom:40%;">
### MySQL 基本命令