作为学生,你想不想要这样一种服务:教务系统更新成绩后,你的手机上会自动收到成绩通知?
作为白领,你想不想要这样一种服务:公司发布了晋升、放假等新闻时,你的手机上会第一时间收到新闻?
作为……
什么,你还没学网页设计?没关系,课程直接用控制台写,不需要你设计网页!
什么,你感觉技术特别杂?没关系,课程第一部分“粗暴”地列出了你需要学习的东西,跟着它走,你也可以完成课程!
本达人课共包含以下三大部分:
第一部分(第 01-02 课),带您初步认识网页爬取技术,包括 Python 基础语法和网页基础概念讲解,让你对网页爬取有一个基础认识。
第二部分(第 03-11 课),核心技术讲解,包括开发环境的搭建、数据库的使用、邮箱接口、短信接口集成等技术的讲解,为后面的实战部分打好基础。
第三部分(第 12-15 课),实战进行时,通过项目实战开发,带您从头到尾开发一个学生成绩短息通知系统,并部署至服务器中,全方位提升你的技术实力与思维方式。
潘舒新,现就职于某金融网络公司担任后台开发工程师,Udacity 官方翻译组成员,长期活跃于各大论坛,擅长 Java、Python 开发。
这个事情还要从 Google 或者百度说起。目前的搜索引擎,一般都拥有自己的一套网页检索算法,方便大家迅速的找到需要的网页。但是,当我们在使用各种搜索引擎的时候,是否思考过这样一个问题:搜索引擎是如何搜索到最新网页的信息,并且展现在搜索结果页上的呢?答案就是网页爬虫。
百度蜘蛛,是百度搜索引擎的一个自动程序。它的作用是访问收集整理互联网上的网页、图片、视频等内容,然后分门别类建立索引数据库,使用户能在百度搜索引擎中搜索到您网站的网页、图片、视频等内容。
——来源 · 百度百科《百度蜘蛛》
在最初,网页爬虫技术似乎就只是为搜索引擎服务的:一方面是搜索引擎的技术性需要,另一方面是当时的互联网信息,还没有这么庞大,最终的一点是,当时的用户对及时性服务还不是这么迫切。但是现在,网页爬虫早已挣脱了之前的技术局限性,被广泛的应用在各个领域中。例如前阵子大放光彩的“即刻”App,其核心就是网页爬虫技术。
网页爬虫在不断发展中也产生了很多新颖并且实用的框架,也从当初的特定编程语言,变成了现在的五花八门、各放异彩的编程语言。然而,在众多的编程语言中,Python 无疑是最为重要,也是最为广泛的语言,本达人课,我们就以 Python 作为我们的主力编程语言,助力我们的“起飞”。
无论你之前学过什么语言,无论你是否了解 Python,在正式学习本课程前,你需要告诉自己:Python 作为高级编程语言,哪怕你没有编程的基础,你也可以高傲而且自豪地去使用它!
本门课程无意争辩到底哪门语言的效率最高,亦或是哪个编程语言是最好的。选择Python 作为本门课程的主力编程语言的理由主要有以下原因:
Python 给自己的定义,就是一个“胶水”语言:哪里需要哪里用。或许和 C++、Go 等一些语言相比,Python 的运行速度很慢,但是需要指出的是,这里的“速度慢”,仅仅是相比较而言。例如,发送邮件,使用 C++ 需要0.1秒,Python 则需要1秒。虽然速度相差10倍,但是作为日常开发而言,Python 的速度已经完全满足了我们的开发要求。
Python 网络爬虫技术本身发展特别快,甚至可以说,网页爬虫技术随着 Python 的发展而发展。从最初 Python 自带的 urllib 库,到现在流行的 BeautifulSoup4、Selenium 等第三方框架。可以说,在网络爬虫的世界中,Python 一直处于“最强王者”的地位。
此图来自于百度指数(2018年4月23日)。可以发现的是,从2014年开始,Python 爬虫的搜索指数呈大幅上升的趋势,也同时印证了 Python 在网页爬虫领域上的地位。
在全球知名的 Github 网站上,搜索“爬虫”,有5077项使用 Python 写的网页爬虫项目,比排名第二的 Java 多出了将近3.5倍!
早些时候由于个人兴趣原因研究并使用了 Python,在使用时发现,国内关于 Python 网页爬虫的教程虽然很多、内容丰富,但是往往涉及到特别多的前期准备,并不适合 Python 新人上手。为了帮助一位学弟尽快的入手网页爬虫技术,我总结了自己的网页爬虫学习路线,结合他的实际应用,做出了一套适合新手入门学习的 Python 网页爬虫教程。在这套教程的帮助下,学弟很快掌握了核心的技术栈,并且顺利的完成了我对他的毕业要求。
本达人课,首先介绍 Python 和网页的一些基础知识,带你快速的学习 Python 的基础语法,再一起讨论网页爬虫框架的使用,如何通过邮件或者短信发送我们需要的信息,最后使用我们学到的技术实现一个在服务器运行的成绩通知短信系统,进行实战演练。
需要强调的是,Python 网页爬虫技术栈经过近几年的发展,可以说已经自成一脉。如果要将这些技术全部展现出来,不仅工作量巨大,而且涉及的技术对于新手也太过深奥,因为本达人课先带大家掌握 Python 网页爬虫的入门部分,后面大家再进阶学习也就容易很多了。
该系列文章适合以下人群阅读:
在学习本课程之前,希望你有一些基础的开发技能,例如:独立使用 C++ 写出一个从1加到10的控制台程序。
开发环境:
使用到的软件:
点击了解更多《Python 短信通知系统开发实战》
本文采用的是 Python 3.x(具体来说,是 Python 3.5)。采用该版本主要原因有:
本门课程假定你使用的是 Windows 操作系统,因为这能够让你在接下来的教程中,稍微体会到编码问题的棘手性(当然,我们也会最终解决这个问题)。如果你使用的是 Unix 或者是类 Unix 系统,相信你已经对编码问题有了初步的了解,欢迎你向其他同学传授一下你的人生经验。
作为一名开发人员,推荐大家前往 Python 官方网站下载相应的安装包。为了保证接下来我们能够顺利的使用第三方框架,安装的时候请勾选 安装 pip
,如果你认为自己会忘记,那就直接一直点击 Next Step
吧!
虽然 Python 自带了 IDE ,但是对于初学者而言,官方的 IDE 并不是很好用。本文使用的 IDE 是目前互联网公司普遍使用的由 JetBrains 公司开发的 Pycharm,Pycharm 分为收费的个人专业版和免费的社区版。对于本次课程来说,我们只需要下载社区免费版就可以了。
这个部分带领大家“极速”了解 Python 的基础语法。需要说明的是,本部分的所有语法,都是围绕着本课程展现的,还有很多未涉及的语法和高级特性。作为一名开发者,我得承认:如果你想以后从事 Python 开发工作,并且目前对 Python 一点都不了解的话,这样的学习方法并不合适。
按照国际惯例,每当学习一门新的语言时,我们都要仪式性的输出“Hello World"。使用 Python 输出“Hello World”很简单,几需体验三番中 里造会干我一样 爱桑结款游戏(哈,借用下《贪玩蓝月》中的话)……不对,Python 输出“Hello World”只需要一行代码:
print("Hello World")
print()
是一个函数(function),这是我们接触到的第一个重要概念。你可以理解为函数是一组封装好的代码集合。
Python中主要的数据类型有:字符串、整数、浮点数、字符串、布尔值。
当我们在 CMD 控制台输入1+1的时候,控制台会输出2。但是,如果我们要在之后的计算中继续使用这个2该怎么办呢?我们就需要通过一个“变量”来存储我们需要的值。
var1 = "金坷垃" #将"金坷垃"传给参数var1,字符串print(var1) #输出结果为:金坷垃var2 = 2 #整数print(type(var2)) #输出结果为:intvar3 = True #布尔值var4 = 3.1314526 #浮点数
在上述代码中,我们使用 type() 来显示变量 var2 的数据类型。在 Python 中,你可以使用 #
来注释相关信息,注释的信息 IDE 在编译的时候,会自动忽略。
布尔值在 Python 中有两个量:True 和 False。
var1 = 12var2 = 12var3 = 13print(var1==var2) #Trueprint(var1==var3) #False
其中,var1==var2
没有改变两个量的值,而是对它们进行比较,且比较的结果是布尔值 True,因为 var1 和 var2 的值都是12。
Python 使用 if 和 else 来作为条件判断语句。
int i = 1;if i==1: print("Yes,it is 1")else: print("No,it is not 1")
上面的语句用来判断变量 i 是否等于1。请注意:Python 对缩进是极重视的。所以在写判断语句的时候,需要注意缩进是否在同一个区域。
Python支持 for 循环和 while 循环。循环语句和 if、else 语句类似,比如都需要加冒号,语句体需要缩进。
for i in range(1,10): print(i)
上面的语句是输出1到10之间的数,请注意,range(1,10)
的范围是从1到9,不包含10。
while(i<10): i++ if i!=8: continue else: break
上面的语句中,break 关键词的意思是:跳出循环,continue 的意思是:继续循环。
在本门课中,列表是比较重要的一个数据容器。
list1 = [1,2,3,4,5]list2 = ["金坷垃","圣地亚哥","雄鹰高飞"]
列表是具有索引的,因此想要访问一个列表中的数值,只需要列表名+索引值就能够得到了。
print(list1[2]) # 3print(list2[0]) #金坷垃
字典是一种特殊的列表,字典中的每一对元素分为键(key)和值(value)。对值的增删改查,都是通过键来完成的。
brands = {"Tencent":"腾讯","Baidu":"百度","Alibaba":"阿里巴巴"}brands["Tencent"] #获取键值为"Tencent"的valuedel brands["Tencent"] #删除腾讯brands.values[] #得到所有的value值brands.get("Tencent") # 获取键值为"Tencent"的value
之前我们使用过 print() 和 type(),这两个都是函数。对于重复性的代码段,我们不需要每次都写出,只需要通过函数的名称调用就可以了。
定义函数的关键字是 def,定义的方式和 for循环差不多。
def function(param): #function为函数名,param为参数 i = 1 return i #f返回值
为了讲解的更形象,我们来写一个 a+b 求和的函数。
def getSum(a,b): #定义函数名为getSum,参数为a,b sum = a+b; return sum; #返回a+b的和,sum
定义完成后,我们就可以在程序的其他地方,通过调用 getSum(a,b) 来使用这个函数。
之前我们讲的一系列的操作,都是放在内存中的,一旦关闭程序,那么相关的变量也就被释放了。因此,为了保存我们的数据,就必须要学习通过 Python 操作文件。
Python 提供了丰富且易用的文件操作函数,我们将常见的操作快速学习一下:
open("abc.txt","r") #open()为Python 内置的文件函数,用来打开文件,“abc.txt”为目标文件名,"r"代表以只读方式打开文件,其他的还有“w"和"a"模式
打开的文件,必须通过 .read()
方法才能得到数据。
file = open("abc.txt","r")words = file.read()
这篇《Python 极速教程》仅仅展示了本门课程中最需要掌握的几个部分,类似于元祖、类、对象、继承等更加丰富的内容由于时间原因,没有一一放在此处。有兴趣的小伙伴可以选择课后对 Python 进行系统的学习。
相比较于一直在 Python 教程中做各种 a+b
、var1==var2
的操作,本门课程希望大家能从实际的使用中学习 Python ,也即:哪里不会搜哪里。事实上,作者在编制这门课程时,也经常会通过 Google、Github 或者是官方文档,搜索一些忘记的不太常用的语法特性。
点击了解更多《Python 短信通知系统开发实战》
当你在浏览器输入 www.gitchat.com
,并回车访问的时候,你看到的所有的展现在你屏幕上的东西,其实都是网页。网页是通过 URL 来进行识别和访问的。按照 Wiki 百科的说法,网页被定义成下面的说明。
网页(英语:Web Page)是一个适用于万维网和网页浏览器的文件,它存放在世界某个角落的某一部或一组计算机中,而这部计算机必须是与互联网相连。网页经由网址(URL)来识别与访问,当我们在网页浏览器输入网址后,经过一段复杂而又快速的程序,网页文件会被传送到用户家的计算机,然后再通过浏览器解释网页的内容,再展示给用户。是网络中的一“页”,通常是 HTML 格式,但现今已经有愈来愈多、各色各样的网页格式和标准出现。网页通常用图像来提供图画。网页要通过网页浏览器来阅读。
简单的来说,你在浏览器中见到的任何一个页面,都是网页。
学习基础的网页知识最重要的一点,是因为这门课程后续要讲授的技术,都涉及到对网页内容的分析与爬取。哪怕仅仅是作为一名刚入门的爬虫小白,你都需要了解一下网页的相关知识。作为一名开发人员,不仅仅要知其然,更要知其所以然。一味地 Copy 代码,不懂得为什么要这样做,反而会大大降低学习的效果。
HTML(HyperText Markup Language) 是一种用来描述网页的语言,它是通过“标记标签”来描述网页的。通常来说,我们把 HTML 文档称为 Web 页面。
GitChat达人课 这是我的第一个标题
这是段落
上述示例中的 、
等,只要是用<>
包裹住的元素,都可以认为是 HTML 的“标记标签”。需要注意的是,“标题标记”一般都有开始标记和结束标记,普通的标题标记,一般以<标签>内容标签>
这样进行使用。接下来我们详细的解释一下上述示例中的“标记标签:
是 HTML 的声明。该方法是为了方便浏览器准确的获取 HTML 的版本,以便于正确的对网页内容进行渲染(关于HTML 版本的问题,你可以参考这篇文章:HTML 标准的版本历史)。
是 HTML 的根元素。一个 HTML 文档的所有内容,必须放入此标签内。
是 HTML 的元(meta)数据。
能够提供 HTML 页面的元信息,比如定义网页的编码方式、针对搜索引擎的关键词管理。
是网页的标题,但我们打开一个网页,浏览器显示的标签名就是 title 中的文字。
是 HTML 文档所包含的所有内容(例如文字、视频、音频等)。
用来定义标题。在 HTML 中,h 被确切的定义为标题大小。一共有6级标题,分别是 -
,文字从大到小。
是 HTML 页面的段落标签。HTML 中如果对文字另起一行的话,必须使用该元素。CSS(Cascading Style Sheets)是用来渲染 HTML 文档中元素标签的样式。常见的 CSS 使用方式有三种:
内标记
元素中使用 CSS。用内联的方式使用 CSS,只需要在相关的标签中使用样式属性即可,不需要其他的配置。
这是正常的段落文字
这是使用内联CSS的段落文字
上述的两个段落,经过浏览器的渲染后,显示的结果如下:
内联方式虽然简单,但是如果标签很多,一个一个添加,无疑浪费了本来就很宝贵的时间。如果对某一个标题设定为统一样式,或者是希望能够方便管理相关样式的时候,就可以使用内部样式表
内部样式表应该在 部分通过
标签来定义。通过上述内部样式表的展示,现在所有段落(
)里面的文字,都变成了红色。
试想一下:你有100个网页要使用 CSS 样式,如果使用内联样式,你的工作量无疑是“亚历山大”的;如果使用内部样式表,你也要重复的修改100次。这个时候,你就需要外部样式表来“救火”啦。外部样式表可以仅通过一个文件来改变整个网页的外观。
上述的例子中,我们通过 导入了一个名叫
gitchat.css
的外部样式表。gitchat.css
里面是已经写好的各种 CSS 样子。当我们的文件中存在对应的标签时,浏览器会自动为我们配置好相应的样式。
网页线性定位的意思是:对网页标签进行线性表示,将其一维转化,便于确定其位置。
GitChat全场1折,不买不要钱html
GitChat欢迎您
假定在上述代码中,我们需要获取到 所在的位置。按照网页线性定位的概念,我们可以表示为
->->
。
如上图所示,即 被包含在
标签中,而
标签被包含在
中。通过这样一种线性的转换,新人可以很方便的了解需要获取的标签,位于网页的哪个位置。
本篇文章只是介绍了基础的 HTML 知识。但是,正像作者在课程中一直强调的那样,任何技术一旦被广泛应用,其技术栈的支线也会越来越多。本文为了照顾新人,没有介绍 JavaScript
这项技术。如果你对于前端开发感兴趣的话,可以尝试课后自己学习相关的知识点。
为了加速后续的开发进度。你也可能需要在课后学习一下 HTML 中列表、表格、div 等常见的 HTML 标签和相关的特性。
当然,如果你课下的确很忙,没有关系,本门课程在后续的课程中,会在使用相关技术的时候,进行一个简单的讲解,方便新人理解。
点击了解更多《Python 短信通知系统开发实战》
阅读全文: http://gitbook.cn/gitchat/column/5afcde6f753289354cabd303