跟我一起0基礎(chǔ)學(xué)習(xí)Python爬蟲(chóng)

1瘟滨、實(shí)驗(yàn)環(huán)境Python3

2、Python基礎(chǔ)語(yǔ)法

2.1注釋

號(hào)可以注釋一行

'''或"""贮尖,注釋多段內(nèi)容

2.2標(biāo)識(shí)符(標(biāo)識(shí)某個(gè)東西的符號(hào))

第一個(gè)字符為字符或下劃線(不能為數(shù)字)

2.3數(shù)據(jù)類(lèi)型

常見(jiàn)數(shù)據(jù)類(lèi)型有數(shù)、字符串、列表(list)肿仑、元組(tuple)、集合(set)碎税、字典(dictionary)
數(shù):1234567890
字符串:a='abc',a="abc",a='''abc’‘’輸出結(jié)果一樣

a.split('w')#指定分隔符
a.strip())#默認(rèn)去除兩邊的空格
a.replace('w','h')#w替換成h
'_'.join(a)#必須是字符串拼接h_t_t_p_:_/_/_w_w_w_._o_l_d_b_o_y_e_d_u_._c_o_m_/
a.upper()#所有小寫(xiě)轉(zhuǎn)大寫(xiě)
a.lower()#所有大小轉(zhuǎn)小寫(xiě)
a.find('h')#元素所在位置尤慰,沒(méi)有的時(shí)候會(huì)返回-1
a.index('h')#元素所在位置,沒(méi)有的時(shí)候會(huì)報(bào)錯(cuò)
a.startswith()#判斷是否以xx開(kāi)頭雷蹂,返回布爾值
a.endswith()#判斷是否以xx結(jié)尾伟端,返回布爾值
a.count('w')#判斷指定元素出現(xiàn)的次
print(a.center(20, '*'))#不夠50個(gè)字符用*填充

列表:存儲(chǔ)多個(gè)元素的,x=[a,b,c,d]匪煌,x[0]代表第一個(gè)元素a责蝠,列表里面的元素可以重新賦值,如a[0]='123'
元組:存儲(chǔ)多個(gè)元素的萎庭,x=(a,b,c.d)霜医,x[0]代表第一個(gè)元素a,元組里面的元素不可以重新賦值
字典:{鍵:值驳规,鍵:值...}肴敛,d={"name":"zhang","sex":"man","job":"studen"},取值格式字典名["對(duì)應(yīng)鍵名"]吗购,如d["name"]顯示的是'zhang'
集合:可以去重医男、并集、差集等等巩搏,test1=set("aljfdlasjdasdfasf")昨登,test2=set("aljsdfopiewenfv"),去重可以用test1 or(或-) test2贯底,并集可以用test1 and test2等

2.4運(yùn)算符

常見(jiàn)的有+丰辣、-、×禽捆、/笙什、%等,優(yōu)先級(jí)與數(shù)學(xué)中基本一致胚想,優(yōu)先執(zhí)行需加()

2.5縮進(jìn)

同一層次的代碼琐凭,需要設(shè)置同樣的縮進(jìn)(一般4個(gè)空格或tab鍵為一級(jí))

2.6循環(huán)

2.6.1三種控制流概述

控制流-程序的執(zhí)行流程:順序結(jié)構(gòu);條件分之結(jié)構(gòu)浊服;循環(huán)結(jié)構(gòu)统屈;

2.6.2if判斷語(yǔ)句
a=10
b=1
if(a>9):
    pring(a)
    if(b<9):
        print(b)
elif(a>9 and a<=19):
    print("haha")
else:
    print("怎么可能")
2.6.3while循環(huán)語(yǔ)句
a=0
while(a<10):
    print("hello")
    a+=1
2.6.4for循環(huán)-遍歷列表
a=["a","b","c"]
for i in a:
    print(i)
for i in range(0,10): 
#0,10為生成0-9的整數(shù)
    print("hello")
2.6.4中斷語(yǔ)句

