Python上手学习
- 2019 年 10 月 30 日
- 筆記
python的语法简单,可以很好提高个人生产力。我花了2天的时间重零开始学习python,目前已经能做爬虫了。
这篇博客是不管原理,直接干,直接梭的学习博客。这篇博客包含安装基本语法(创建变量、基本函数、判断语法),导入包(系统操作),导入外部开源包(pip3下载包,pyecharts可视化,xlwt包操作excel,Pillow操作图片,Scrapy爬虫)
安装python
mac系统中默认安装一个python,一般是python2
,但是python2
已经过时,需要下载python3
。打开终端,输入
python --version # 查看python version
brew search python3 brew install python3 # 安装python3
输入python3
,当前缀是>>>
时,代表安装成功,并可以写代码了。输入熟悉的hello world。
print("hello world")
创建变量
Python定义对象不用申明类型
name="shixicheng" id=1
支持对象转化类型
print(int("3")) print(str(1))
python每句结束不用加;
python支持+
,-
,*
,/
四种运算符,支持次方运算
print(1+5) #加法运算 print(5**3) #次方运算,5的3次方
string可以赋值换行的字符串
info=""" 李雷 韩梅梅 学英语 """
基本函数
print 输出
print用于输出,默认输出控制行,亦可输出文件,查看源码定义
def print(self, *args, sep=' ', end='n', file=None):
参数 |
描述 |
---|---|
args |
输出数据,可以是多个字符串对象 |
sep |
每个字符串对象之间的拼接字符串,默认空格 |
end |
最后一个字符串结尾,默认n |
file |
打印到某个文件,文件对象 |
输出到文件
f = open(r"/user/marx_luo/download/test.txt",'w'); print("李雷","韩梅梅","莉莉安",sep="-",end=".",file=f)
input 输入
input()
可以在监控输入并赋值。
name=input("请输入") print(name)
结果会打印输入的字符串。
f-string 格式化
f-string
可以把变量赋值到string中,如
name="shixicheng" company="fcbox" info=f""" {name}个人信息 姓名是{name}, 公司是{company} """
string.format()
format()
作用与f-string
相似,只是格式不同。
name="shixicheng" company="fcbox" "{}个人信息,姓名是{},公司是{}".format(name, name, company)
判断和循环
python的判断和循环与其他语言一样,也是if
,while
,for
。
# if if a==b: print(a) elif a==2: print(b) else: print(3)
python通过缩进来划分代码块,而不是java的
{}
,它并不强制要求缩进是tab、四个空格,两个空格等,只要同一层,空格数一致就可以了。
# while while a==b: a=a+1 print(a)
# for ... in numbers = [1,2,3,4,5,6] for x in numbers: print("遍历所有元素{}".format(x))
导包与系统包
python通过import
导入其他包,也可以导入包的某个方法
# 导入os包 import os # 导入os.rmdir方法 from os import rmdir
os 操作系统
import os # getcwd() 获得文件路径 print(os.getcwd()) # rename修改文件名 os.rename("test.txt","demo.txt") # 新建文件夹 os.mkdir("test") # 移动本文件夹到 os.chdir("test") print(os.getcwd()) # 删除文件夹 os.rmdir("test") # 打印文件夹下文件名和文件夹 print(os.listdir())
shutil 操作sh命令
import os if bool(1 - os.path.exists("鸣人")): os.mkdir("鸣人") fp = open("hackwork.jpg", 'w') import shutil shutil.copyfile("hackwork.jpg", "hackwork-copy.jpg") //复制文件 shutil.copytree("鸣人", "鸣人的影分身") //复制文件夹 shutil.move("hackwork.jpg", "鸣人") // 移动文件到文件夹
外部包
python可以下载并导入开源包,推荐使用pip,pip貌似是安装python时安装的。
pip3 install pillow pip3 list //查看pip安装的插件
pyecharts 统计分析
pyecharts是将数据生成echarts网页的第三方包。它可以画条形图,饼状图,词云等多种统计图。官方API:http://pyecharts.org/。
柱状图
from pyecharts import Bar bar = Bar() name = "服装" x_axis = ["衬衫", "羊毛衫", "雪纺衫"] y_axis = [5, 20, 36] bar.add(name, x_axis, y_axis) bar.render()
词云
from pyecharts import WordCloud name = ["666", "赞同", "厉害", "有用", "赞"] value = [122,32,42,23,11] wordcloud = WordCloud(width=1300, height=620) wordcloud.add("",name,value) wordcloud.render("wordcloud.html")
xlwt 操作excel
xlwt是一个可以操作excel的开源包,官方API:https://pypi.org/project/xlwt/
workbook = xlwt.Workbook(encoding="utf-8") worksheet = workbook.add_sheet('第一周') worksheet = workbook.add_sheet('第二周') worksheet = workbook.add_sheet('第三周') worksheet = workbook.add_sheet('第四周') workbook.save("工作计划.xls") workbook = xlwt.Workbook(encoding="utf-8") worksheet = workbook.add_sheet('第一周') worksheet.write(1,0,label="星期一") worksheet.write(2,0,label="星期二") worksheet.write(3,0,label="星期三") worksheet.write(4,0,label="星期四") worksheet.write(5,0,label="星期五") worksheet.write(0,1,label="工作计划") workbook.save("工作计划2.xls")
Pillow 操作图片
pillow可以完成基本图片操作,如增加滤镜,修改大小之类的。
hanmeimeiPic = Image.open("hmm.jpg") hanmeimeiPic.show() # 图片处理 zjlImage = Image.open("zjl.jpg") # 模糊滤镜 blurZjlImage = zjlImage.filter(ImageFilter.BLUR) blurZjlImage.save('filter/blurZjl.jpg', 'jpeg') # 高斯模糊 gsBlurZjlImage = zjlImage.filter(ImageFilter.GaussianBlur) gsBlurZjlImage.save('filter/gsBlurZjl.jpg', 'jpeg') # 边缘增强 edgeEnhanceZjlImage = zjlImage.filter(ImageFilter.EDGE_ENHANCE) edgeEnhanceZjlImage.save('filter/edgeEnhanceZjl.jpg', 'jpeg') # 找到边缘 edgesZjlImage = zjlImage.filter(ImageFilter.FIND_EDGES) edgesZjlImage.save('filter/edgeZjl.jpg', 'jpeg') # 浮雕 embossZjlImage = zjlImage.filter(ImageFilter.EMBOSS) embossZjlImage.save('filter/embossZjl.jpg', 'jpeg') # 轮廓 contourZjlImage = zjlImage.filter(ImageFilter.CONTOUR) contourZjlImage.save('filter/contourZjl.jpg', 'jpeg') # 锐化 sharpenZjlImage = zjlImage.filter(ImageFilter.SHARPEN) sharpenZjlImage.save('filter/sharpenZjl.jpg', 'jpeg') # 平滑 smoothZjlImage = zjlImage.filter(ImageFilter.SMOOTH) smoothZjlImage.save('filter/smoothZjl.jpg', 'jpeg') # 细节 detailZjlImage = zjlImage.filter(ImageFilter.DETAIL) detailZjlImage.save('filter/detailZjl.jpg', 'jpeg')
注意: PyCharm创建项目时,会重新导入一个python虚拟机,lib也是空的,不会导入系统下载的pip3包。需要手动copy包文件夹到项目的lib下。 系统默认的lib路径
/usr/local/lib/python3.7/site-packages
项目的lib路径在项目文件夹下的/venv/lib/python3.7/site-packages
Scrapy 爬虫
Scrapy是流行的爬虫工具,官方API:https://scrapy-chs.readthedocs.io/zh_CN/latest/intro/tutorial.html。pip3下载
pip3 install scrapy
新建文件夹,打开终端并进入文件夹,输入
scrapy startproject tutorial #生成scrapy初始项目
生成的scrapy项目目录
tutorial/ scrapy.cfg tutorial/ __init__.py items.py pipelines.py settings.py spiders/ __init__.py ...
属性
scrapy.cfg
: 项目的配置文件tutorial/
: 该项目的python模块。之后您将在此加入代码。tutorial/items.py
: 项目中的item文件.tutorial/pipelines.py
: 项目中的pipelines文件.tutorial/settings.py
: 项目的设置文件.tutorial/spiders/
: 放置spider代码的目录.
编写爬虫类,保存在“tutorial/spiders目录下的
dmoz_spider.py` 文件中:
import scrapy from tutorial.items import CSDNItem class CSDNSpider(scrapy.spiders.Spider): name = "dmoz" allowed_domains = ["domz.org"] start_urls = [ "https://blog.csdn.net/luo4105" ] def parse(self, response): for sel in response.xpath('//div/div'): test=sel.xpath('h4/a/text()').extract() print(test)
进入项目的根目录,执行下列命令启动spider:
scrapy crawl dmoz
得到如下打印
2019-03-31 15:36:03 [scrapy.middleware] INFO: Enabled extensions: ... 2019-03-31 15:36:03 [scrapy.middleware] INFO: Enabled downloader middlewares: ... 2019-03-31 15:36:03 [scrapy.middleware] INFO: Enabled spider middlewares: ... 2019-03-31 15:36:03 [scrapy.middleware] INFO: Enabled item pipelines: [] 2019-03-31 15:36:03 [scrapy.core.engine] INFO: Spider opened 2019-03-31 15:36:03 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min) 2019-03-31 15:36:03 [scrapy.extensions.telnet] INFO: Telnet console listening on 127.0.0.1:6023 2019-03-31 15:36:04 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://blog.csdn.net/robots.txt> (referer: None) 2019-03-31 15:36:04 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://blog.csdn.net/luo4105> (referer: None)
输出json文件
修改爬虫类dmoz_spider.py
import scrapy from tutorial.items import CSDNItem class CSDNSpider(scrapy.spiders.Spider): name = "dmoz" allowed_domains = ["domz.org"] start_urls = [ "https://blog.csdn.net/luo4105" ] def parse(self, response): for sel in response.xpath('//div/div'): item = CSDNItem() item['title']=sel.xpath('h4/a/text()').extract() item['desc']=sel.xpath('p/a/text()').extract() yield item
编辑 tutorial
目录中的 items.py
文件:
import scrapy class CSDNItem(scrapy.Item): title = scrapy.Field() desc = scrapy.Field()
scrapy crawl dmoz -o items.json
该命令将采用 JSON 格式对爬取的数据进行序列化,生成 items.json
文件。