Python学习笔记(二)

Python基础

Python函数定义

函数是一段具有特定功能的、可重复使用的语句组,用函数名来表示并通过函数名进行完成功能调用。

分类:

  1. 自定义函数
  2. 内置函数

自定义函数

格式:

def <函数名> (<参数列表>):  #def开头,后接函数名
    <函数体> #实现功能
    return <返回值列表> #return [表达式]结束函数,不带return相当于返回none

实例:

def cir (radius):
    c = 2*3.14*r
    return c

函数调用

具体看实例
实例:

def cir (radius):
    c = 2*3.14*r
    return c
r = int(input("输入半径:"))
print (cir(r))

注意:
Python3 需要把print后面加上()
input 就是Python2.7的raw_input

类的定义和使用

什么是类?

类是用来描述具有相同属性和方法的对象的集合,对于勒种定义的函数,称为方法,类变量被称为属性。

实例1:

class User():
    pass

说明:

  1. 定义了为User的类
  2. 类名一般大写首字母,函数使用小写首字母,作为区分
  3. pass表示空类,表示没准备好内容

实例2:

class Person:
    def say(self):
        print ("hello")

说明:

  1. 定义一个方法say
  2. 类的成员函数必须有一个参数self,切位于参数列表的开头,self代表类的实例(对象)自身,可以使用self引用类的属性和成员函数

什么是对象?

对象是类的实例,若人类是一个类的话,某个具体的人就是一个对象,只有定义了具体的对象,才能使用类。

实例:

class Persion:
    def say(self):
        print("hello")
p = Person()
p.say()

#结果
hello

类的方法调用

类的内部调用:self.<方法名>(参数列表)
类的外部调用:<实例名>.<方法名>(参数列表)

注意:

  1. 类里面的变量被称为属性,类里面的函数被称为方法
  2. 上面两种调用中,参数列表中不包括self

Python文件操作步骤

主要分为3步:

  1. 使用open()函数打开/新建文件,返回一个file文件
  2. 使用file对象的读/写方法对文件进行读写操作
  3. 使用file对象的close()方法关闭文件

打开/新建文件

语法:

  • fileOB = open (filename[,mode[,buffering]])
  • 参数filename为文件名,相对路径/绝对路径

Mode参数

  • r(只读) 文件不存在报错 rb(二进制只读) r+(读写) rb+(二进制读写)
  • w(只写) 文件不存则新建 wb(二进制只写) w+(读写) wb+(二进制读写)
  • a(追加) 文件不存在则新建,存在则指针放末尾 ab(二进制追加) a+(追加可读) ab+(二进制追加可读)

读取文本文件

  • read() 读取指定字节,默认读取完内容
  • readline() 读取一行
  • readlines() 读取多行,默认读取完,返回行组成列表

实例:

dd = open("1.txt")
conten = dd.read()
dd.close()
print conten

文件的写入操作

  • write(str) 写入字符串
  • writelines(sequence) 写入多行

实例:

dd = open('1.txt','w',20)
setchar = {'hello,world!'}
dd.writelines(setchar)
dd.flush()
dd.close()

#结果
hello,world!

文件的关闭

Python中使用close()方法关闭文件,关闭文件是取消程序和文件中连接的过程,内存缓冲区的所有内容写入磁盘,因此必须在使用文件后关闭文件,确保文件信息不回丢失。

正则表达式

正则表达式,是通过某种某种规则来匹配符合规则的序列,正则表达式简单,功能强大,主要用来处理文本,或者准确的说是处理对象序列。

用途:

  • 处理文本和数据
  • 爬虫技术、自然语言处理、数据的挖掘(数据清洗)
  • 当前几乎所有主流语言全部支持正则表达式
  • 能处理符合某种抽象模式的字符串

python中正则表达式概述

正则表达式模块——re模块,被引入是在版本1.5,现在re模块还有以下内容:search()、match()、compile()、findall()。

re模块

Python的正则表达式需要re模块的支持

re使用步骤:

  • 将正则表达式的字符串形式便以为pattern实例
  • 使用pattern实例处理文本获取匹配结果(match实例)
  • 最后使用match实例获得信息

re.match方法

说明:
re.match尝试从字符串起始位置进行匹配
语法格式:
re.match(pattern,string,flags=0)

  • pattern 匹配的正则表达式
  • string 要匹配的字符串
  • flags 标志位,如:是否区分大小写,多行匹配等

匹配成功re.match方法返回一个匹配对象,使用group(num)或者group()函数来获取表达式

实例:

import re
m = re.match('hello','hello world!') #需要从头开始匹配,否则返回none
print (m.group())

