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用于输出,默认输出控制行,亦可输出文件,查看源码定义

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的判断和循环与其他语言一样,也是ifwhilefor

# 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 文件。