一、环境与编译器安装
Mac安装:Mac上默认安装了python,直接通过终端输入python或python3就可以看到当前mac上的python版本。
Windows安装:Windows上默认没有安装python,需要去官网上下载对应系统的python安装文件:
确定好安装目录后,点击进行安装,一切默认即可。最后将安装目录添加到系统内的环境变量中即可。
再打开cmd命令提示行,输入python,查看到如下结果即证明安装成功。如果一直无法识别,要么就是路径添加错误,路径中不要有中文或其他特殊符号。如果反复尝试都无法识别,建议重启一下电脑试试(血泪教训)。
OK,语言环境安装完毕,现在开始安装编译器,网上关于python的编译器有很多种,个人推荐Visual Studio Code,即VSCode,轻便简洁才是最好用的。Mac上和Windows上使用都很顺手,安装完编译器记得在VSCode上安装一个python插件,代码高亮提示和自动补全功能可以极大提高编码效率。
既然语言环境和编译器都安装好了,那么就开始写一句程序员经典的Hello World来试试手吧!
创建XXX(程序名称).py文件,注意文件类型必须为py,否则无论是编译器还是系统都无法识别和运行。
运行成功!Python学会!收工回家!
二、基本语法
以前一直觉得python的语法也很复杂,因为自己曾经花了将近两个月的时间苦啃Java语法以及相关的基础知识,后来学习Objective-C的时候也花了大量时间认识各种概念。所以让自己感觉学习每一种语言都要花大量的时间去入门。其实并非如此,语言大致可以分为重量型语言,如Java、C++以及和C++类似的Objective-C等语言,这些语言都是为了构建一个完整的项目而设计出来的,需要考虑到很多地方,所以非常细。而另一种为轻量型,又称解释型语言,如Python、JS等,只要学会几种最基础的语法知识,就可以进行编码实现各种功能了。所以不要将python看得多复杂,也不要将脚本看得多高大上,有一些C语言基础的就可以很快入门,到后面就是不断去扩展,认识各种第三方库并且学会使用就可以了。
最后再说一句,既是给初学者的建议,也是给自己的提醒。你需要知道要做什么,才去学某种语言,而不是要去学某种语言,再用那种语言做什么。不要将先后顺序颠倒,语言只是一种工具,是锤子,是斧头,也是锯子。要钉钉子,你就用锤子,要砍树,你就要用斧头,要裁木板,你就要用锯子。而不是先会用锤子,再看看锤子能干什么。同样,如果你想做一个网站,你可以去学java,你想做一个iOS APP,你可以去学Objective-C,你想写一些爬虫或脚本,可以去学python。也并不是说其他语言就做不了这些事了,而是找到最方便的,使用人数最多的那几种语言,这样遇见问题也可以在网上找到前人的解决方法。所以先想清楚你想干什么,你需要砍树还是钉钉子,再去有的放矢的去学习,这样效率最高,见效最快。
好,闲话少说,开始认识python的一些基础语法。
1.变量类型
Python中变量不需要声明,但是必须赋值,python会根据你赋值的内容来决定变量是哪种类型,即根据你“=”右边的内容来决定左边符号的类型。
Python总共有五种变量类型:
- String:字符串类型,也是最常见的类型,以单引号或双引号括起来显示,如‘xiaowang’,"xiaoming"等。
- Number:数值类型,python支持四种数值类型,整数、长整数、浮点型和复数,最常见的如1,2,3等
- List:数组,也称列表,一堆变量的总称,用”[“和”]“括起来表示,如[1,2,3,4]等
- Tuple:元组,和列表类似,但是固定长度,也就是限制里面的元素数量,和枚举类类似,用小括号包裹,如(1,2,3)
- Dictionary:字典,一组一一对应的元素,和java中的map类似,以key:value的形式出现,可以通过key获取value的值,也可以反向获取,以大括号包裹,如{1:"xiaozhang",2:"xiaoming',3:"xiaowang"}
2.条件语句
Python中的条件语句基本样式和其他主流语言一样,不过没有"()"和”{}“对条件和主体内容进行包裹,只是用:和缩进分割条件和主体内容,因此在Python中缩进非常重要,用于区分不同的代码区域。
#coding:utf-8
a = 7
if a > 5 :
print("a大于5")
else :
print("a小于5")
运行结果:
chuanxia@C02CX295MD6T python % /usr/bin/python /Users/chuanxia/Documents/python/test5.py
a大于5
此处有一点需要注意,就是首行”coding:utf-8“的意义,此处是指定当前的编码方式,如果代码内有中文最好加上这一句注释,否则会提示错误:
3.循环语句
Python有多种循环语句,此处就介绍一种最常用的for语句吧,具体内容参照官方学习网站
a = [1,2,3,4,5,6]
for num in a :
print(num)
运行结果:
chuanxia@C02CX295MD6T python % /usr/bin/python /Users/chuanxia/Documents/python/test5.py
1
2
3
4
5
6
这句话的意思就是循环数组a的内容,python自动获取数组a的第一个元素放入到num中,然后多次执行,每一次都获取a数组中的下一个内容放入到num中,一直到将a数组的元素都遍历完。
4.函数基础
Python与其他诸如C,Java等一样,都有自己的函数结构,不过python的函数结构更为简单,Python的函数有五种结构组成,即首部提示此为函数的"def"关键字,后面的函数名与用括号括起来的参数,冒号后面缩进的函数内容与最后的返回值"return"
def add(num1,num2,num3,num4) :
return num1 + num2 + num3 + num4
a = 1
b = 2
c = 3
d = 4
print(add(a,b,c,d))
运行结果:
chuanxia@C02CX295MD6T python % /usr/bin/python /Users/chuanxia/Documents/python/test5.py
10
以上就是一个简单的函数,其中num1,num2,num3,num4就是add函数的参数,用于获取外面传给他的内容,可以在函数的内部结构中进行使用,而return后面就是函数的返回结果,可以什么也不返回,也可以返回任意值。
好,上面就是python所需要掌握的最基础的语法了,会了上面的内容就可以做一些简单的python程序了,至于后面的更为复杂的,遇到了问题再去学就好,具体请移步官方教程
三、包管理工具与简易爬虫
学会以上的基本用法只能在终端中输出一些简单的字符串结果,如果想要让python实现更为复杂的功能,就需要借他山之石以攻玉。而网上有很多其他大佬写的”石“。重要的是如何获取这些”石“,为我所用。此处就要介绍一个python最重要的工具了,pip包管理工具,它可以从网上拉去别人的库,用到自己的代码中,实现各种神奇的功能。
1.pip包安装流程
Mac上安装十分简单,只要打开终端输入:
sudo easy_install pip
以上命令,然后回车就好了
等待安装结束之后,再输入:
pip --version
出现以下提示即为安装好了:
注意version前面是两个-,否则无法识别命令
Windows上就要复杂一些:
首先在官网上下载需要的pip安装文件:
将安装包移动到对应位置(一般为python的安装目录同级),然后解压。进入解压后的目录运行命令:
python setup.py install
等到cmd命令行提示finished,说明安装结束。
再配置环境变量,进入python安装目录的Scripts文件夹中,将该路径放入到环境变量中,点击确定。
最后重启cmd命令行,输入命令:
pip list
出现如下提示即说明安装成功。
如果出现以下提示,则检查文件路径是否正确,如果都正确,尝试一下重启电脑再输入以上命令试试。
2.静态网页爬取
首先理解一下爬虫的概念,以下是百度百科对爬虫的解释:
网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。
也就是说爬虫是获取互联网的某些页面中的内容,将其中的信息抓取出来再进行其他的操作的一种自动程序。
获取静态网页全部内容一般使用request库,而分析静态网页的结构,抓取想要的内容一般使用BeautifulSoup库(初学者建议,至于大佬级选手,当然是哪个顺手用哪个)
此处就以被广大网页爬取遍了的豆瓣电影Top250网页为例,进行简单静态网页爬取的讲解。
原网页界面如下:
一看上面网页,就有很多很直观的东西可以爬取,比如每个电影的封面图片,电影的名称,导演,评价等等内容。我们就直接爬取最简单的电影名称,需要爬取网页,那么我们首先要获取网页的整体内容,因此就使用requests库进行获取,获取之前我们需要拿到requests库,怎么拿呢,自然就是包管理工具pip了,直接打开终端/cmd命令行,输入:
pip install requests
然后就等终端自己从网络上拉去requests库了,等待拉去完毕,就可以开始编写代码了,打开VS Code:
#coding:utf-8
# 导入从网络中获取到的requests库
import requests
# 豆瓣电影url地址
test_url = 'http://movie.douban/top250/'
# 定义函数,参数为需要爬取的网站地址url
def download_page(url):
# 设置浏览器请求头,没有设置则会报错,定式写法
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36'
}
# 调用requests,使用库中的get方法,参数为url和上面设置的请求头。再调用content方法获取网页的具体内容
data = requests.get(url,headers=headers).content
return data
# 调用上面的函数,将豆瓣电影url地址传入进去
page = download_page(test_url)
# 打印获取到的页面内容
print(page)
运行结果(部分内容):
ubanio/view/photo/s_ratio_poster/public/p2574551676.jpg" class="">
</a>
</div>
<div class="info">
<div class="hd">
<a href="https://movie.douban/subject/1292001/" class="">
<span class="title">海上钢琴师</span>
<span class="title"> / La leggenda del pianista sull'oceano</span>
<span class="other"> / 声光伴我飞(港) / 一九零零的传奇</span>
</a>
打开豆瓣网站,点击F12,调出浏览器开发者工具栏,点击Element选项卡,看看里面的源码内容是否和我们获取到的内容一致
基本一致,说明我们获取到了该页面的全部源码,但是还有很多不必要的内容,比如<span>、<div>等等标签,我们只需要电影名称,其他对我们而言都无用,那么怎么进行筛选呢,此处就要使用BeautifulSoup工具进行筛选了。BeautifulSoup工具在bs4库中,所以我们需要使用pip获取bs4库:
pip install bs4
获取成功。
在编写代码之前我们首先来分析一下要抓取的电影名称在哪个位置:
首先,将鼠标移动到ol标签上,可以看到左边蓝色区域覆盖的地方就是我们需要获取电影信息的地方,而ol标签里面则是一堆li标签
如上图所示,打开li标签,可以看到一堆div,然后其中有个class="item"的div里面还要一个class="info"的div,再进去有一个class="hd"的div,此div里面有class="title"的span标签,此标签中就有我们需要的电影名称了。因此网页的结构如下所示:
我们需要获取所有的li标签,因此用列表进行存储li标签,再获取列表中每一个li标签的div,一层一层获取,最后获取到class='titile'的span标签,标签内就是电影名称了。代码如下:
#coding:utf-8
import requests
from bs4 import BeautifulSoup
# 豆瓣电影url地址
test_url = 'http://movie.douban/top250/'
# 定义函数,参数为需要爬取的网站地址url
def download_page(url):
# 设置浏览器请求头,没有设置则会报错,定式写法
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36'
}
# 调用requests,使用库中的get方法,参数为url和上面设置的请求头。再调用content方法获取网页的具体内容
data = requests.get(url,headers=headers).content
return data
# 创建一个全局变量数组,用来存储从网页中获取到的电影名称,定义在函数外面的变量称为全局变量
movie_name_list = []
# 定义函数,获取通过requests得到的页面源码,然后筛选得到需要的具体内容
def parse_html(html):
# 创建一个BeautifulSoup
soup = BeautifulSoup(html,features="html.parser")
# 找到class为grid_view的ol标签页,里面存放的就是电影信息列表了
movie_list_soup = soup.find('ol', attrs={'class': 'grid_view'})
# 判断获取到的列表是否为空
if movie_list_soup != None:
# 如果不为空,则用for循环遍历列表中的“li”标签
for movie_li in movie_list_soup.find_all('li'):
# 获取class为hd的div标签
detail = movie_li.find('div', attrs={'class': 'hd'})
# 获取class为title的span标签,此标签里面放的就是电影的名称了,通过getText获取名称
movie_name = detail.find('span', attrs={'class': 'title'}).getText()
# 将名称加入到电影名称数组中
movie_name_list.append(movie_name)
# 获取下一页这个超链接的内容
next_page = soup.find('span', attrs={'class': 'next'}).find('a')
# 判断是否有下一页,即是否为最后一页
if next_page:
# 进入下一页,继续获取里面的电影内容
parse_html(download_page(test_url + next_page['href']))
# 如果是最后一页,就说明获取完毕,返回电影名称列表
return movie_name_list
# 主函数
def main():
# 调用页面分析函数,将获取到的页面传入其中
parse_html(download_page(test_url))
# 遍历电影名称列表,将名称分别打印出来
for x in movie_name_list:
print(x)
if __name__ == '__main__':
main()
此处使用了main函数以及if __name__ == '__main__',这种是比较标准的脚本写法,这样写既可以在编译器上运行,也可以直接在终端上执行,具体原理请移步if __name__ == '__main__'原理
运行结果(部分结果):
chuanxia@C02CX295MD6T python % /usr/bin/python /Users/chuanxia/Documents/python/test5.py
肖申克的救赎
霸王别姬
阿甘正传
这个杀手不太冷
泰坦尼克号
美丽人生
千与千寻
辛德勒的名单
盗梦空间
忠犬八公的故事
海上钢琴师
星际穿越
楚门的世界
如上所示,一个简单的静态网页的爬虫程序就写好了。
参考:
pip安装教程
BeautifulSoup用法
python常用库整理
更多推荐
Python入门与简易爬虫
发布评论