#结果
hello

re.search方法

扫描整个字符串并返回第一个成功的匹配
语法格式:
re.search(pattern,flags)

注意:

  • re.match 只能从字符串的开始进行匹配,若开头不符合匹配规则,则失败返回none
  • re.search 匹配整个字符串

实例:

import re
m = re.match('hello','hello world!') #需要从头开始匹配,否则返回none
print (m.group())

n = re.search('h','world hello') #匹配整个字符串
print (n.group())

#结果
hello
h

re.compile方法

compile函数用于编译正则表达式,生成一个正则,供match()、search()、findall()等函数使用。
语法格式:
re.compile(pattern,[flags])

re.findall方法

匹配所有符合正则表达式的部分,返回一个数组
语法格式:
re.findall(pattern,string)

实例:

import re
pattern = re.compile('hello') #相当于提前写好正则匹配(实例化)后面使用的话直接调用,可以重复利用
m = pattern.findall('hello world hello')
print m[0]
n = pattern.findall('lilhelloililhello') #匹配的结果放到一个数组里面,Python叫做列表
print n
a = open('2.txt')  #匹配字符的话,要先打开一个文件
content = a.read() #然后读取的数据赋值给content
print content
pattern = re.compile('\d') #\d匹任意数字(编译正则表达式),并把匹配后的值赋值给,实例化后的pattern
result = pattern.findall(content)
print result

#结果
hello
['hello', 'hello']
d1231212o1admnabdmadbam2343353128ajbdanfavfnbafvfnabfm
['1', '2', '3', '1', '2', '1', '2', '1', '2', '3', '4', '3', '3', '5', '3', '1', '2', '8']

模块的基本介绍

模块:

  1. 每一个.py结尾的Python文件都是一个模块
  2. 模块名同样是一个标识符
  3. 使用模块的功能需要先导入模块

模块的导入方式:

1、import导入方式和调用:

  • 导入:import module #导入整个模块
  • 调用:module.func() #使用相关功能时使用module.的形式
  • 导入:import module as xxx #导入模块并赋予别名
  • 调用:别名func() #用相关功能时使用别名.的形式

2、from导入方式和调用

  • 导入:from module import #从模块中导入所有的功能(不建议使用)
  • 调用:func() #使用时直接用功能名
  • 导入:from module import xxx as yyy #从模块中导入某个功能并赋予别名
  • 调用:yyy #使用时使用别名即可
  • 导入:from module import xxx #从模块中导入某个功能
  • 调用:xxx #使用时直接用功能名称即可

注意:

  1. 模块名一定不要与Python的内置模块重名,避免发生冲突
  2. 如果导入的两个模块存在同名的函数,那么后导入模块的函数会覆盖掉先导入的函数

模块的导入时的搜索顺序:

  • 首先在当前目录下搜索该模块,有就直接导入该模块
  • 如果当前目录没有,则搜索系统路径
  • 路径搜索:import module —> module —>module.py的路径—>sys.path

模块测试接口:

一般情况下,模块的末尾都有下面一行代码:

if __name__ == "__main__":
    main()

这行代码是用来方便用户测试自己写的脚本功能,这句话判断__name__变量的值来判断模块是被导入还是自己执行。
注意:模块被导入时,模块内直接执行代码会在导入时执行一次(因此建议将模块测试的代码写在if name == "__main__"语句中)

实例:

#结果
3
2

常用的内置模块
具体详细函数请自行在Python官方文档中查看:

安装模块:
pip install 模块name //安装模块,pip Python自带,默认给2.7版本安装
pip3 install //给Python3安装模块

Python爬虫-request模块:

爬虫

网络爬虫:被称为网页蜘蛛,网络机器人,是一种按照一定规则,自动的抓取网为王信息的程序或者脚本。
爬虫用途:

  1. 搜索引擎
  2. 咨询新闻网站
  3. 购物助手
  4. 数据分析与研究积累原始数据资源
  5. 抢票软件等

爬虫的基本思路:(重要!)

  1. 构造目标网址(重点)
  2. 发起请求(request),相当于点开网页
  3. 获取网页内容
  4. 定制筛选器,对内容进行筛选(重点)
  5. 把爬取结果保存到容器里

注意:第2,3步由requests模块完成

requests模块

requests是使用Apache2 licensed许可证的HTTP库
......
具体详情请看官方文档
使用前需要安装
模块导入:import requests

requests模块发送简单的请求、获取响应

  • 语句:response = requests.get(url)
  • 模型:requests.request(method,url,**kwargs)

