財(cái)經(jīng)大數(shù)據(jù)技術(shù)應(yīng)用基礎(chǔ) 課件 項(xiàng)目四 數(shù)據(jù)采集_第1頁(yè)
財(cái)經(jīng)大數(shù)據(jù)技術(shù)應(yīng)用基礎(chǔ) 課件 項(xiàng)目四 數(shù)據(jù)采集_第2頁(yè)
財(cái)經(jīng)大數(shù)據(jù)技術(shù)應(yīng)用基礎(chǔ) 課件 項(xiàng)目四 數(shù)據(jù)采集_第3頁(yè)
財(cái)經(jīng)大數(shù)據(jù)技術(shù)應(yīng)用基礎(chǔ) 課件 項(xiàng)目四 數(shù)據(jù)采集_第4頁(yè)
財(cái)經(jīng)大數(shù)據(jù)技術(shù)應(yīng)用基礎(chǔ) 課件 項(xiàng)目四 數(shù)據(jù)采集_第5頁(yè)
已閱讀5頁(yè),還剩80頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

四數(shù)據(jù)采集項(xiàng)目項(xiàng)目四學(xué)習(xí)目標(biāo)知識(shí)目標(biāo)了解文件讀寫(xiě)常用方法及函數(shù);熟悉網(wǎng)絡(luò)爬蟲(chóng)原理及Web前端基礎(chǔ)內(nèi)容;掌握SQLite數(shù)據(jù)類(lèi)型與sqlite3模塊操作;掌握Requests庫(kù)與BeautifulSoup模塊的使用方法。能力目標(biāo)能熟練使用Pandas的read_excel()、to_excel()等方法來(lái)讀取和寫(xiě)入Excel文件;能熟練利用sqlite3模塊進(jìn)行數(shù)據(jù)庫(kù)的連接、表的創(chuàng)建以及數(shù)據(jù)庫(kù)內(nèi)容的讀取等操作;能利用Requests庫(kù)、結(jié)合for循環(huán)以及Pandas的read_excel()等方法,正確完成上市公司財(cái)務(wù)報(bào)表的獲取及讀取等操作。項(xiàng)目四學(xué)習(xí)目標(biāo)素質(zhì)目標(biāo)通過(guò)本單元學(xué)習(xí),讓學(xué)生領(lǐng)悟數(shù)據(jù)采集的重要性,引導(dǎo)學(xué)生樹(shù)立系統(tǒng)觀念,會(huì)用前瞻性思考、全局性謀劃、整體性推進(jìn)的科學(xué)思想方法;讓學(xué)生在體驗(yàn)簡(jiǎn)單網(wǎng)頁(yè)爬取和網(wǎng)頁(yè)數(shù)據(jù)采集的同時(shí),培養(yǎng)執(zhí)著專(zhuān)注、精益求精、一絲不茍和追求卓越的工匠精神。項(xiàng)目四思維導(dǎo)圖4.1Python讀取數(shù)據(jù)文件文件是存儲(chǔ)在輔助存儲(chǔ)器上的數(shù)據(jù)序列,可以包含文本、數(shù)字、表格等多種類(lèi)型的數(shù)據(jù)。用文件形式組織和表達(dá)數(shù)據(jù)是更有效也更靈活的方式。Python提供了對(duì)文件的基本操作,包括打開(kāi)、讀取、寫(xiě)入和關(guān)閉文件。4.1.1文件概述4.1Python讀取數(shù)據(jù)文件文件的含義1文件的分類(lèi)2文本文件二進(jìn)制文件要打開(kāi)一個(gè)txt文件,可以使用open('file','mode')函數(shù),其中第一個(gè)參數(shù)輸入要讀取的文件路徑,第二個(gè)參數(shù)是打開(kāi)文件模式,文件模式類(lèi)型如下表4-1所示。4.1.2讀寫(xiě)txt文件4.1Python讀取數(shù)據(jù)文件打開(kāi)txt文件1表4-1open()函數(shù)打開(kāi)文件的模式模式含義r以只讀方式打開(kāi)一個(gè)文件,為open()的默認(rèn)模式。w打開(kāi)一個(gè)文件進(jìn)行寫(xiě)入。如果文件不存在,則創(chuàng)建新文件;如果文件存在,則覆蓋該文件。x執(zhí)行文件的新建寫(xiě)入,如果文件已存在,則操作失敗,并拋出異常。a追加寫(xiě)入模式,如果文件已存在,則在后面追加內(nèi)容,如果文件不存在,則創(chuàng)建。t文本文件模式,為open()的默認(rèn)模式。b二進(jìn)制文件模式。+打開(kāi)文件進(jìn)行更新(同時(shí)讀寫(xiě)),與r、w、a、b一同出現(xiàn)。使用with語(yǔ)句打開(kāi)文件,在代碼塊執(zhí)行完畢后自動(dòng)關(guān)閉文件。采用不同模式打開(kāi)txt文件,代碼示例如下所示。4.1.2讀寫(xiě)txt文件4.1Python讀取數(shù)據(jù)文件打開(kāi)txt文件1行號(hào)1234代碼行#打開(kāi)文件

withopen('example.txt','r')asf:#以只讀模式打開(kāi)文件withopen('example.txt','w')asf:#打開(kāi)文件進(jìn)行寫(xiě)入#使用了with語(yǔ)句來(lái)打開(kāi)文件,這樣可以在代碼塊執(zhí)行完畢后自動(dòng)關(guān)閉文件write()用于將單個(gè)字符串寫(xiě)入文件writelines()可將一個(gè)字符串列表寫(xiě)入文件中,但不會(huì)自動(dòng)換行,換行需要添加換行符\n寫(xiě)入文本文件的操作函數(shù)有:寫(xiě)入txt文件24.1Python讀取數(shù)據(jù)文件4.1.2讀寫(xiě)txt文件寫(xiě)入txt文件24.1Python讀取數(shù)據(jù)文件4.1.2讀寫(xiě)txt文件例4-1代碼錄入

行號(hào)代碼行1#

打開(kāi)文件進(jìn)行寫(xiě)入