break:全部退出胚吁,直接中斷

a=["a","b","c"]
for i in a:
    print(i)
    if(i=="b"):
        break

continue:中斷(跳過(guò))一次循環(huán),繼續(xù)下一次循環(huán)

a=["a","b","c"]
for i in a:
    print(i)
    if(i=="b"):
        continue
2.6.5乘法口訣表

正序

for i in range(1,10):
    for j in range(1,i+1):
        print(str(i)+str("*")+str(j)+"="+str(i*j),end="\t")
    print()
1*1=1   
2*1=2   2*2=4   
3*1=3   3*2=6     3*3=9 
4*1=4   4*2=8   4*3=12  4*4=16  
5*1=5   5*2=10  5*3=15  5*4=20  5*5=25  
6*1=6   6*2=12  6*3=18  6*4=24  6*5=30  6*6=36  
7*1=7   7*2=14  7*3=21  7*4=28  7*5=35  7*6=42  7*7=49  
8*1=8   8*2=16  8*3=24  8*4=32  8*5=40  8*6=48  8*7=56  8*8=64  
9*1=9   9*2=18  9*3=27  9*4=36  9*5=45  9*6=54  9*7=63  9*8=72  9*9=81

倒序

for i in range(9,0,-1):
    for j in range(i,0,-1):
        print(str(i)+str("*")+str(j)+"="+str(i*j),end="\t")
    print()
9*9=81  9*8=72  9*7=63  9*6=54  9*5=45  9*4=36  9*3=27  9*2=189*1=9 
8*8=64  8*7=56  8*6=48  8*5=40  8*4=32  8*3=24  8*2=16  8*1=8   
7*7=49  7*6=42  7*5=35  7*4=28  7*3=21  7*2=14  7*1=7   
6*6=36  6*5=30  6*4=24  6*3=18  6*2=12  6*1=6   
5*5=25  5*4=20  5*3=15  5*2=10  5*1=5   
4*4=16  4*3=12  4*2=8   4*1=4   
3*3=9     3*2=6   3*1=3 
2*2=4     2*1=2 
1*1=1

3愁憔、Python函數(shù)與模塊

函數(shù)的本質(zhì)就是功能的封裝腕扶,可以提高效率和可讀性;

3.1局部變量和局部變量

變量生效范圍稱(chēng)為作用域吨掌,作用域?yàn)槿志褪侨肿兞堪氡В饔糜驗(yàn)榫植烤蜑榫植孔兞浚?/p>

3.2函數(shù)
3.2.1定義函數(shù)方法

函數(shù)定義格式:

def 函數(shù)名(參數(shù)):
    函數(shù)體
def abc():
    print("abcde")
3.2.2調(diào)用函數(shù)

函數(shù)調(diào)用格式:

函數(shù)名(參數(shù)):
acb()
3.2.2函數(shù)參數(shù)使用詳解

參數(shù):與外界溝通的接口,分為形參和實(shí)參膜宋,一般在函數(shù)定義的時(shí)候使用的參數(shù)是形參窿侈,一般在函數(shù)調(diào)用的時(shí)候使用的參數(shù)是實(shí)參;

def bjdx(a,b):
    if(a>b):
        print("a比b大")
    else:
        print("b比a大或相等")
bjdx(4,5)
定義形參a.b,調(diào)用時(shí)輸入a.b實(shí)參4,5進(jìn)行比較,結(jié)果b比a大或相等秋茫;
3.3模塊

模塊組成:程序段組合-->功能塊(函數(shù))組合-->模塊

3.3.1模塊導(dǎo)入方式

我們可以使用一下兩種方式導(dǎo)入模塊:

import 模塊名 
或者
from ... import ...
3.3.2模塊導(dǎo)入使用
import cgi
cgi.closelog()
--------------
from cgi import closelog

兩種方式使用調(diào)用模塊并使用模塊方法

3.3.3第三方模塊的安裝
模塊的來(lái)源:

自帶模塊史简;
第三方模塊;
自定義模塊学辱;

安裝第三方模塊:

pip方式(網(wǎng)絡(luò)安裝)乘瓤;
whl下載安裝的方式(下載安裝);
whl下載地址:https://www.lfd.uci.edu/~gohlke/pythonlibs策泣,安裝直接使用pip install whl文件全名(pip install Cython?0.29.11?cp38?cp38m?win32.whl)
直接復(fù)制的方式衙傀;
anaconda安裝模塊;

3.3.4自定義模塊

只要你把*.py文件放到模塊文件目錄(一般在軟件安裝目錄lib下),他就是一個(gè)模塊了萨咕,可以被調(diào)用统抬;

4、文件操作

打開(kāi)文件使用open(文件地址危队,操作形式)
w :寫(xiě)入(類(lèi)似重定向>聪建,先清空在寫(xiě)入)
r :讀取
b :二進(jìn)制
a+:追加
讀取:
a=open("文件地址","參數(shù)(r)")
a.read()-讀取全部?jī)?nèi)容
a.readline()-一行一行讀取
a.close()

>>> a=open("/root/test1.txt","r")
>>> a.read()
'測(cè)試文本111111\n'
>>> a.close()

寫(xiě)入:
a=open("文件地址","參數(shù)(w)")
a.write("123123")-清空后再寫(xiě)入茫陆,追加寫(xiě)入?yún)?shù)要用a+
a.close()

>>> a=open("/root/test2.txt","w")
>>> a.write("測(cè)試寫(xiě)入功能!")
>>> a.close()
[root@test ~]# cat test2.txt 
測(cè)試寫(xiě)入功能!

5金麸、異常處理

容錯(cuò)機(jī)制,提高程序容錯(cuò)性簿盅!

異常處理格式
try:
    程序
except Exception as 異常名稱(chēng):
    異常處理部分
事例1(出現(xiàn)異常顯示異常):
try:
    for i in range(0,10):
        print(i)
        if(i==4):
            print(jsd)
    print("hello")
except Exception as errors:
    print(errors)
   #pass 也可以使用pass什么都不顯示
事例2(出現(xiàn)異常跳過(guò)繼續(xù)執(zhí)行):
for i in range(0,10):
    try:
        print(i)
        if(i==4):
            print(jsd)
    except Exception as errors:
       #pass 也可以使用pass什么都不顯示
        print(errors)
print("hello")

6挥下、Python面向?qū)ο缶幊?

6.1面向?qū)ο笞兂筛攀?/h5>

面向?qū)ο缶幊碳碠OP編程,區(qū)別于面向過(guò)程編程桨醋,面向?qū)ο缶幊瘫容^適合開(kāi)發(fā)大項(xiàng)目(面向過(guò)程編程適合中小項(xiàng)目)棚瘟,會(huì)以更接近人類(lèi)的思維的角度去寫(xiě)程序;

6.2類(lèi)和對(duì)象

類(lèi):具有某種特征的失誤的集合(群體)喜最;
對(duì)象:群體(類(lèi))里面的個(gè)體偎蘸;

類(lèi)是抽象的,對(duì)象是具體的。
創(chuàng)建類(lèi)格式:
class 類(lèi)名:
      類(lèi)里面的內(nèi)容
事例1:
#創(chuàng)建一個(gè)類(lèi)
class cl1:
    pass
>>> cl1
<class '__main__.cl1'>
#實(shí)例化一個(gè)類(lèi)
>>> a=cl1()
>>> a
<__main__.cl1 object at 0x7fd798e95be0>
6.3構(gòu)造函數(shù)(構(gòu)造方法)

類(lèi)在實(shí)例化的時(shí)候自動(dòng)首先觸發(fā)的方法迷雪,構(gòu)造出一個(gè)對(duì)象的時(shí)候就首先出發(fā)的方法限书;
self:在類(lèi)中的方法必須加上self參數(shù)
構(gòu)造函數(shù):init(self,參數(shù))
構(gòu)造函數(shù)實(shí)際意義:初始化

