「Python爬蟲系列講解」二、Python知識初學

本專欄是以楊秀璋老師爬蟲著作《Python網絡數據爬取及分析「從入門到精通」》爲主線、個人學習理解爲主要內容,以學習筆記形式編寫的。
本專欄不光是自己的一個學習分享,也希望能給您普及一些關於爬蟲的相關知識以及提供一些微不足道的爬蟲思路。
專欄地址:Python網絡數據爬取及分析「從入門到精通」

目錄

1 Python簡介

2.1 Python的特點

2.2 安裝及第三方庫導入過程

2 基本語法

2.1 縮進與註釋

2.2 常量與變量

2.3 輸入與輸出

 2.4 賦值與表達式

3 數據類型

3.1 數字類型

3.2 字符串類型

3.3 列表類型

 3.4 元組類型

3.5 字典類型

4 條件語句

4.1 單分支

​ 4.2 二分支

​ 4.3 多分支

5 循環語句

 5.1 While循環

5.2 for循環

​ 5.3 break和continue語句

6 函數

6.1 自定義函數

6.2 常見內部庫函數

 6.3第三方庫函數

7 文件操作

7.1 打開文件

7.2 讀/寫文件

7.3 關閉文件

7.4 循環遍歷文件 

8 面向對象

 


1 Python簡介

2.1 Python的特點

Python是Guido Van Rossum在1989年開發的一種腳本新解釋語言,是ABC語言的一種繼承。
由於作者是Monty Python喜劇團的一名愛好者,故將其命名爲Python(蟒蛇)

Python作爲當下一種熱門語言,具有以下特點:

  • 語法清晰,代碼友好,易讀
  • 應用廣泛,具有大量的第三方庫(尤其是機器學習、人工智能相關庫)支持
  • Python可移植性強,易於操作各種存儲數據的文本文件和數據庫
  • Python是一種面嚮對象語言,支持開源思想

根據Tiobe編程語言最新排行榜(部分),其中Python排名第三,並且隨着大數據、數據分析、深度學習、人工智能的迅速發展,Python收到的關注程度越來越高。

2.2 安裝及第三方庫導入過程

利用Python編程之前,首先需要安裝Python軟件:包括搭建Python環境、學會安裝Python第三方庫等

關於Python安裝及第三方庫導入過程可參考我之前的博文
文章地址鏈接:https://blog.csdn.net/IT_charge/article/details/105586808

搭建好Python環境之後是這個樣子的(同時可以打印輸出進行進一步的測試)

當編寫大段代碼或自定義函數時,在command命令行中編寫是不太現實的,因此可以進一步選擇合適的編譯器進行編譯,我在這裏用的是JetBrains PyCharm 2018.1.2 x64

大家可以去這裏下載使用:https://pan.baidu.com/s/1zunmfSfHVDF9VP1qVDQ8Gg   提取碼:4558

2 基本語法

2.1 縮進與註釋

1 縮進

不同於其他語言,Python 是通過縮進來標明代碼的層次關係的。
其中,1個縮進等於4個空格,它是 Python 語言中標明程序框架的唯一手段。
前面提到的的 PyCharm 提供了快捷鍵 Tab 用於快速縮進,Shift + Tab用於返回縮進的上一部操作。

2 註釋

註釋是用於說明代碼信息的,註釋代碼不執行。
Python 註釋主要包括兩種:

  • 行註釋:採用“#”開頭進行單行註釋,如:“# 這裏是單行註釋”
  • 塊註釋:即多行註釋,常用“ ''' ”或“ """ ”開頭和結尾,如:
    '''       
    這裏是多行註釋
    ……
    這裏是多行註釋
    '''

這裏需要注意的是:

python 中“ ”與‘ ’在表示字符串時是沒有區別的
在輸出時,輸出內容有“ ”(雙引號)則在單引號內使用雙引號,即‘ “要輸出內容” ’;
輸出內容有‘ ’(單引號)則在雙引號內使用單引號,即“ ‘要輸出內容‘ “;

''' (三引號)用法:1、用作多行註釋;2、用作表示一個字符串
★python中並沒有提供專門的多行註釋的符號,當一串字符被三引號引用時,但它不作爲字符串被操作時,這個三引號內引用的內容就被視爲註釋。

2.2 常量與變量

1 常量

常量是指程序中值不發生代表的元素,一旦初始化後就不能對其進行修改的固定值,它是內存中用來保存固定值的單元。