2withopen('example1.txt','w',encoding='utf-8')asf:3#

encoding='utf-8'指定編碼方式,防止編碼錯(cuò)誤4

f.write('我的名字是張三\n')#

寫(xiě)入“我的名字是張三”,\n表示換行5

f.write('我今年20歲\n')

#

寫(xiě)入“我今年20歲”

6

f.write('我喜歡編程')#

寫(xiě)入“我喜歡編程”如何在Python中寫(xiě)入txt文件,代碼例4-1、4-2所示。寫(xiě)入txt文件24.1Python讀取數(shù)據(jù)文件4.1.2讀寫(xiě)txt文件例4-2代碼錄入

行號(hào)代碼行1withopen('example2.txt','w',encoding='utf-8')asf:2lines=['我的名字是張三\n','我今年20歲\n','我喜歡編程\n']3#將一個(gè)字符串列表寫(xiě)入文件4f.writelines(lines)讀取txt文件內(nèi)容,通常使用:讀取txt文件34.1Python讀取數(shù)據(jù)文件4.1.2讀寫(xiě)txt文件read()readline()readlines()讀取txt文件3行號(hào)1234代碼行#打開(kāi)文件withopen('example1.txt','r',encoding='utf-8')asf:data=f.read()

#讀取文本print(data)#輸出所有文本內(nèi)容4.1Python讀取數(shù)據(jù)文件4.1.2讀寫(xiě)txt文件

read()函數(shù)用于一次性讀取整個(gè)文件的內(nèi)容,將文件內(nèi)容作為一個(gè)字符串返回。讀取上面創(chuàng)建的example1.txt,代碼例4-3所示。讀取txt文件3行號(hào)1234代碼行#打開(kāi)文件withopen('example1.txt','r',encoding='utf-8')asf:print(f.readline())#讀取第一行的內(nèi)容print(f.readline())

#接著讀取第二行的內(nèi)容4.1Python讀取數(shù)據(jù)文件4.1.2讀寫(xiě)txt文件

readline()函數(shù)每次只讀取文件中的一行內(nèi)容,并返回這一行作為一個(gè)字符串。這對(duì)于處理大文件或需要逐行處理文件的場(chǎng)景非常有用。分行讀取上面創(chuàng)建的example1.txt,代碼例4-4所示。讀取txt文件3行號(hào)1234代碼行#打開(kāi)文件withopen('example1.txt','r',encoding='utf-8')asf:data=f.readlines()#讀取全部?jī)?nèi)容,以數(shù)列的格式返回結(jié)果print(data)

#輸出所有文本內(nèi)容4.1Python讀取數(shù)據(jù)文件4.1.2讀寫(xiě)txt文件

readlines()函數(shù)會(huì)一次性讀取文件中的所有行,并將它們作為一個(gè)列表返回,其中列表的每個(gè)元素都是文件中的一行。一般適用于文件內(nèi)容不是非常大的情況,因?yàn)樗鼤?huì)將所有行都加載到內(nèi)存中。讀取上面創(chuàng)建的example1.txt,返回一個(gè)列表,代碼及運(yùn)行結(jié)果例4-5所示。使用Pandas的read_excel讀寫(xiě)Excel文件14.1Python讀取數(shù)據(jù)文件4.1.3讀寫(xiě)Excel文件

read_excel()是pandas庫(kù)中用于讀取Excel文件的函數(shù),它可以將Excel文件的內(nèi)容轉(zhuǎn)換為pandas的DataFrame對(duì)象,以便于進(jìn)行數(shù)據(jù)分析和處理,基本語(yǔ)法(列舉常用參數(shù)):

pd.read_excel(io

,

sheet_name=0

,

index_col=None)指定讀取的Excel文件路徑指定要讀取的工作表,可以是工作表的名稱(chēng),默認(rèn)值為0,表示讀取第一個(gè)工作表用作行索引的列編號(hào)或列名,如果給定,將使用這一列作為返回的DataFrame的行索引

讀取名為班級(jí)學(xué)生信息.xlsx的Excel文件,代碼例4-6所示。使用Pandas的read_excel讀寫(xiě)Excel文件1行號(hào)12345代碼行importpandasaspd#讀取文件班級(jí)學(xué)生信息.xlsx的第一個(gè)工作表df=pd.read_excel('班級(jí)學(xué)生信息.xlsx',sheet_name=0)#輸出內(nèi)容print(df)4.1Python讀取數(shù)據(jù)文件4.1.3讀寫(xiě)Excel文件

