Python和PyCharm的安裝:學會Python和PyCharm的安裝方法python
變量和字符串:學會使用變量和字符串的基本用法數據庫
函數與控制語句:學會Python循環、判斷語句、循環語句和函數的使用小程序
Python數據結構:理解和使用列表、字典、元組和集合瀏覽器
Python文件操做:學習使用Python創建文件並寫入數據安全
Python面向對象:瞭解Python中類的定義和使用方法數據結構
01 Python與PyCharm安裝app
「工欲善其事,必先利其器」,本節介紹Python環境的安裝和Python的集成開發環境(IDE)PyCharm的安裝。ide
當前主流的Python版本爲2.x和3.x。因爲Python 2第三方庫更多(不少庫沒有向Python 3轉移),企業廣泛使用Python 2。若是做爲學習和研究的話,建議使用Python 3,由於它是將來的發展方向。因此本教程選擇Python 3的環境。函數
1.1 Windows中安裝Python 3工具
在Windows系統中安裝Python 3,請參照下面的步驟進行。
打開瀏覽器,訪問Python官網(https://www.python.org/)。
光標移動至Downloads連接,單擊Windows連接。
根據本身的Windows版本(32位或64位),下載相應的Python 3.5版本,如爲Windows 32位系統,應下載Windows x86 executable installer,若是爲Windows 64位系統,應下載Windows x86-64 executable installer。
單擊運行文件,勾選Add Python 3.5 to PATH,而後單擊Install Now按鈕便可完成安裝。
在計算機中打開命令提示符(cmd)窗口,輸入python,如圖1.1所示,說明Python環境安裝成功。
▲圖1.1 運行Python環境
當界面出現提示符>>>時,就代表進入了Python交互式環境,輸入代碼後按Enter鍵便可運行Python代碼,經過輸入exit()並按Enter鍵,就能夠退出Python交互式環境。
注意:若是出現錯誤,多是由於安裝時未勾選Add Python3.5 to PATH選項,此時卸載Python後從新安裝時勾選Add Python3.5 to PATH選項便可。
1.2 Mac中安裝Python3
Mac系統中自帶了Python 2.7,需到Python官網上下載並安裝Python 3.5。Mac系統中的安裝比Windows更爲簡單,一直單擊「下一步」按鈕便可完成。安裝完後,打開終端並輸入python3,便可進入Mac的Python 3的交互式環境。
1.3 Linux中安裝Python 3
大部分Linux系統內置了Python 2和Python 3,經過在終端輸入python –version,能夠查看當前Python 3的版本。若是須要安裝某個特定版本的Python,能夠在終端中輸入:
sudo apt-get install python3.5
安裝好Python環境後,還須要安裝一個集成開發環境(IDE),IDE集成了代碼編寫功能、分析功能、編譯功能和調試功能。在這裏向讀者推薦一個最智能、好用的Python IDE,叫作PyCharm。進入PyCharm的官網,下載社區版便可:
http://www.jetbrains.com/pycharm/
因爲PyCharm上手極爲簡單,所以就不詳細講解PyCharm的使用方法了。如下講解如何使用PyCharm關聯Python解釋器,讓PyCharm能夠運行Python代碼。
打開PyCharm,在菜單欄中選擇File ∣ Defalut Settings命令。
在彈出的對話框中選擇Project Interpreter,而後在右邊選擇Python環境,這裏選擇Python 3.5,單擊OK按鈕,便可關聯Python解釋器,如圖1.2所示。
▲圖1.2 關聯Python解釋器
02 變量和字符串
本節主要介紹Python變量的概念、字符串的基本使用方法、字符串的切片和索引,以及字符串的幾種經常使用方法。
Python中的變量很好理解,例如:
a = 1
這種操做稱爲賦值,意思爲將數值1賦給了變量a。
注意:Python中語句結束不須要以分號結束,變量不須要提早定義。
如今有變量a和變量b,能夠經過下面代碼進行變量a、b值的對換。
a = 4
b = 5
t = a #把a值賦給t變量
a = b #把b值賦給a變量
b = t #把t值賦給b變量
print(a,b)
這種方法相似於將兩個杯子中的飲料對換,只須要多加一個杯子,便可完成飲料的對換工做。
因爲Python爬蟲的對象大部分爲文本,因此字符串的用法尤其重要。在Python中,字符串由雙引號或單引號和引號中的字符組成。首先,經過下面代碼看看字符串的「加法」:
a = 'I'
b = ' love'
c = ' Python'
print(a + b + c) #字符串相加
在爬蟲代碼中,會常常構造URL,例如,在爬取一個網頁連接時,只有一部分/u/9104ebf5e177,這部分連接是沒法訪問的,還須要http://www.jianshu.com,這時能夠經過字符串的「加法」進行合併。
注意:此網站爲筆者的簡書首頁。
Python的字符串不只能夠相加,也能夠乘以一個數字:
a = 'word'
print(a*3) #字符串乘法
字符串乘以一個數字,意思就是將字符串複製這個數字的份數。
字符串的切片和索引就是經過string[x],獲取字符串的一部分信息:
a = 'I love python'
print(a[0]) #取字符串第一個元素
print(a[0:5]) #取字符串第一個到第五個元素
print(a[-1]) #取字符串最後一個元素
經過圖1.3就能清楚地理解字符串的切片和索引。
▲圖1.3 字符串切片和索引
注意:a[0:5]中的第5個是不會選擇的。
在爬蟲實戰中,常常會經過字符串的切片和索引,提取須要的部分,剔除一些不須要的部分。
Python做爲面向對象的語言,每一個對象都有相應的方法,字符串也同樣,擁有多種方法,在這裏介紹爬蟲技術中經常使用的幾種方法。
4.1 split()方法
a = 'www.baidu.com'
print(a.split('.'))
字符串的split()方法就是經過給定的分隔符(在這裏爲‘.’),將一個字符串分割爲一個列表(後面將詳細講解列表)。
注意:若是沒有提供任何分隔符,程序會把全部的空格做爲分隔符(空格、製表、換行等)。
4.2 repalce()方法
a = 'There is apples'
b = a.replace('is','are')
print(b)
這種方法相似文本中的「查找和替換」功能。
4.3 strip()方法
a = ' python is cool '
print(a.strip())
strip()方法返回去除兩側(不包括內部)空格的字符串,也能夠指定須要去除的字符,將它們列爲參數中便可。
a = 'python is good'
print(a.strip('*!'))
這個方法只能去除兩側的字符,在爬蟲獲得的文本中,文本兩側常會有多餘的空格,只需使用字符串的strip()方法便可去除多餘的空格部分。
4.4 format()方法
最後,再講解下好用的字符串格式化符,首先看如下代碼:
a = '{} is my love'.format('Python')
print(a)
字符串格式化符就像是作選擇題,留了空給作題者選擇。在爬蟲過程當中,有些網頁連接的部分參數是可變的,這時使用字符串格式化符能夠減小代碼的使用量。
例如,Pexels素材網(https://www.pexels.com/),當搜索圖片時,網頁連接也會發生變化,如在搜索欄中輸入book,網頁跳轉爲https://www.pexels.com/search/book/,能夠設計以下代碼,筆者只需輸入搜索內容,即可返回網頁連接。
content = input('請輸入搜索內容:')
url_path = 'https://www.pexels.com/search/{}/'.format(content)
print(url_path)
運行程序並輸入book,即可返回網頁連接,單擊網頁連接即可訪問網頁了,如圖1.4所示。
▲圖1.4 字符串格式化符演示
03 函數與控制語句
本節主要介紹Python()函數的定義與使用方法,介紹Python的判斷和循環兩種爬蟲技術中經常使用的控制語句。
「髒活累活交給函數來作」,首先,看看Python中定義函數的方法。
def 函數名(參數1,參數2...):
return '結果'
製做一個輸入直角邊就能計算出直角三角形的面積函數:
def function(a,b):
return '1/2ab'
def function(a,b):
print( 1/2ab)
注意:讀者不須要太糾結兩者的區別,用return是返回一個值,而第二個是調用函數執行打印功能。
經過輸入function(2,3),即可以調用函數,計算直角邊爲2和3的直角三角形的面積。如今來作一個綜合練習:讀者都知道網上公佈的電話號碼,如156**9354,中間的數值用其餘符號代替了,而用戶輸入手機號時倒是完整地輸入,下面就經過Python()函數來實現這種轉換功能。
def change_number(number):
hiding_number = number.replace(number[3:7],''4)
print(hiding_number)
change_number('15648929354')
注意:這裏的手機號碼是隨意輸入的,不是真實的號碼。
代碼說明以下:
定義了一個名爲change_number的函數。
對輸入的參數進行切片,把參數的[3:7]部分替換爲‘*’號,並打印出來。
調用函數。
在爬蟲實戰中也會常用判斷語句,Python的判斷語句格式以下:
if condition:
do
else:
do
if condition:
do
elif condition:
do
else:
do
在平時使用密碼時,輸入的密碼正確便可登陸,密碼錯誤時就須要再次輸入密碼。
def count_login():
password = input('password:')
if password == '12345':
print('輸入成功!')
else:
print('錯誤,再輸入')
count_login()
count_login()
程序說明以下:
運行程序,輸入密碼後按Enter鍵。
若是輸入的字符串爲12345,則打印「輸入成功!」,程序結束。
若是輸入的字符串不是12345,則打印「錯誤,再輸入」,繼續運行程序,直到輸入正確爲止。
讀者也能夠將程序設計得更爲有趣,例如,「3次輸入失敗後,退出程序」等。
Python的循環語句包括for循環和while循環,代碼以下:
for item in iterable:
do
for i in range(1,11):
print(i)
while condition:
do
例如,設計一個小程序,計算1~100的和:
i = 0
sum = 0
while i < 100:
i = i + 1
sum = sum + i
print(sum)
04 Python數據結構
數據結構是存放數據的容器,本節主要講解Python的4種基本數據結構,即列表、字典、元組和集合。
在爬蟲實戰中,使用最多的就是列表數據結構,不管是構造出的多個URL,仍是爬取到的數據,大多數都爲列表數據結構。下面首先介紹列表最顯著的特徵:
列表中的每個元素都是可變的。
列表的元素都是有序的,也就是說每一個元素都有對應的位置(相似字符串的切片和索引)。
列表能夠容納全部的對象。
列表中的每一個元素都是可變的,這意味着能夠對列表進行增、刪、改操做,這些操做在爬蟲中不多使用,所以這裏再也不給讀者添加知識負擔。
列表的每一個元素都有對應的位置,這種用法與字符串的切片和索引很類似。
list = ['peter', 'lilei', 'wangwu', 'xiaoming']
print(list[0])
print(list[2:])
peter
['wangwu', 'xiaoming']
若是爲切片,返回的也是列表的數據結構。
列表能夠容納全部的對象:
list = [
1,
1.1,
'string',
print(1),
True,
[1, 2],
(1, 2),
{'key', 'value'}
]
列表中會常常用到多重循環,所以讀者有必要去了解和使用多重循環。如今,擺在讀者面前有兩個列表,分別是姓名和年齡的列表:
names = ['xiaoming','wangwu','peter']
ages = [23,15,58]
這時能夠經過多重循環讓name和age同時打印在屏幕上:
names = ['xiaoming','wangwu','peter']
ages = [23,15,58]
for name, age in zip(names, ages):
print(name,age)
xiaoming 23
wangwu 15
peter 58
注意:多重循環先後變量要一致。
在爬蟲中,常常請求多個網頁,一般狀況下會把網頁存到列表中,而後循環依次取出並訪問爬取數據。這些網頁都有必定的規律,若是是手動將這些網頁URL存入到列表中,不只花費太多時間,也會形成代碼冗餘。這時可經過列表推導式,構造出這樣的列表,例如某個網站每頁的URL是這樣的(一共13頁):
經過如下代碼便可構造出13頁URL的列表數據:
urls = ['http://bj.xiaozhu.com/search-duanzufang-p{}-0/'.format(number) for number in range(1,14)]
for url in urls:
print(url)
經過一行代碼便可構造出來,經過for循環打印出每一個URL,如圖1.5所示。
▲圖1.5 列表推導式構造URL列表
注意:本網站爲小豬短租網。
Python的字典數據結構與現實中的字典相似,以鍵值對('key'-'value')的形式表現出來。本文中只講解字典的創造,字典的操做在後面會詳細介紹。字典的格式以下:
user_info = {
'name':'xiaoming',
'age':'23',
'sex':'man'
}
注意:插入MongoDB數據庫需用字典結構。
在爬蟲中,元組和集合不多用到,所以這裏只作簡單介紹。元組相似於列表,可是元組的元素不能修改只能查看,元組的格式以下:
tuple = (1,2,3)
集合的概念相似數學中的集合。每一個集合中的元素是無序的,不能夠有重複的對象,所以能夠經過集合把重複的數據去除。
list = ['xiaoming','zhangyun','xiaoming']
set = set(list)
print(set)
注意:集合是用大括號構建的。
05 Python文件操做
在爬蟲初期的工做中,經常會把數據存儲到文件中。本節主要講解Python如何打開文件和讀寫數據。
Python中經過open()函數打開文件,語法以下:
open(name[, mode[, buffering]])
open()函數使用文件名做爲惟一的強制參數,而後返回一個文件對象。模式(mode)和緩衝(buffering)是可選參數。在Python的文件操做中,mode參數的輸入是有必要的,而buffering使用較少。
若是在本機上有名爲file.txt的文件(讀者能夠在本機中新建一個文本文件),其存儲路徑爲C:UsersAdministratorDesktop,那麼能夠經過下面代碼打開文件:
f = open('C:/Users/Administrator/Desktop/file.txt')
注意:此代碼爲Windows系統下的路徑寫法。
若是文件不存在,則會出現如圖1.6所示的錯誤。
▲圖1.6 文件不存在報錯信息
若是open()函數只是加入文件的路徑這一個參數,則只能打開文件並讀取文件的相關內容。若是要向文件中寫入內容,則必須加入模式這個參數了。下面首先來看看open()函數中模式參數的經常使用值,如表1.1所示。
▲表1.1 open()函數中模式參數的經常使用值
上一節中有了名爲f的類文件對象,那麼就能夠經過f.write()方法和f.read()方法寫入和讀取數據了。
f = open('C:/Users/Administrator/Desktop/file.txt','w+')
f.write('hello world')
這時,在本機上打開file.txt文件,能夠看到如圖1.7所示的結果。
▲圖1.7 Python寫文件
注意:若是沒有創建文件,運行上面代碼也能夠成功。
若是再次運行程序,txt文件中的內容不會繼續添加,能夠修改模式參數爲'r+',即可一直寫入文件。
Python讀取文件經過read()方法,下面嘗試把f的類文件對象寫入的數據讀取出來,使用以下代碼便可完成操做:
f = open('C:/Users/Administrator/Desktop/file.txt','r')
content = f.read()
print(content)
當完成讀寫工做後,應該牢記使用close()方法關閉文件。這樣能夠保證Python進行緩衝的清理(出於效率考慮而把數據臨時存儲在內存中)和文件的安全性。經過下面代碼便可關閉文件。
f = open('C:/Users/Administrator/Desktop/file.txt','r')
content = f.read()
print(content)
f.close()
06 Python面向對象
Python做爲一個面向對象的語言,很容易建立一個類和對象。本節主要講解類的定義及其相關使用方法。
類是用來描述具備相同屬性和方法的對象集合。人能夠經過不一樣的膚色劃分爲不一樣的種族,食物也有不一樣的種類,商品也是形形色色。但劃分爲同一類的物體,確定具備類似的特徵和行爲方式。
對於同一款自行車而言,它們的組成結構都是同樣的,如車架、車輪和腳踏板等。經過Python能夠定義這個自行車的類:
class Bike:
compose = ['frame','wheel','pedal']
經過使用class定義一個自行車的類,類中的變量compose稱爲類的變量,專業術語爲類的屬性。這樣,顧客購買的自行車組成結構就是同樣的了。
my_bike = Bike()
you_bike = Bike()
print(my_bike.compose)
print(you_bike.compose) #類的屬性都是同樣的
結果如圖1.8所示。
▲圖1.8 類屬性引用
在左邊寫上變量名,右邊寫上類的名稱,這個過程稱之爲類的實例化,而my_bike就是類的實例。經過「.」加上類的屬性,就是類屬性的引用。類的屬性會被類的實例共享,因此結果都是同樣的。
對於同一款自行車來講,有些顧客買回去後會改造下,如加一個車筐能夠放東西等。
class Bike:
compose = ['frame','wheel','pedal']
my_bike = Bike()
my_bike.other = 'basket'
print(my_bike.other) #實例屬性
結果如圖1.9所示。
▲圖1.9 實例屬性
說明:經過給類的實例屬性進行賦值,也就是實例屬性。compose屬性屬於全部的該款自行車,而other屬性只屬於my_bike這個類的實例。
讀者是否還記得字符串的format()方法。方法就是函數,方法是對實例進行使用的,因此又叫實例方法。對於自行車而言,它的方法就是騎行。
class Bike:
compose = ['frame','wheel','pedal']
def use(self):
print('you are riding')
my_bike = Bike()
my_bike.use()
結果如圖1.10所示。
▲圖1.10 實例方法
注意:這裏的self參數就是實例自己。
和函數同樣,實例方法也是能夠有參數的。
class Bike:
compose = ['frame','wheel','pedal']
def use(self,time):
print('you ride {}m'.format(time*100))
my_bike = Bike()
my_bike.use(10)
結果如圖1.11所示。
▲圖1.11 實例方法多參數
Python的類中有一些「魔法方法」,_init_()方法就是其中之一。在咱們創造實例的時候,不須要引用該方法也會被自動執行。
class Bike:
compose = ['frame','wheel','pedal']
def __init__(self):
self.other = 'basket'
def use(self,time):
print('you ride {}m'.format(time*100))
my_bike = Bike()
print(my_bike.other)
結果如圖1.12所示。
▲圖1.12 魔術方法
共享單車的出現,方便了人們的出行。共享單車和原來的自行車組成結構相似,但多了付費的功能。
class Bike:
compose = ['frame','wheel','pedal']
def __init__(self):
self.other = 'basket' #定義實例的屬性
def use(self,time):
print('you ride {}m'.format(time*100))
class Share_bike(Bike):
def cost(self,hour):
print('you spent {}'.format(hour*2))
bike = Share_bike()
print(bike.other)
bike.cost(2)
結果如圖1.13所示。
▲圖1.13 類的繼承
在新的類Share_bike後面的括號中加入Bike,表示Share_bike繼承了Bike父類。父類中的變量和方法能夠徹底被子類繼承,在特殊狀況下,也能夠對其覆蓋
若是還有問題未能獲得解決,搜索887934385交流羣,進入後下載資料工具安裝包等。最後,感謝觀看!