事實上,Python並未提供如C/C++/Java一樣的const修飾符,換言之,python中沒有常量,python程序一般通過約定俗成的變量名全大寫的形式表示這是一個常量。然而這種方式並沒有真正實現常量,其對應的值仍然可以被改變。後來,python提供了新的方法實現常量:即通過自定義類實現常量。這要求符合“命名全部爲大寫”和“值一旦被綁定便不可再修改”這兩個條件。

下面給出一個例子(.py文件),該文件定義了一個方法__setattr()__,和一個異常ConstError, ConstError類繼承類TypeError。通過調用類自帶的字典__dict__, 判斷定義的常量是否包含在字典中。如果字典中包含此變量,將拋出異常,否則,給新創建的常量賦值。最後兩行代碼的作用是把const類註冊到sys.modules這個全局字典中。

class _const:
    class ConstError(TypeError): pass
    def __setattr__(self, name, value):
        if name in self.__dict__:
            raise self.ConstError("Can't rebind const (%s)" % name)
        self.__dict__[name] = value


import sys
sys.modules[__name__] = _const()

如果上面對應的模塊名爲const,使用的時候只要 import const,便可以直接定義常量了,例如

import const
const.PI=3.14
print(const.PI)

我們運行test.py,就可打印出常量的值,如果再次修改const.PI=4.13,則會拋出const.constError異常。 

  1. python常量:內存中用於保存固定值的單元、在程序中、常量的值不能發生改變的
  2. python常量命名規範:通常是以大寫字母開頭進行區分-Chy常量 chy變量
  3. python常量的賦值:數字 字符串 布爾值 空值
  4. 舉例:Aa=123、Ab='chy'、Ac=True和False、Ad=' ';

2 變量

  1. python變量:佔用內存中一塊空間、用來存放變量的值(或地址)、存放的值是可以發生改變的
  2. python變量命名規範:變量名是由大小寫字符、數字和下劃線(_)組合而成的;第一個字符必須是字母或下劃線開始(_)不可用數字開頭,不要用中文開頭;Python中的變量是區分大小寫的;在賦值時單引號、雙引號的效果是一樣的。
  3. 注意Python中已經被使用的一些關鍵詞不能用於聲明變量,如下:

2.3 輸入與輸出

1 輸入

Python的輸入函數主要是:input()

str1 = input('input:')
print(str1)

number = input('input:')
print(number)

2 輸出

Python的輸入函數主要是:print()

print(3)

print('Hello World!')

同時,Python 還支持格式化輸出數據,這是調用format()函數來實現。

# 輸出6位數值的浮點數,小數點後精確到2位
print(format(12.3456, '6.2f'))

 2.4 賦值與表達式

1 賦值

Python中賦值語句是使用等號(=)直接給變量賦值,如“a=10”,如果需要同時給多個變量進行賦值,則表達式如下:

a, b, c = 10, 20, (10+20)/2
print(a, b, c)
# 先運算右側3個表達式,然後同時將表達式結果賦給左側變量

2 表達式

表達式是程序中產生或計算新數據值的一行代碼,通常由變量、常量或操作符號產生,賦值表達式如 a = 10。

3 數據類型

3.1 數字類型

Python中常見的數字類型包括整數類型、浮點數類型、複數類型。

  • 整數類型:對應數學中的整數,其返回值類型爲int型,如10,25等
  • 浮點數類型:帶有小數點的數字,其返回類型爲float型,如3.14,2.1e2等
  • 複數類型:Python複數分爲兩部分,例如a+bj,其中a是實部,b是虛部,其返回類型爲complex。其中,複數可通過.real獲得實部數據,通過.imag獲得虛部數據
z = -12.3 + 8j
print('複數:', z, '類型:', type(z))
print('實部:', z.real)
print('虛部:', z.imag)

 :Python中的數字類型是可以相互轉換的。

  • 浮點數轉整數:int()
  • 整數轉小數:float()
  • 浮點數轉複數:complex()

3.2 字符串類型

在Python中,字符串類型是指需要用單引號或雙引號括起來的一個字符或字符串。
字符串表示一個字符的序列,其最左端表示字符串的起始位置,下標爲0,然後依次遞增。

# 字符串格式化輸出需要引入百分號(%)實現
print('My name is %s' % ('ZZR'))

str1 = 'abcdefg'
str2 = 'Hello World!'
str3 = '1+2+3'
str4 = '    I love Python   '
str5 = ['Thank', 'you']
# 字符串求長度
print(len(str1))
# 字符串切片
print(str1[3:6])
# 字符串反向切片
print(str1[-1:-4:-1])
# 字符串查找子字符串,若未找到返回-1
print(str1.find('def'))
print(str1.find('opq'))
# 字符串分割成序列,亦可設置分隔符
print(str2.split())
print(str3.split('+'))
# strip()函數用於去除開頭結尾空格,lstrip()函數去除左側空格,rstrip()函數去除右側空格
print(str4.strip())
print(str4.lstrip())
print(str4.rstrip())
# join()函數用於拼接字符串
sep = " "  # 採用空格拼接
print(sep.join(str5))

 