to_excel()函數(shù)用于將DataFrame中的數(shù)據(jù)寫(xiě)入Excel文件?;菊Z(yǔ)法(列舉常用參數(shù)):使用Pandas的to_excel寫(xiě)入Excel文件24.1Python讀取數(shù)據(jù)文件4.1.3讀寫(xiě)Excel文件df.to_excel(excel_writer

,

sheet_name='Sheet1'

,

index=True

,

header=True)指定工作表的名稱(chēng),默認(rèn)為'Sheet1'代表是否將DataFrame的行索引寫(xiě)入Excel文件,默認(rèn)為T(mén)rue代表是否將DataFrame的列名寫(xiě)入Excel文件,默認(rèn)為T(mén)rue指定要寫(xiě)入的文件路徑JSON(JavaScriptObjectNotation)是一種輕量級(jí)的數(shù)據(jù)交換格式,它基于JavaScript的一個(gè)子集。由于其文本格式獨(dú)立于編程語(yǔ)言,JSON已成為許多類(lèi)型的應(yīng)用程序之間傳輸數(shù)據(jù)的一種標(biāo)準(zhǔn)方法。JSON文件通常以.json為文件擴(kuò)展名。4.1.3讀寫(xiě)JSON文件4.1Python讀取數(shù)據(jù)文件使用json.dump()函數(shù),將數(shù)據(jù)寫(xiě)入JSON文件。4.1.3讀寫(xiě)JSON文件寫(xiě)入JSON文件14.1Python讀取數(shù)據(jù)文件json.dump(data,file,indent=4)將data編碼成JSON格式并寫(xiě)入到file中是一個(gè)可選參數(shù),用于美化輸出,使JSON文件易于閱讀使用json.load()函數(shù),從JSON文件中讀取數(shù)據(jù)。讀取例4-9寫(xiě)入的JSON文件,代碼例4-10所示。4.1.3讀寫(xiě)JSON文件讀取JSON文件24.1Python讀取數(shù)據(jù)文件行號(hào)代碼行1importjson2#打開(kāi)之前寫(xiě)入的financial_data.json文件,'r'表示只讀模式3withopen('financial_data.json','r')asf:4#調(diào)用json.load()方法從文件中讀取JSON數(shù)據(jù),并將其存儲(chǔ)在data變量中5data=json.load(f)6#輸出數(shù)據(jù)以驗(yàn)證其正確性7print(data)8#data現(xiàn)在是一個(gè)Python字典4.2Python讀寫(xiě)SQLite數(shù)據(jù)庫(kù)SQLite是輕量級(jí)的、磁盤(pán)上的數(shù)據(jù)庫(kù),不需要獨(dú)立的服務(wù)器進(jìn)程,并允許訪問(wèn)其數(shù)據(jù)庫(kù)通過(guò)包含在大多數(shù)編程語(yǔ)言中的庫(kù)。它是一個(gè)開(kāi)源的、零配置、自給自足的、事務(wù)性的SQL數(shù)據(jù)庫(kù)實(shí)現(xiàn),特別適用于嵌入式系統(tǒng)、移動(dòng)設(shè)備、桌面應(yīng)用程序和中小型項(xiàng)目。4.2.1SQLite概述4.2Python讀寫(xiě)SQLite數(shù)據(jù)庫(kù)4.2.1SQLite概述SQLite主要特點(diǎn)14.2Python讀寫(xiě)SQLite數(shù)據(jù)庫(kù)自包含無(wú)需配置跨平臺(tái)小型事務(wù)性的4.2.1SQLite概述數(shù)據(jù)庫(kù)交互的基本操作24.2Python讀寫(xiě)SQLite數(shù)據(jù)庫(kù)開(kāi)始建立連接創(chuàng)建游標(biāo)對(duì)象執(zhí)行SQL語(yǔ)句關(guān)閉游標(biāo)關(guān)閉數(shù)據(jù)庫(kù)連接結(jié)束Python的sqlite3模塊是一個(gè)提供了輕量級(jí)磁盤(pán)上SQL數(shù)據(jù)庫(kù)的接口,使得Python開(kāi)發(fā)者能夠方便地創(chuàng)建、查詢(xún)和管理SQLite數(shù)據(jù)庫(kù)。下面是sqlite3模塊中一些常用的API函數(shù):4.2.1SQLite概述Pythonsqlite3模塊的常用API34.2Python讀寫(xiě)SQLite數(shù)據(jù)庫(kù)函數(shù)描述sqlite3.connect(database[,timeout,otheroptionalarguments])連接到SQLite數(shù)據(jù)庫(kù),如果數(shù)據(jù)庫(kù)文件不存在,將會(huì)被創(chuàng)建。connection.cursor([cursorClass])創(chuàng)建游標(biāo)對(duì)象,游標(biāo)(Cursor)對(duì)象允許你發(fā)送SQL語(yǔ)句到數(shù)據(jù)庫(kù)cursor.execute(sql[,parameters])執(zhí)行SQL語(yǔ)句mit()提交當(dāng)前事務(wù)。如果你不調(diào)用這個(gè)方法,那么從上一次調(diào)用commit()方法以來(lái)所做的任何更改都不會(huì)被保存到數(shù)據(jù)庫(kù)。cursor.close()關(guān)閉游標(biāo)對(duì)象connection.close()關(guān)閉連接為了使用sqlite3模塊,首先必須創(chuàng)建一個(gè)表示數(shù)據(jù)庫(kù)的連接對(duì)象,然后可以有選擇地創(chuàng)建游標(biāo)對(duì)象,這將幫助執(zhí)行所有的SQL語(yǔ)句。建立連接并創(chuàng)建游標(biāo)對(duì)象使用的函數(shù):4.2.2連接數(shù)據(jù)庫(kù)4.2Python讀寫(xiě)SQLite數(shù)據(jù)庫(kù)sqlite3.connect(database[,timeout,otheroptionalarguments])將data編碼成JSON格式并寫(xiě)入到file中是一個(gè)可選參數(shù),表示連接等待鎖定的持續(xù)時(shí)間,直到發(fā)生異常斷開(kāi)連接,默認(rèn)5.0其他參數(shù)都是可選的,用于控制連接的各個(gè)方面現(xiàn)在要在sqlite3模塊下連接test.db數(shù)據(jù)文件,并創(chuàng)建游標(biāo)對(duì)象,最后輸出連接數(shù)據(jù)庫(kù)。使用的代碼命令如例4-11所示。4.2.2連接數(shù)據(jù)庫(kù)4.2Python讀寫(xiě)SQLite數(shù)據(jù)庫(kù)行號(hào)代碼行1#導(dǎo)入sqlite3模塊2importsqlite33#連接到數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)文件是test.db4#如果數(shù)據(jù)庫(kù)不存在,將會(huì)創(chuàng)建一個(gè)新的數(shù)據(jù)庫(kù)對(duì)象5conn=sqlite3.connect('test.db')6#創(chuàng)建一個(gè)游標(biāo)對(duì)象,使用它來(lái)執(zhí)行SQL命令7c=conn.cursor()8print(‘連接數(shù)據(jù)庫(kù)’)connection.cursor([cursorClass])用于創(chuàng)建一個(gè)游標(biāo)(cursor)對(duì)象,該對(duì)象可以用來(lái)執(zhí)行SQL語(yǔ)句并獲取查詢(xún)結(jié)果。4.2.2連接數(shù)據(jù)庫(kù)4.2Python讀寫(xiě)SQLite數(shù)據(jù)庫(kù)connection.cursor([cursorClass])是一個(gè)可選參數(shù),允許指定一個(gè)自定義的cursor類(lèi),但通常你可以省略這個(gè)參數(shù),從而得到一個(gè)標(biāo)準(zhǔn)的cursor對(duì)象SQLite中新建表格的操作是數(shù)據(jù)庫(kù)設(shè)計(jì)的基礎(chǔ)部分,它允許在數(shù)據(jù)庫(kù)中定義一個(gè)結(jié)構(gòu)化的數(shù)據(jù)存儲(chǔ)容器,即表格(Table)。每個(gè)表格由多個(gè)列(Columns)構(gòu)成,這些列定義了表格可以存儲(chǔ)的數(shù)據(jù)類(lèi)型。使用CREATETABLE語(yǔ)句創(chuàng)建表格語(yǔ)法如下所示:4.2.3編寫(xiě)表格4.2Python讀寫(xiě)SQLite數(shù)據(jù)庫(kù)創(chuàng)建表格1行號(hào)代碼行1CREATETABLEtable_name(2column1datatypePRIMARYKEY,3column2datatypeNOTNULL,4column3datatypeDEFAULT0,5...6columnNdatatype,);現(xiàn)創(chuàng)建一個(gè)表格名為COMPANY,包含ID、NAME、AGE、ADDRESS、SALARY五列。使用的代碼命令與結(jié)果如例4-12所示:4.2.3編寫(xiě)表格4.2Python讀寫(xiě)SQLite數(shù)據(jù)庫(kù)創(chuàng)建表格1行號(hào)代碼行1importsqlite32conn=sqlite3.connect('test.db')3print("數(shù)據(jù)庫(kù)打開(kāi)成功")4#創(chuàng)建光標(biāo)對(duì)象5c=conn.cursor()6#創(chuàng)建一個(gè)表:COMPANY,c.execute是PYthon中用于執(zhí)行SQL語(yǔ)句的方法,'''用來(lái)定義多行字符串7c.execute('''CREATETABLECOMPANY8(IDINTPRIMARYKEYNOTNULL,9NAMETEXTNOTNULL,4.2.3編寫(xiě)表格4.2Python讀寫(xiě)SQLite數(shù)據(jù)庫(kù)創(chuàng)建表格110AGEINTNOTNULL,11ADDRESSCHAR(50),12SALARYREAL);''')13print("數(shù)據(jù)表創(chuàng)建成功")14#提交事務(wù):15mit()16#關(guān)閉連接:17conn.close()創(chuàng)建表格之后,可以使用INSERTINTO語(yǔ)句來(lái)插入數(shù)據(jù)。以下是INSERTINTO語(yǔ)句的幾種基本用法:4.2.3編寫(xiě)表格4.2Python讀寫(xiě)SQLite數(shù)據(jù)庫(kù)用作行索引的列編號(hào)或列名,如果給定,將使用這一列作為返回的DataFrame的行索引插入數(shù)據(jù)2第一種語(yǔ)法方式如下:行號(hào)代碼行1INSERTINTOtable_name(column1,column2,column3,...)2VALUES(value1,value2,value3,...);3#在這里,column1,column2,...columnN是要插入數(shù)據(jù)的表中的列的名稱(chēng)。第二種語(yǔ)法方式如下:行號(hào)代碼行1INSERTINTOTABLE_NAMEVALUES(value1,value2,value3,...valueN);現(xiàn)將員工信息使用sqlite3模塊插入數(shù)據(jù)到SQLite數(shù)據(jù)庫(kù)中,代碼例4-13所示。4.2.3編寫(xiě)表格4.2Python讀寫(xiě)SQLite數(shù)據(jù)庫(kù)插入數(shù)據(jù)2行號(hào)代碼行1importsqlite32conn=sqlite3.connect('test.db')3c=conn.cursor()4print("數(shù)據(jù)庫(kù)打開(kāi)成功")5c.execute("INSERTINTOCOMPANY(ID,NAME,AGE,ADDRESS,SALARY)\6VALUES(1,'Paul',32,'California',20000.00)")7c.execute("INSERTINTOCOMPANY(ID,NAME,AGE,ADDRESS,SALARY)\8VALUES(2,'Allen',25,'Texas',15000.00)")現(xiàn)將員工信息使用sqlite3模塊插入數(shù)據(jù)到SQLite數(shù)據(jù)庫(kù)中,代碼例4-13所示。4.2.3編寫(xiě)表格4.2Python讀寫(xiě)SQLite數(shù)據(jù)庫(kù)插入數(shù)據(jù)2行號(hào)代碼行9c.execute("INSERTINTOCOMPANY(ID,NAME,AGE,ADDRESS,SALARY)\10VALUES(3,'Teddy',23,'Norway',20000.00)")11c.execute("INSERTINTOCOMPANY(ID,NAME,AGE,ADDRESS,SALARY)\12VALUES(4,'Mark',25,'Rich-Mond',65000.00)")13#提交事務(wù)到數(shù)據(jù)庫(kù)14mit()15print("數(shù)據(jù)插入成功")16#最后關(guān)閉數(shù)據(jù)庫(kù)連接17conn.close()通過(guò)pandas中的read_sql讀取數(shù)據(jù)庫(kù)內(nèi)容,代碼例4-14所示。4.2.3編寫(xiě)表格4.2Python讀寫(xiě)SQLite數(shù)據(jù)庫(kù)插入數(shù)據(jù)2行號(hào)代碼行1importsqlite32importpandasaspd3#Createyourconnection.4cnx=sqlite3.connect('test.db')5df=pd.read_sql_query("SELECT*FROMCOMPANY",cnx)6df通過(guò)pandas中的read_sql讀取數(shù)據(jù)庫(kù)內(nèi)容,代碼例4-14所示。4.2.3編寫(xiě)表格4.2Python讀寫(xiě)SQLite數(shù)據(jù)庫(kù)插入數(shù)據(jù)3行號(hào)代碼行1importsqlite32importpandasaspd3#Createyourconnection.4cnx=sqlite3.connect('test.db')5df=pd.read_sql_query("SELECT*FROMCOMPANY",cnx)6df在SQLite中讀取數(shù)據(jù)通常涉及使用SELECT語(yǔ)句來(lái)查詢(xún)數(shù)據(jù)庫(kù)中的表,并獲取滿(mǎn)足特定條件的數(shù)據(jù)行。SELECT語(yǔ)句的基本語(yǔ)法如下:4.2.4讀取數(shù)據(jù)4.2Python讀寫(xiě)SQLite數(shù)據(jù)庫(kù)行號(hào)代碼行1SELECTcolumn1,column2,...2FROMtable_name3WHEREcondition4ORDERBYcolumnASC/DESCSELECT:指定要檢索的列。使用星號(hào)(*)可以選擇所有列。FROM:指定要查詢(xún)數(shù)據(jù)的表名。WHERE:(可選)指定選擇條件。如果省略,將返回表中的所有行。ORDERBY:(可選)指定結(jié)果的排序方式??梢园匆粋€(gè)或多個(gè)列進(jìn)行排序,并指定排序的方向:升序(ASC)或降序(DESC)。下面的例4-15顯示了如何從前面創(chuàng)建的表中獲取并顯示記錄。4.2.4讀取數(shù)據(jù)4.2Python讀寫(xiě)SQLite數(shù)據(jù)庫(kù)行號(hào)代碼行1importsqlite32conn=sqlite3.connect('test.db')3c=conn.cursor()4print("數(shù)據(jù)庫(kù)打開(kāi)成功")5cursor=c.execute("SELECTid,name,address,salaryfromCOMPANY")6forrowincursor:7print("ID=",row[0])8print("NAME=",row[1])9print("ADDRESS=",row[2])10print("SALARY=",row[3])11print("\n")12print("數(shù)據(jù)操作成功")13conn.close()在SQLite中修改表中的數(shù)據(jù),主要是通過(guò)使用UPDATE語(yǔ)句來(lái)完成的。UPDATE語(yǔ)句可以讓你更改表中一行或多行的一個(gè)或多個(gè)列的值。使用UPDATE語(yǔ)句修改表格記錄語(yǔ)法如下所示:4.2.5數(shù)據(jù)修改4.2Python讀寫(xiě)SQLite數(shù)據(jù)庫(kù)行號(hào)代碼行1UPDATEtable_name2SETcolumn1=value1,column2=value2,...3WHEREcondition;table_name是要更新數(shù)據(jù)的表名SET關(guān)鍵字后跟著列名和新值。你可以一次更新多個(gè)列WHERE子句是可選的,用于指定哪些記錄需要被更新。如果省略WHERE子句,表中的所有記錄都將被更新。例如:使用UPDATE語(yǔ)句將員工Paul的工資修改為25000,代碼例4-16所示。4.2.5數(shù)據(jù)修改4.2Python讀寫(xiě)SQLite數(shù)據(jù)庫(kù)行號(hào)代碼行1importsqlite32conn=sqlite3.connect('test.db')3c=conn.cursor()4print("數(shù)據(jù)庫(kù)打開(kāi)成功")5#將員工Paul的工資修改為250006c.execute("UPDATECOMPANYsetSALARY=25000.00whereNAME='Paul';")7mit()8print("數(shù)據(jù)操作成功")9conn.close()通過(guò)pandas讀取數(shù)據(jù)庫(kù)文件,代碼如下。4.2.5數(shù)據(jù)修改4.2Python讀寫(xiě)SQLite數(shù)據(jù)庫(kù)行號(hào)代碼行1importsqlite32importpandasaspd3#Createyourconnection.4cnx=sqlite3.connect('test.db')5df=pd.read_sql_query("SELECT*FROMCOMPANY",cnx)6dfSQLite的DELETE語(yǔ)句用于從數(shù)據(jù)庫(kù)表中刪除行。這個(gè)操作可以使用帶有WHERE子句的DELETE來(lái)刪除選定行,否則所有的記錄都會(huì)被刪除。使用時(shí)要小心,因?yàn)橐坏﹫?zhí)行了DELETE操作,被刪除的數(shù)據(jù)就不能恢復(fù)了?;镜腄ELETE語(yǔ)法如下:4.2.6數(shù)據(jù)刪除4.2Python讀寫(xiě)SQLite數(shù)據(jù)庫(kù)行號(hào)代碼行1DELETEFROMtable_name2WHERE[condition];table_name是想要?jiǎng)h除數(shù)據(jù)的表名condition指定哪些行將被刪除的條件。如果省略該條件,表中的所有行都將被刪除?,F(xiàn)將上面創(chuàng)建的COMPANY表使用DELETE語(yǔ)句刪除名字為Paul的記錄,然后獲取并顯示剩余的記錄,代碼例4-18所示。4.2.6數(shù)據(jù)刪除4.2Python讀寫(xiě)SQLite數(shù)據(jù)庫(kù)行號(hào)代碼行1importsqlite32conn=sqlite3.connect('test.db')3c=conn.cursor()4print("數(shù)據(jù)庫(kù)打開(kāi)成功")5#刪除名字為Paul這條記錄6c.execute("DELETEfromCOMPANYwhereNAME='Paul';")7mit()8#查詢(xún)刪除信息后表中的數(shù)據(jù)9cursor=conn.execute("SELECTid,name,address,salaryfromCOMPANY")10forrowincursor:11print("ID=",row[0])12print("NAME=",row[1])13print("ADDRESS=",row[2])14print("SALARY=",row[3])15print("\n")16print("數(shù)據(jù)操作成功")17conn.close()通過(guò)pandas讀取數(shù)據(jù)庫(kù)文件,代碼如下:4.2.6數(shù)據(jù)刪除4.2Python讀寫(xiě)SQLite數(shù)據(jù)庫(kù)行號(hào)代碼行1importsqlite32importpandasaspd3#Createyourconnection.4cnx=sqlite3.connect('test.db')5df=pd.read_sql_query("SELECT*FROMCOMPANY",cnx)6df4.3網(wǎng)頁(yè)數(shù)據(jù)采集4.3.1網(wǎng)絡(luò)爬蟲(chóng)4.3網(wǎng)頁(yè)數(shù)據(jù)采集