requests相关方法(比较重要的两个)

  • requests.get() 获取html的主要方法
  • requests.post() 向网页提交post请求的方法

requests模块—GET请求

  • 语法:requests.get(url,params=none,**kwargs)
  • url: 获取页面的url链接
  • params: URL的额外参数,字典或字节流格式,可选
  • **kwargs: 12个控制访问的参数

实例:

import requests
response = requests.get('http://www.baidu.com')
print response.status_code   #打印状态码
print response.url     #打印请求url
print response.headers      #打印头信息
print response.cookies       #打印cookie信息
print response.text        #以文本形式打印网页源码
print response.content    #以字节流形式打印

#结果自己尝试,要素过多

requests模块—POST请求
函数原型:
response = requests.post(url,data=none,json=none,**kwargs)

返回值:requests.response对象
data:post请求携带的参数,必须是字典型,参数可选
json:post请求携带json数据格式的数据,参数可选

response对象使用

  • response.text 返回一个Unicode型的字符串类型数据
  • response.content 返回一个bytes型的二进制数据
  • response.url 返回请求的url
  • response.cookies 返回cookies信息
  • response.headers 返回响应头信息
  • response.request 返回请求相关信息,为一个requests对象
  • response.history 返回请求历史
  • response.status_code 返回状态码
  • response.json() 发挥一个字典,如果前端返回的数据是json格式,可以使用json方法,直接转换成字典

实例:

import requests
r = requests.get('http://www.baidu.com')
with open('test.txt','w',encoding='utf-8') as file:
    file.write(r.text)

#结果
test.txt文件的内容和查看源码的相同
#注意:若爬虫时抛出异常,可能被服务器拒绝,因为有的网站是防爬虫的

Tips

附上YOU的爬虫

#!/usr/bin/env python
#--*-- coding:utf-8--*--
__authour__ = 'YOU'

import requests
import json

def lesson(i):
    url= 'https://www.ichunqiu.com/courses/ajaxCourses'
    header={
            'Host': 'www.ichunqiu.com',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:58.0) Gecko/20100101 Firefox/58.0',
            'Accept': 'application/json, text/javascript, */*; q=0.01',
            'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
            'Accept-Encoding': 'gzip, deflate',
            'Referer': 'https://www.ichunqiu.com/courses',
            'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
            'X-Requested-With': 'XMLHttpRequest',
            'Content-Length': '102',
            'Connection': 'close',
    }
    data_post={'courseTag':'','courseDiffcuty':'','IsExp':'','producerId':'','orderField':'','orderDirection':'','pageIndex':i,'tagType':'','isOpen':''}
    r=requests.post(url=url,headers=header,data=data_post)
    data=json.loads(r.text)
    for name in data['course']['result']:
        print (name['courseName'])

for i in range(1,19):
    lesson(i)

有谁能仔细看到最后呢?

Typecho赞赏功能

「一键投喂 软糖/蛋糕/布丁/牛奶/冰阔乐!」

冷夜清风

(๑>ڡ<)☆谢谢老板们的投食~

使用微信扫描二维码完成支付


添加新评论

选择表情

  TimeLine

恢复正常更新,看心情吧。
--- updated on 2020-10-07 18:52:12 星期三

  About Me

我就是随便写写,您随便看看。
有事说事,没事烧纸,闲人勿扰,谢谢。
侧重方向:渗透测试,IT运维。

  Recent Comments

  •  小白: 无法解压怎么办?
  •  Liu先生的故事小屋: 网站改名字了原站点名字 小酱博客,现站点名字:Liu先生的故事小屋
  •  1231231: 测试
  •  122: 感谢
  •  御宅男: 码农路过,留下一个爪印!!!
  •  xue: 请问怎末给权限
  •  xue: 点了 run 一直闪退啥情况
  •  xue: 怎末解决的大佬
  •  小白兔: 感谢大佬,作为初学者能碰到这样的大佬是真的幸运
  •  wxyccc: 大佬真的太感谢你了 今天在网上找了无数资料都没能装好,出了太多问题, 有幸能看到你的文章 真的...

要铭记在心:每天都是一年中最美好的日子。

生活远没有咖啡那么苦涩,关键是喝它的人怎么品味!每个人都喜欢和向往随心所欲的生活,殊不知随心所欲根本不是生活。

如果错过了太阳时你流泪了,那么你也要错过群星了。

不如意的时候不要尽往悲伤里钻,想想有笑声的日子吧。

我不明白为什么要那么在意别人的看法,评头论足只是无聊人的消遣,何必看得如临大敌。如果你不吃别人家的饭,就别太把别人的话放在心上。