class cl2:
    def __init__(self):
        print("I an cl2 self!")
>>> b=cl2()
I an cl2 self!
>>> b
<__main__.cl2 object at 0x7fd798e95dd8>
6.4給類(lèi)加上參數(shù)(給構(gòu)造方法加上參數(shù))
class cl3:
    def __init__(self,name,job):
        print(" My name is "+name+" My job is "+job)
>>> c=cl3("shuaige","teacher")
My name is shuaige My job is teacher
>>> c2=cl3("xiaoli","hah")
 My name is xiaoli My job is hah
6.5屬性和方法

屬性:靜態(tài)的特征,如頭發(fā)章咧、手臂等蔗包,相當(dāng)于類(lèi)里面的變量;

屬性調(diào)用方法:
class cl4:
    def __init__(self,name,job):
        self.myname=name
        self.myjob=job
>>> d=cl4("xiaobai","teacher")
>>> d
<__main__.cl4 object at 0x7fd798dfa198>
>>> d.myname
'xiaobai'
>>> d.myjob
'teacher'

方法:類(lèi)里面的函數(shù)慧邮,def 方法(函數(shù))名(self,參數(shù))

class cl5:
    def myfunc1(self,name):
        print("hello"+name)
>>> f=cl5()
>>> f.myfunc1("shuai")
helloshuai
class cl6:
    def __init__(self,name):
        self.myname=name
    def myfunc1(self):
        print("hello"+self.myname)
>>> f=cl6("zhangshuai")
>>> f
<__main__.cl6 object at 0x7f817793acc0>
>>> f.myfunc1()
hellozhangshuai
6.6繼承與重載

繼承:把某一個(gè)或多個(gè)類(lèi)(基類(lèi))的特征拿過(guò)來(lái);
重載:在子類(lèi)(派生類(lèi))里面對(duì)繼承過(guò)來(lái)的特征重新定義舟陆;
父類(lèi):基類(lèi)
子類(lèi):派生類(lèi)

基類(lèi)1(例如父親有說(shuō)的能力):
class father():
    def speak(self):
        print("I can speak!")
單繼承(例如兒子繼承父親說(shuō)的能力):
class son(father):
    pass
>>> s=son()
>>> s.speak()
I can speak!
基類(lèi)2(例如母親有寫(xiě)的能力):
class mother():
    def write(self):
        print("I can write!")
多繼承(例如女兒繼承了父親說(shuō)和母親的寫(xiě)能力,自己還有聽(tīng)的能力)
class daughter(father,mother):
    def listen(self):
        print("I can listen!")
>>> h=daughter()
>>> h.speak()
I can speak!
>>> h.write()
I can write!
>>> h.listen()
I can listen!
重寫(xiě)(重載误澳,可以將繼承過(guò)來(lái)的能力進(jìn)行覆蓋):
class son2(father):
    def speak(self):
        print("I can speak 2!")
>>> j=son2()
>>> j.speak()
I can speak 2!

練習(xí):
將多個(gè)excel文檔合并(使用xlrd、xlwt秦躯、openpyxl忆谓、xlsxwriter模塊)
xlwt和xlsxwriter不支持修改表,信息追加會(huì)比較麻煩

Excel結(jié)構(gòu):
         Workboot  工作滨獬小(相當(dāng)于一個(gè)類(lèi))
         Worksheet 標(biāo)簽(相當(dāng)于一個(gè)屬性倡缠、方法)
            title  標(biāo)題
            row    行
            column 列
            cell   單元格
            value  值
         save()    存儲(chǔ)行為
         add_sheet 增加一個(gè)表單
         write     在指定單元各寫(xiě)入數(shù)據(jù)