網(wǎng)絡(luò)爬蟲(chóng)也稱(chēng)作網(wǎng)絡(luò)蜘蛛(Spider)、網(wǎng)頁(yè)機(jī)器人,是一種按照一定的規(guī)則從網(wǎng)頁(yè)中提取信息的程序或腳本。網(wǎng)絡(luò)爬蟲(chóng)廣泛應(yīng)用于搜索引擎、數(shù)據(jù)分析、在線價(jià)格監(jiān)測(cè)、網(wǎng)站數(shù)據(jù)備份等領(lǐng)域。4.3.1網(wǎng)絡(luò)爬蟲(chóng)4.3網(wǎng)頁(yè)數(shù)據(jù)采集網(wǎng)絡(luò)爬蟲(chóng)的分類(lèi)1通用網(wǎng)絡(luò)爬蟲(chóng)聚焦網(wǎng)絡(luò)爬蟲(chóng)增量式網(wǎng)絡(luò)爬蟲(chóng)深層網(wǎng)絡(luò)爬蟲(chóng)4.3.1網(wǎng)絡(luò)爬蟲(chóng)4.3網(wǎng)頁(yè)數(shù)據(jù)采集網(wǎng)絡(luò)爬蟲(chóng)的一般工作流程2確定目標(biāo)頁(yè)面抓取數(shù)據(jù)提取數(shù)據(jù)存儲(chǔ)4.3.1網(wǎng)絡(luò)爬蟲(chóng)4.3網(wǎng)頁(yè)數(shù)據(jù)采集網(wǎng)絡(luò)爬蟲(chóng)的規(guī)范31.合法性2.道德性3.透明性4.安全性5.隱私保護(hù)6.版權(quán)意識(shí)4.3.1網(wǎng)絡(luò)爬蟲(chóng)4.3網(wǎng)頁(yè)數(shù)據(jù)采集URL4URL即統(tǒng)一資源定位符,是互聯(lián)網(wǎng)上的資源地址,用于標(biāo)識(shí)和定位這些資源,無(wú)論是網(wǎng)頁(yè)、圖片還是視頻等。簡(jiǎn)單來(lái)說(shuō),就是我們?cè)跒g覽器地址欄中輸入的那一串字符,它就像是互聯(lián)網(wǎng)上的“門(mén)牌號(hào)”或“地址”。通過(guò)這個(gè)地址,我們可以找到并訪問(wèn)互聯(lián)網(wǎng)上的各種資源。4.3.2Web前端基礎(chǔ)4.3網(wǎng)頁(yè)數(shù)據(jù)采集4.3.2Web前端基礎(chǔ)4.3網(wǎng)頁(yè)數(shù)據(jù)采集HTML1HTML即超文本標(biāo)記語(yǔ)言,是用于創(chuàng)建網(wǎng)頁(yè)的標(biāo)準(zhǔn)標(biāo)記語(yǔ)言。它的設(shè)計(jì)目的是讓文檔具有結(jié)構(gòu)化標(biāo)記和文本鏈接,使其具有跨平臺(tái)的可交互性和可讀性。4.3.2Web前端基礎(chǔ)4.3網(wǎng)頁(yè)數(shù)據(jù)采集用作行索引的列編號(hào)或列名,如果給定,將使用這一列作為返回的DataFrame的行索引HTML1HTML文檔由元素構(gòu)成,這些元素基于它們的標(biāo)簽類(lèi)型,對(duì)內(nèi)容進(jìn)行了不同的描述和組織。常用HTML標(biāo)簽如下表所示:標(biāo)簽含義<!DOCTYPEhtml>聲明為HTML5文檔<html>根元素,包裹整個(gè)HTML文檔<body>包含所有顯示在瀏覽器中的內(nèi)容,如文本、圖片、鏈接等<head>包含文檔的元數(shù)據(jù)<h1>、<h2>、<h3>…標(biāo)題,<h1>是最高級(jí)標(biāo)題<p>段落標(biāo)簽<ahref="...">鏈接標(biāo)簽<ul>、<ol>、<li>列表標(biāo)簽,<ul>用于創(chuàng)建無(wú)序列表,<ol>用于創(chuàng)建有序列表,<li>表示列表項(xiàng)<table>表格<imgsrc="..."alt="...">圖像標(biāo)簽,用于嵌入圖片4.3.2Web前端基礎(chǔ)4.3網(wǎng)頁(yè)數(shù)據(jù)采集用作行索引的列編號(hào)或列名,如果給定,將使用這一列作為返回的DataFrame的行索引下面是一個(gè)基礎(chǔ)的HTML網(wǎng)頁(yè)結(jié)構(gòu),代碼例4-20所示。在文本中將下列HTML文檔寫(xiě)入并保存,文件命名:我的簡(jiǎn)單網(wǎng)頁(yè).html。打開(kāi)文件結(jié)果如下所示。行號(hào)代碼行1<!DOCTYPEhtml>2<html>3<head>4<title>我的簡(jiǎn)單網(wǎng)頁(yè)</title>5</head>6<body>7<h1>歡迎來(lái)到我的網(wǎng)頁(yè)</h1>8<p>這是一個(gè)HTML示例。</p>9<ahref="">點(diǎn)擊這里訪問(wèn)</a>10<br>11<h2>我的興趣愛(ài)好</h2>12<ul>13<li>閱讀</li>14<li>編程</li>15<li>旅行</li>16</ul>17</body>18</html>4.3.2Web前端基礎(chǔ)4.3網(wǎng)頁(yè)數(shù)據(jù)采集用作行索引的列編號(hào)或列名,如果給定,將使用這一列作為返回的DataFrame的行索引CSS2CSS(層疊樣式表,CascadingStyleSheets)是一種用于描述HTML或XML文檔的外觀和格式的樣式表語(yǔ)言。4.3.2Web前端基礎(chǔ)4.3網(wǎng)頁(yè)數(shù)據(jù)采集CSS21.引入CSS(1)內(nèi)聯(lián)樣式CSS代碼直接寫(xiě)在現(xiàn)有的HTML標(biāo)記中,直接使用style屬性改變樣式?,F(xiàn)將<p>標(biāo)簽中的文本“這是一段紅色文字?!痹O(shè)置為紅色,如下所示。行號(hào)代碼行1<pstyle="color:red;">這是一段紅色文字。</p>4.3.2Web前端基礎(chǔ)4.3網(wǎng)頁(yè)數(shù)據(jù)采集用作行索引的列編號(hào)或列名,如果給定,將使用這一列作為返回的DataFrame的行索引CSS21.引入CSS(2)內(nèi)部樣式表在HTML的<head>標(biāo)簽內(nèi)使用<style>標(biāo)簽定義樣式,適用于單個(gè)文檔的樣式定義?,F(xiàn)將整個(gè)<body>元素的背景顏色設(shè)置為淡藍(lán)色(lightblue),如下所示。行號(hào)代碼行1<style>2body{3background-color:lightblue;4}5</style>4.3.2Web前端基礎(chǔ)4.3網(wǎng)頁(yè)數(shù)據(jù)采集CSS21.引入CSS(3)外部樣式表將CSS寫(xiě)在外部文件中,然后通過(guò)HTML的<link>標(biāo)簽引入。這是最常用且推薦的方式,因?yàn)樗梢栽诙鄠€(gè)頁(yè)面間共享CSS。<link>是一個(gè)HTML元素,專(zhuān)門(mén)用于在HTML文檔中鏈接到外部的CSS樣式表文件。行號(hào)代碼行1<linkrel="stylesheet"href="styles.css">4.3.2Web前端基礎(chǔ)4.3網(wǎng)頁(yè)數(shù)據(jù)采集CSS22.CSS語(yǔ)法CSS規(guī)則集包含了一個(gè)選擇器和一個(gè)聲明塊。選擇器指向HTML文檔中要樣式化的元素。聲明塊包含一個(gè)或多個(gè)聲明,每個(gè)聲明由一個(gè)屬性和一個(gè)值組成,用冒號(hào)分隔,整個(gè)聲明塊用大括號(hào)包裹,語(yǔ)法結(jié)構(gòu)如下所示。行號(hào)代碼行1selector{2property:value;3}4.3.2Web前端基礎(chǔ)4.3網(wǎng)頁(yè)數(shù)據(jù)采集CSS23.選擇器選擇器(CSSSelectors)是CSS中用于選擇并樣式化HTML元素的部分。CSS選擇器有12多種類(lèi)型,每種都有其特定的用途和語(yǔ)法。下面列舉一些常見(jiàn)的CSS選擇器類(lèi)型:4.3.2Web前端基礎(chǔ)4.3網(wǎng)頁(yè)數(shù)據(jù)采集CSS23.選擇器(1)元素選擇器