3.3 列表類型

在Python中,列表是一個非常重要的數據類型,它是中括號([ ])中用逗號分隔的元素集合。

list = [1, 2, 'a', 'Python']
print(list)
print(list[3])
print(type(list))

 列表中也可以用加號(+)拼接,用乘號(*)重複顯示,也可以進行切片等操作

list1 = [1, 2, 3, 4]
list2 = [5, 6, 7]
print(list1 + list2)
print(list2 * 3)
print(list1[1:3])

 下標列舉了一些列表中的常用方法,假設有列表list1 = [4, 2, 1, 5, 3]

 3.4 元組類型

元組是與列表類似的一種數據類型,它採用括號定義一個或多個元素的集合,其返回類型爲tuple。

tuple1 = (1, 2, 'Python')
print(tuple1)
print(type(tuple1))
print(tuple1[2])

注:當元組定義後就不能進行更改,也不能刪除,這不同於列表,由於其有不變性,因爲它的代碼更加安全。

3.5 字典類型

在Python中,字典是針對非序列集合提供的,由鍵值對(<Key><Value>)組成。其類型是dict。

鍵是字典的索引,一個鍵對應一個值,通過鍵值可查找字典中的信息,這個過程叫做映射。

dict = {"1":"Python", "2":"Java", "3":"C++"}
print(dict)
print(dict["2"])

字典與列表主要存在以下幾點不同:

  • 列表中的元素是順序排列的,字典中的數據時無序排列的
  • 映射方式不同,列表通過地址映射到值,字典通過鍵值對映射到值
  • 列表只能通過數字下表或索引進行訪問,字典可以用各種對象類型作爲鍵進行訪問 

4 條件語句

4.1 單分支

if <condition>:
    <statement>
    <statement>

判斷爲真就執行<statement>語句,如果爲假就跳過<statement>語句,執行下一條語句。

i =1
if i == 1:
    print(True)

 4.2 二分支

if <condition>:
    <statement>
    <statement>
else:
    <statement>
    <statement>

如果條件語句<condition>爲真,執行if語句塊,如果<condition>爲假,執行else語句塊

i = 2
if i == 1:
    print(True)
else:
    print(False)

 4.3 多分支

if多分支由 if-elif-else 組成,其中 elif 相當於 else if

if <condition1>:
    <case1 statements>
elif <condition2>:
    <case2 statements>
elif<condition3>:
    <case3 statements>
……
else:
    <defult statements>

course = 88
if course >= 90:
    print('A')
elif course >= 80:
    print('B')
elif course >= 70:
    print('C')
elif course >= 60:
    print('D')
else:
    print('No Pass!')

 

5 循環語句

 5.1 While循環

while <condition>:
    <statement>
else:
    <statement>

如果條件表達式<condition>爲真,則重複執行循環體,直到條件判斷爲假,循環體終止;如果第一次判斷條件就爲假,則直接跳出訓話執行else中的語句(注意else語句可以省略)。

例1

i = 1
s = 0
while i <= 100:
    s = s + i
    i = i + 1
else:
    print('over')
print('sum=', s)

 例2

# 本例中代碼是調用webbrowser庫中的open_new_tab函數打開百度網頁5次
# 本段代碼可用於循環增加刷閱讀量等
import webbrowser as web
import time
import os
i = 0
while i<5:
    web.open_new_tab('http://www.baidu.com')
    i = i + 1
    time.sleep(0.8)
else:
    # /F 表示強行終止程序;/IM 表示圖像
    os.system('taskkill /F /IM iexplore.exe')
print('close IE')

 

5.2 for循環

for <var> in <sequence>:
    <statement>
    <statement>

自定義循環變量var遍歷sequence序列中的每一個值,每個值都執行一次循環的語句塊。
sequence表示序列,常見類型有list(列表)、tuple(元組)、strings(字符串)、files(文件)。

# 輸出星號三角形
for i in range(10):
    print('*' * i)

 5.3 break和continue語句

break和continue語句是兩個常用的跳出循環的語句

1 break語句

break語句跳出整個循環

# 當求和變量s大於100時,進入if判斷語句,執行break語句跳出循環,最後輸出和
s = 0
num = 0
while num < 20:
    num += 1
    s  += num
    if s> 100:
        break
print('The sum is', s)

 2 continue語句