簡(jiǎn)單事例1:
>>> import openpyxl
>>> wb = openpyxl.Workbook()
>>> ws = wb.active
>>> ws
<Worksheet "Sheet">
>>> ws.title = "課程表"
>>> wb
<openpyxl.workbook.workbook.Workbook object at 0x7f254a558d68>
>>> ws["A1"].value = "帥哥的課"
>>> ws["A1"]
<Cell '課程表'.A1>
>>> ws["A1"].value
'帥哥的課'
>>> ws["C5"] = "帥哥開(kāi)課了!"
>>> ws["C5"].value
'帥哥開(kāi)課了茎活!'
>>> wb.save(r"test.xlsx")
就創(chuàng)建了一個(gè)表格
簡(jiǎn)單事例2:
>>> import xlrd
>>> wb = xlrd.open_workbook("/usr/lib/python2.7/site-packages/test.xlsx")
>>> sheet = wb.sheet_by_index(0)
>>> print("該Excel文件有行數(shù)"+str(sheet.nrows))
該Excel文件有行數(shù)5
>>> values_line = sheet.row_values(0)
>>> print(values_line)
['帥哥的課', '', '']
簡(jiǎn)單事例2(顯示表數(shù)據(jù)):
import xlrd
wb = xlrd.open_workbook("/usr/lib/python2.7/site-packages/test.xlsx")
sheet = wb.sheet_by_index(0)
print("該Excel文件有行數(shù)"+str(sheet.nrows))
該Excel文件有行數(shù)5
values_line = sheet.row_values(4)
print(values_line)
['帥哥的課', '', '']
顯示全部?jī)?nèi)容:
for i in range(0,sheet.nrows):
    line = sheet.row_values(i)
    print("第%d行數(shù)據(jù):"%i,end="")
    #%d為數(shù)字占位符昙沦,調(diào)用后面i的值
    print(line)
第0行數(shù)據(jù):['帥哥的課', '', '']
第1行數(shù)據(jù):['', '', '']
第2行數(shù)據(jù):['', '', '']
第3行數(shù)據(jù):['', '', '']
第4行數(shù)據(jù):['', '', '帥哥開(kāi)課了!']

持續(xù)更新中(我正在學(xué)習(xí)T乩蟆6芤)


BTC:3LD8DBk5nZSwmGoF1mvM12Pp5YqNFEvfLA
ETH:0xAD765200e7Feb98a2AF262387A41F078e9F91eAc

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市懒熙,隨后出現(xiàn)的幾起案子丘损,更是在濱河造成了極大的恐慌,老刑警劉巖工扎,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件徘钥,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡肢娘,警方通過(guò)查閱死者的電腦和手機(jī)呈础,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)蔬浙,“玉大人猪落,你說(shuō)我怎么就攤上這事〕氩” “怎么了笨忌?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)俱病。 經(jīng)常有香客問(wèn)我官疲,道長(zhǎng)袱结,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任途凫,我火速辦了婚禮垢夹,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘维费。我一直安慰自己果元,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布犀盟。 她就那樣靜靜地躺著而晒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪阅畴。 梳的紋絲不亂的頭發(fā)上倡怎,一...
    開(kāi)封第一講書(shū)人閱讀 51,365評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音贱枣,去河邊找鬼监署。 笑死,一個(gè)胖子當(dāng)著我的面吹牛纽哥,可吹牛的內(nèi)容都是我干的钠乏。 我是一名探鬼主播,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼昵仅,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼缓熟!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起摔笤,我...
    開(kāi)封第一講書(shū)人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤够滑,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后吕世,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體彰触,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年命辖,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了况毅。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡尔艇,死狀恐怖尔许,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情终娃,我是刑警寧澤味廊,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響余佛,放射性物質(zhì)發(fā)生泄漏柠新。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一辉巡、第九天 我趴在偏房一處隱蔽的房頂上張望恨憎。 院中可真熱鬧,春花似錦郊楣、人聲如沸憔恳。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)喇嘱。三九已至,卻和暖如春塞栅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背腔丧。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工放椰, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人愉粤。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓砾医,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親衣厘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子如蚜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354