它基于HTML元素的名稱(chēng)來(lái)選擇元素,如p、div。例如,選擇頁(yè)面上的所有<p>元素,并將它們的文本顏色設(shè)置為藍(lán)色,如下所示。1代碼行1p{2color:blue;3}4.3.2Web前端基礎(chǔ)4.3網(wǎng)頁(yè)數(shù)據(jù)采集CSS23.選擇器(2)ID選擇器

它使用HTML元素的id屬性來(lái)選擇單個(gè)元素,以#開(kāi)頭,后跟ID名。例如,#myID選擇id屬性為“myID”的元素,如下所示。行號(hào)代碼行1#myID{2font-size:20px;3}4.3.2Web前端基礎(chǔ)4.3網(wǎng)頁(yè)數(shù)據(jù)采集CSS23.選擇器(3)類(lèi)選擇器

它使用HTML元素的class屬性來(lái)選擇元素。類(lèi)選擇器以點(diǎn)(.)開(kāi)頭。例如,.myClass選擇所有class屬性為“myClass”的元素,如下所示。行號(hào)代碼行1.myClass{2background-color:yellow;3}4.3.2Web前端基礎(chǔ)4.3網(wǎng)頁(yè)數(shù)據(jù)采集CSS23.選擇器(4)屬性選擇器