continue跳出本次循環,下一次繼續判斷執行

# 當爲偶數時continue跳出當前循環,所以for循環中只輸出偶數
for num in range(10):
    if num % 2 == 0:
        print('even number', num)
        continue
    print('odd number', num)

 

6 函數

 當我們要完成特定功能的語句塊時,就需要調用函數來完成相應的功能。

6.1 自定義函數

爲了簡化編程,提高代碼的複用性,可以自定義函數。

def funtion_name([para1, para2,……, paraN]):
    statement1
        statement2
    …
    [return value1, value2, ……, valueN]

函數調用時,新參被賦予真實的參數,然後執行函數體,並在函數結束調用時返回結果。
return語句表示退出函數並返回到函數被調用的地方,返回值傳遞給調用程序。

def fun(a, b):
    print(a, b)
    c = a + b
    print('sum:', c)
fun(3, 4)

def fun(a, b, c=10):
    print(a, b)
    sum = a + b + c
    print('sum:', sum)
fun(3, 4)
fun(3, 4, 5)

 

6.2 常見內部庫函數

Python系統內部提供了一些庫函數供大家使用,常用的有:str字符串庫函數、math數學庫函數、os操作系統庫函數、socket網絡套接字庫函數

 6.3第三方庫函數

Python作爲一門開源語言,他支持各種第三方提供的開源庫供用戶使用
常用格式:module_name.method(parametes)表示“第三方庫函數名.方法(參數)”
使用第三方庫之前需要安裝,如果沒有安裝就會報錯。

7 文件操作

文件是指存儲在外部介質上數據的集合,文本文件的編碼方式包括ASCII碼格式、Unicode碼、UTF-8碼和GBK碼等。
文件操作流程爲打開文件——讀/寫文件——關閉文件

7.1 打開文件

打開文件是通過調用 open() 函數實現的,函數原型如下:
<variable> = open(<name>, <mode>)
其中,<name>表示打開文件名稱;<mode>表示文件打開模式,參數有r(只讀)、w(只寫)、a(最佳末尾)、rb(只讀二進制文件)、wb(只寫二進制文件)、ab(附加到二進制文件末尾)、w+(追加寫文件)
返回結果爲一個文件對象

infile = open('test.txt', 'r')

7.2 讀/寫文件

 讀文件常用方法:

  • read()的返回值爲包含整個文件內容的一個字符串
  • readline()的返回值爲文件內容的下一行內容的字符串
  • reallines()的返回值是整個文件內容的列表,列表中的每一項都爲一行字符串

寫文件常用方法:

  • write()用於把含有文本數據或二進制數據集的字符串寫入文件中
  • writelines()針對列表操作,接收一個字符串列表參數,並寫入文件

7.3 關閉文件

文件讀/寫結束後,一定要記住使用close()方法關閉文件。
爲了安全起見,常用try-except-finally異常捕獲語句,並在finally子句中關閉文件

try:
    # 文件操作
except:
    # 異常處理
finally:
​​​​​​​    file.close()

7.4 循環遍歷文件 

在數據爬取或數據分析中,常常會用到文件遍歷(常常採用for循環遍歷文件內容)

#!/usr/bin/env python
fd = open('F:/test1.txt', 'r', encoding='UTF-8')
for line in fd:
    print(line)
fd.close()

 

8 面向對象

 不同於面向過程編程,面向對象編程需要使用“類”和“對象”來實現,將函數進行封裝,是更接近真實生活的一種編程方式。

面向對象的3個基本特徵:

  • 封裝:把客觀事物封裝成抽象的類,類中的數據和方法讓類或對象進行操作;
  • 繼承:子類繼承父類後,可以使用父類的所有功能,而無需重新編寫原有的類,並且可以對功能進行擴展;
  • 多態:類中定義的屬性或行爲被特殊類繼承後,可以具有不同的數據類型或表現不同的行爲。各個類能表現不同的語義,其實現的方法有兩種,分別爲覆蓋和重載。

在Python中類就是一個模板,模板裏可以包含多個函數,函數可實現一些功能,對象則是根據模板創建的實例,通過實例對象可以執行類中的函數。

class Rect:
    def __init__(self, length, width):
        self.length = length
        self.width = width

    def detail(self):
        print(self.length, self.width)

    def showArea(self):
        area = self.length * self.width
        return area
    
    def showCir(self):
        cir = (self.length + self.width) * 2
        return cir

rect = Rect(4, 5)
rect.detail()
area = rect.showArea()
cir = rect.showCir()
print('面積:', area)
print('周長:', cir)

 


歡迎留言,一起學習交流~

感謝閱讀

END

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章