正文
食材已准备好了,可以下锅,可锅在哪里,你不能放在手里加工。程序里我们用变量、常量来盛各种数据,还有个作用域的问题,严格的厨房红案和白案是分开的,有时候砧板是不能互用的。
烹饪手法
刚查了下,我大天朝常用的烹饪手法多达 20 多种,我归纳了一下,编程大概就那么几种:
-
数值计算——加减乘除、位移等;
-
逻辑计算——逻辑真假判断;
-
过程计算——循环、嵌套、递归等;
-
数据处理——字符串、对象的操作。
菜谱与炒菜
菜都准备好了,下锅怎么炒,全靠菜谱,它就是程序,而我们按照菜谱炒菜这个过程就是程序的执行。
Python 或任何一种编程语言都是博大精深,同时又是一种技能,不可能在使用之前完全掌握,也没必要。
我们需要知道的是我们想吃什么(程序要输出什么),然后再去菜市场买时才找菜谱(搜索引擎查资料),最后按照我们的需求加工(编程)。
1.4 Python 简单实践
首先我们来写三个 Python 文件:
hello.py
——事情的处理有落点,程序执行有入口,例如:main,这个文件可以看作程序的入口。
import pkg
print 'Hello World!'
pkg.test()
p = pkg.Person("Mike", 23)
p.showInfo()
pkg.py
——程序可以分块编写,这样层次更分明,易于理解和维护,我们在 pkg.py 中编写一部分功能,作为演示模块。
def test():
print "Here is pkg's test"
class Person(object):
def __init__(self, name, age):
self.name = name
self.age = age
pass
def showInfo(self):
print self.name
print self.age
init.py
——这是一个空文件,也可以写代码,表明当前路径是包。
接下来,我们来运行一下:
显示结果如下:
Hello World!
Here is pkg’s test
Mike
23
我们运行了 hello.py 文件,然后 hello.py 导入了包 pkg;包 pkg 定义了一个方法和一个类,我们在 hello.py 文件里面调用了外部的方法和类。
二、使用 Scrapy 抓取电子书
2.1 写在爬取数据之前
虽然我们这里的数据都是从公开的网络获取,但也不能确定其版权问题,因此获取的数据仅用于编程练习,严禁分享或用于其他用途。
好了,现在我们找一个在线看书的网站,找一本书把它下载到本地。首先,我们准备下载工具,就是 Python 的爬虫框架 Scrapy。
2.2 Scrapy 安装
安装完 Python 后可以用以下的命令按照 Scrapy,有些版本的 Python 没有带 pip 需要手动安装。
pip 是 Python 的包管理器,大量的第三方包或者说功能可以通过这个工具来管理,所谓包就是模块化的功能集合,基本的技术参考实践里面的包。
我安装成功显示如下信息:
> Collecting scrapy
Downloading Scrapy-1.5.0-py2.py3-none-any.whl (251kB)
100% |████████████████████████████████| 256kB 181kB/s
Collecting service-identity (from scrapy)
Downloading service_identity-17.0.0-py2.py3-none-any.whl
Collecting parsel>=1.1 (from scrapy)
Downloading parsel-1.3.1-py2.py3-none-any.whl
Collecting six>=1.5.2 (from scrapy)
Downloading six-1.11.0-py2.py3-none-any.whl
Collecting w3lib>=1.17.0 (from scrapy)
Downloading w3lib-1.18.0-py2.py3-none-any.whl
Collecting lxml (from scrapy)
Downloading lxml-4.1.1-cp27-cp27m-win_amd64.whl (3.6MB)
100% |████████████████████████████████| 3.6MB 142kB/s
Collecting Twisted>=13.1.0 (from scrapy)
Downloading Twisted-17.9.0-cp27-cp27m-win_amd64.whl (3.2MB)
100% |████████████████████████████████| 3.2MB 169kB/s
Collecting pyOpenSSL (from scrapy)
Downloading pyOpenSSL-17.5.0-py2.py3-none-any.whl (53kB)
100% |████████████████████████████████| 61kB 313kB/s
Collecting PyDispatcher>=2.0.5 (from