它選擇具有指定屬性和值的HTML元素。例如,[type="text"]選擇所有type屬性為“text”的輸入元素,如下所示。行號(hào)代碼行1[type="text"]{2border:1pxsolidblack;3}4.3.2Web前端基礎(chǔ)4.3網(wǎng)頁(yè)數(shù)據(jù)采集CSS24.CSS屬性4.3.2Web前端基礎(chǔ)4.3網(wǎng)頁(yè)數(shù)據(jù)采集CSS2接下來(lái)我們將上面創(chuàng)建的:我的簡(jiǎn)單網(wǎng)頁(yè).html使用CSS進(jìn)行修飾和美化,代碼例4-21所示。4.3.2Web前端基礎(chǔ)4.3網(wǎng)頁(yè)數(shù)據(jù)采集XPath(XMLPathLanguage)是一種在XML文檔中查找信息的語(yǔ)言。網(wǎng)絡(luò)爬蟲(chóng)中,經(jīng)常使用XPath來(lái)提取網(wǎng)頁(yè)中的信息。XPath通過(guò)路徑表達(dá)式來(lái)選擇節(jié)點(diǎn),這些表達(dá)式可以從文檔的根節(jié)點(diǎn)開(kāi)始,也可以從任意節(jié)點(diǎn)開(kāi)始。4.3.2Web前端基礎(chǔ)4.3網(wǎng)頁(yè)數(shù)據(jù)采集XPath3XPath節(jié)點(diǎn)(1)元素(2)屬性(3)文本(4)命名空間(5)處理指令(6)注釋?zhuān)?)文檔(根)節(jié)點(diǎn),樹(shù)的根被稱(chēng)為文檔節(jié)點(diǎn)或者根節(jié)點(diǎn)。4.3.2Web前端基礎(chǔ)4.3網(wǎng)頁(yè)數(shù)據(jù)采集XPath節(jié)點(diǎn)行號(hào)代碼行1<?xmlversion="1.0"encoding="ISO-8859-1"?>2<CATALOG>3<PLANT>4<COMMON>Bloodroot</COMMON>5<BOTANICALlang="en">Sanguinariacanadensis</BOTANICAL>6<ZONE>4</ZONE>7<LIGHT>MostlyShady</LIGHT>8<PRICE>$2.44</PRICE>9<AVAILABILITY>031599</AVAILABILITY>10</PLANT>11</CATALOG>父節(jié)點(diǎn):PLANT元素子節(jié)點(diǎn):COMMON、BOTANICAL、ZONE、LIGHT、PRICE、AVAILABILITY元素父的父節(jié)點(diǎn):CATALOG元素4.3.2Web前端基礎(chǔ)4.3網(wǎng)頁(yè)數(shù)據(jù)采集XPath語(yǔ)法XPath使用路徑表達(dá)式來(lái)選取XML文檔中的節(jié)點(diǎn)或節(jié)點(diǎn)集。表4-5節(jié)點(diǎn)選取常用的路徑表達(dá)式路徑表達(dá)式效果CATALOG選取CATALOG元素的所有子節(jié)點(diǎn)/CATALOG選取根元素CATALOGCATALOG/PLANT選取屬于CATALOG的子元素的所有PLANT元素//PLANT選取所有PLANT子元素,而不管他們?cè)谖臋n中的位置CATALOG//PLANT選擇屬于CATALOG元素的后代的所有PLANT元素,而不管他們位于CATALOG之下的什么位置//@lang選取名為lang的所有屬性4.3.3Requests庫(kù)4.3網(wǎng)頁(yè)數(shù)據(jù)采集Requests庫(kù)是一個(gè)基于Python語(yǔ)言編寫(xiě)的,用于發(fā)送HTTP請(qǐng)求的第三方庫(kù)。Requests庫(kù)支持非常豐富的鏈接訪問(wèn)功能。4.3.3Requests庫(kù)4.3網(wǎng)頁(yè)數(shù)據(jù)采集Requests模塊可以支持HTTP協(xié)議中的全部請(qǐng)求方式,HTTP常用請(qǐng)求方式有GET、POST、PUT、DELETE、HEAD、OPTION,其中以GET請(qǐng)求最為常用,函數(shù)如下所示:4.3.3Requests庫(kù)4.3網(wǎng)頁(yè)數(shù)據(jù)采集下面編寫(xiě)一個(gè)簡(jiǎn)單的Python腳本來(lái)發(fā)送一個(gè)GET請(qǐng)求到百度的首頁(yè),并打印出獲取到的HTML內(nèi)容,代碼例4-24所示。行號(hào)代碼行1importrequests2#百度首頁(yè)的URL3url=''4#發(fā)送GET請(qǐng)求5response=requests.get(url)6#檢查請(qǐng)求是否成功7ifresponse.status_code==200:8#打印網(wǎng)頁(yè)的HTML內(nèi)容,以字符串形式輸出,以前500個(gè)字符作為示例9print(response.text[:500])10else:11print(f"Error:Unabletofetchwebpage,statuscode{response.status_code}")4.3.4BeautifulSoup模塊4.3網(wǎng)頁(yè)數(shù)據(jù)采集安裝BeautifulSoup1BeautifulSoup模塊是第三方模塊(BeautifulSoup4是最新版本),需要額外進(jìn)行安裝,一般有兩種安裝方式:1.使用pip進(jìn)行安裝,安裝命令為:pipinstallbeautifulsoup42.可以通過(guò)下載源碼的方式進(jìn)行安裝,下載鏈接是:/pypi/beautifulsoup4/。運(yùn)行下面命令即可完成安裝:pythonsetupinstall。4.3.4BeautifulSoup模塊4.3網(wǎng)頁(yè)數(shù)據(jù)采集創(chuàng)建BeautifulSoup對(duì)象2

首先導(dǎo)入BeautifulSoup模塊,并指定一個(gè)解析器。然后,你可以使用BeautifulSoup類(lèi)來(lái)解析HTML或XML文檔。常用的函數(shù)為:BeautifulSoup(html,’lxml’)BeautifulSoup(html,’html.parser’)html代表要解析的網(wǎng)頁(yè)源代碼html.parser、lxml分別代表不同的解析器以百度網(wǎng)頁(yè)HTML源代碼示例,進(jìn)行創(chuàng)建BeautifulSoup對(duì)象的基本解析操作,使用的代碼及運(yùn)行結(jié)果如例4-26所示。4.3.4BeautifulSoup模塊4.3網(wǎng)頁(yè)數(shù)據(jù)采集BeautifulSoup對(duì)象種類(lèi)3TagNavigableStringBeautifulSoupComment4.3.4BeautifulSoup模塊4.3網(wǎng)頁(yè)數(shù)據(jù)采集BeautifulSoup對(duì)象種類(lèi)3以例4-26中百度網(wǎng)頁(yè)HTML源代碼示例,使用它們來(lái)獲取標(biāo)簽的名稱(chēng)、屬性、內(nèi)容等信息,代碼及運(yùn)行結(jié)果如例4-27所示。運(yùn)行結(jié)果<ahref="">百度新聞</a>None<title>百度一下,你就知道</title>{'href':''}百度新聞4.3.4BeautifulSoup模塊4.3網(wǎng)頁(yè)數(shù)據(jù)采集搜索文檔樹(shù)4(1)訪問(wèn)元素的內(nèi)容和屬性

創(chuàng)建BeautifulSoup對(duì)象后,如何輕松提取我們需要的信息,BeautifulSoup定義了很多搜索方法,find_all()和find()是最常用的兩個(gè):find_all(name,attrs,recursive,string,limit,**kwargs)find(name,attrs,recursive,string,**kwargs)4.3.4BeautifulSoup模塊4.3網(wǎng)頁(yè)數(shù)據(jù)采集搜索文檔樹(shù)4(2)其他搜索函數(shù)函數(shù)功能find_parents()find_parent()find_parents和find_parent函數(shù)用來(lái)搜索當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn)。兩者的區(qū)別是:find_parents返回所有符合條件的父節(jié)點(diǎn):find_parent只返回匹配的第一個(gè)。find_next_siblings

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論