版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
Loremipsumdolorsitamet,consectetueradipiscingelit.Aeneancommodoligulaegetdolor.Cumsociisnatoquepenatibusetmagnisdisparturientmontes,nasceturridiculusmus.少兒編程課爬取高校排名本節(jié)課我們來編寫一個(gè)爬蟲案例,將高校信息爬取下來,并存入Excel表課程案例現(xiàn)在我們開始編寫代碼,首先使用Requests庫獲得頁面信息1導(dǎo)入requests庫,將要爬取的網(wǎng)站賦值給變量2編寫獲取整個(gè)網(wǎng)頁數(shù)據(jù)的函數(shù)importrequests
#要爬取的目標(biāo)網(wǎng)站
start_url='https://tool.lu/school/index.html'defget_text(url):
response=requests.get(url)
returnresponse.text獲得網(wǎng)頁信息數(shù)據(jù)后,查看網(wǎng)頁源代碼,確定我們所需數(shù)據(jù)的位置1在網(wǎng)頁中單擊右鍵,然后點(diǎn)擊查看網(wǎng)頁源代碼2通過查看分析,發(fā)現(xiàn)需要的數(shù)據(jù)被兩個(gè)相同的標(biāo)簽包裹在其中確定了所需信息的位置之后,我們使用字符串相關(guān)知識(shí)來獲取目標(biāo)信息1通過源代碼中的標(biāo)簽將整個(gè)頁面數(shù)據(jù)拆分2繼續(xù)查看源代碼,發(fā)現(xiàn)每個(gè)高校信息被<tr>標(biāo)簽分割#使用字符串截取知識(shí)點(diǎn)獲取所有高校數(shù)據(jù)
defget_item_by_str(text):
item_list=[]
#將整頁數(shù)據(jù)拆為列表
list_1=text.split('<tablewidth="100%"cellspacing="0"cellpadding="0"class="tbl">')#將list_1的后半部分通過<tr>在拆一次
list_2=list_1[1].split('<tr>')3通過索引獲得包含高校數(shù)據(jù)的部分,并通過<tr>標(biāo)簽在拆分一次1輸出list_2,觀察得到的數(shù)據(jù)2以下是一部分?jǐn)?shù)據(jù)去除臟數(shù)據(jù)#使用字符串截取知識(shí)點(diǎn)獲取所有高校數(shù)據(jù)
defget_item_by_str(text):
……
print(list_2)content=get_text(start_url)
get_item_by_str(content)列表第一項(xiàng)為空數(shù)據(jù),之后的每一項(xiàng)都包含了高校的信息,但是有很多我們不需要的臟數(shù)據(jù)1通過切片,去除list_2列表中的第一項(xiàng)2替換每一項(xiàng)中的臟數(shù)據(jù),只保留<td>現(xiàn)在,我們?nèi)コ斜碇械呐K數(shù)據(jù)3輸出替換過后的數(shù)據(jù)4通過<td>標(biāo)簽再次將每一條數(shù)據(jù)進(jìn)行拆分foriinlist_2:
#去除臟數(shù)據(jù)
fortagin['\n','','</td>','<spanstyle="color:#009A61;">','</span>','</tr>','<tr>',
'<thwidth="40%">','<thwidth="20%">','</th>','<spanstyle="color:#E74C3C;">',
'</table>','<p>注:<p>','<spanstyle="color:#009A61;">','<spanstyle="color:#E74C3C;">']:
i=i.replace(tag,'')list_2=list_1[1].split('<tr>')[1:]print(i)little_item=i.split('<td>')第一條數(shù)據(jù)是我們不需要的,我們暫時(shí)先不管它1輸出little_item,結(jié)果如下:2通過切片去除空數(shù)據(jù)接著觀察處理后的數(shù)據(jù),對數(shù)據(jù)進(jìn)行進(jìn)一步處理3將處理之后的小列表添加到之前創(chuàng)建的空列表中4將完整的高校信息表作為返回值返回,同時(shí)去除第一條我們不需要的數(shù)據(jù)可以看到,第一個(gè)列表是我們不需要的數(shù)據(jù),剩下的每一個(gè)高校信息列表中的第一項(xiàng)數(shù)據(jù)都為空數(shù)據(jù)little_item=i.split('<td>')[1:]#將每個(gè)小列表添加到item_list中
item_list.append(little_item)returnitem_list[1:]正則表達(dá)式正則表達(dá)式也能夠索引數(shù)據(jù)以下是正則表達(dá)式中常用的一些規(guī)則:語法說明語法說明.匹配除換行符以外的所有字符*匹配前一個(gè)字符0次或多次\轉(zhuǎn)義字符,例如想要匹配.,使用\.+匹配前一個(gè)字符1次或多次[…]字符集?匹配前一個(gè)字符0次或一次\d數(shù)字,也可寫作[0-9]{m}匹配前一個(gè)字符m次\D非數(shù)字,[^\d]{m,n}匹配前一個(gè)字符m到n次\s空白字符^字符串以什么開頭\S非空白字符[^\s]$字符串以什么結(jié)尾\w單詞[A-Za-z0-9_]|左右表達(dá)式任意匹配一個(gè)\W非單詞字符(…)被括起來的表達(dá)式作為一個(gè)整體1對于本測試用例,手機(jī)號(hào)的匹配規(guī)則:接下來我們使用一個(gè)例子來看一下正則表達(dá)式的使用2郵箱的匹配規(guī)則測試用例test_str='''
小王手機(jī)號(hào)碼箱:12356484557@密碼:qwer123
小李手機(jī)號(hào)碼箱:dada_qqq@密碼:QQppp121
小劉手機(jī)號(hào)碼箱:abc666@163.com密碼:1545454
小吳手機(jī)號(hào)碼箱:545131ads@密碼:123645
小鄭手機(jī)號(hào)碼箱:assdasdfa@密碼:mingtian
小趙手機(jī)號(hào)碼箱:1231eq143123@密碼:nihao
小孫手機(jī)號(hào)碼箱:1121112wqeq@密碼:12qw12qw
小鄭手機(jī)號(hào)碼箱:dadad_dadad@密碼:qeqerqtad
小張手機(jī)號(hào)碼箱:1234@126.com密碼:qQDA12wQEQ3
小馮手機(jī)號(hào)碼箱:qwe@密碼:WEQDAQ12121
''''(1[0-9]\d{9})'([0-9a-zA-Z_]{0,19}@[0-9a-zA-Z]{1,13}\.[a-zA-Z]+)1新建python文件,導(dǎo)入re庫并,將測試用例復(fù)制進(jìn)去接下來我們使用一個(gè)例子來看一下正則表達(dá)式的使用2將手機(jī)號(hào)碼查找出來phone_rule=pile('(1[0-9]\d{9})')
result=phone_rule.findall(test_str)
print(result)3將郵箱查找出來mail_rule=pile('([0-9a-zA-Z_]{0,19}@[0-9a-zA-Z]{1,13}\.[a-zA-Z]+)')
result=phone_rule.findall(test_str)
print(result)直接使用字符串表示的正則表達(dá)式進(jìn)行findall操作時(shí),Python會(huì)將字符串轉(zhuǎn)為正則表達(dá)式對象所以我們先使用compile完成一次轉(zhuǎn)換,之后使用就不用重復(fù)轉(zhuǎn)換了練習(xí)Exercises密封線內(nèi)不準(zhǔn)答題編寫正則,使用re庫將密碼查找出來1導(dǎo)入Python正則庫re2定義函數(shù),首先去除整個(gè)網(wǎng)頁數(shù)據(jù)中的換行和空格接下來,我們回到高校案例,使用Python中的正則庫取出高校數(shù)據(jù)3通過正則提取數(shù)據(jù),縮小范圍4再次編寫正則,將高校數(shù)據(jù)取出,并作為返回值返回importre#使用正則表達(dá)式獲取所有高校數(shù)據(jù)
defget_item_by_re(text):
#去除空格
html=text.replace('\n','').replace('','')#縮小范圍
rule_1=pile(r'雙一流</th></tr><tr>(.*)</table><p>注')
table=rule_1.findall(html)#正則取出數(shù)據(jù)
rule_2=pile('td>(.*?)</td><td><spanstyle="color:#[A-Za-z0-9]+;">(.*?)</span></td><td>'
'<spanstyle="color:#[A-Za-z0-9]+;">(.*?)</span></td><td>(.*?)</td></tr>')
returnrule_2.findall(table[0])BeautifulSoup除了使用上面兩種方式獲取數(shù)據(jù),還有更加方便的方式:借助BeautifulSoup庫的幫忙BeautifulSoup是一個(gè)可以從HTML或XML文件中提取數(shù)據(jù)的Python庫1首先來安裝,打開CMD,使用pip安裝2按下回車鍵,就能夠自動(dòng)下載安裝安裝完成之后,我們通過一個(gè)小案例來學(xué)習(xí)一下它的簡單用法BeautifulSoup庫的簡單使用:<!DOCTYPEhtml>
<htmllang="en">
<head>
<metacharset="UTF-8">
<title>BeautifulSoup使用范例</title>
</head>
<body>
<h1>我是H1標(biāo)簽</h1>
<pclass='第一個(gè)P'>我是第一個(gè)p標(biāo)簽</p>
<p>我是第二個(gè)p標(biāo)簽</p>
<a>我是第一個(gè)a標(biāo)簽</a>
<aid='a2'>我是第一個(gè)a標(biāo)簽</a>
<a>我是第一個(gè)a標(biāo)簽</a>
<a>我是第一個(gè)a標(biāo)簽</a>
</body>
</html>一個(gè)簡單的HTML范例如下:frombs4importBeautifulSoup
html='''...'''
bs=BeautifulSoup(html,'lxml')
#簡單的獲取數(shù)據(jù)的方法:
print('文檔的title:',bs.title)
print('title的name屬性:',)
print('title的內(nèi)容:',bs.title.string)
print('title的parent名稱,也就是上一級(jí)名稱:',)
print('文檔中第一個(gè)p節(jié)點(diǎn):',bs.p)#獲取
print('文檔中第一個(gè)p節(jié)點(diǎn)的內(nèi)容:',bs.p.get_text())#獲取
print('第一個(gè)p節(jié)點(diǎn)的class內(nèi)容:',bs.p['class'])#獲取
print('文檔的第一個(gè)a節(jié)點(diǎn):',bs.a)#獲取
print('文檔中所有的a節(jié)點(diǎn),返回一個(gè)list:',bs.find_all('a'))
print('文檔中id屬性為a2的節(jié)點(diǎn):',bs.find(id='a2'))1使用BeautifulSoup獲取數(shù)據(jù)212導(dǎo)入相關(guān)庫接下來,我們就使用BeautifulSoup獲取高校數(shù)據(jù)43#使用BeautifulSoup獲取所有高校數(shù)據(jù)
defget_item_by_bs(text):
#創(chuàng)建BeautifulSoup實(shí)例
bs=BeautifulSoup(text,‘lxml')frombs4importBeautifulSoup#查找所有標(biāo)簽為tr的內(nèi)容
tag_tr=bs.find_all('tr')#獲取所有高校數(shù)據(jù)并轉(zhuǎn)為數(shù)據(jù)表
return[[i.get_text().strip()foriintr.find_all('td')]fortrintag_tr][1:-5]返回高校數(shù)據(jù)表獲得tr標(biāo)簽中的內(nèi)容定義函數(shù),創(chuàng)建BeautifulSoup實(shí)例將數(shù)據(jù)存入Excel表1先來安裝,cmd中輸入pipinstallxlwt2安裝完成后,將其導(dǎo)入接下來,我們將得到的高校信息存入Excel表,Python操作Excel可以使用xlwt庫4設(shè)置第二列和第五列的單元格長度3觀察最終效果,第二列和第五列的單元格長度較長importxlwt#設(shè)置單元格寬度
defset_width(sheet):
#設(shè)置第二列寬度
col_2=sheet.col(1)
col_2.width=256*20
#設(shè)置第五列寬度
col_5=sheet.col(4)
col_5.width=256*15256*N,就表示有N個(gè)字符長度。1定義設(shè)置樣式的函數(shù),創(chuàng)建兩個(gè)樣式實(shí)例2設(shè)置表格邊框?yàn)閷?shí)線然后,設(shè)置表格樣式4設(shè)置全部字體樣式3使文字居中顯示#設(shè)置Excel樣式
defset_sheet_style():
#創(chuàng)建第一行樣式和全部樣式實(shí)例
all_style=xlwt.XFStyle()
first_row_style=xlwt.XFStyle()由于第一行的樣式和剩余樣式不同,所以這里我們創(chuàng)建兩個(gè)樣式實(shí)例#設(shè)置邊框線
border=xlwt.Borders()
border.top=xlwt.Borders.THIN
border.bottom=xlwt.Borders.THIN
border.left=xlwt.Borders.THIN
border.right=xlwt.Borders.THIN#使文字居中
alignment=xlwt.Alignment()
alignment.horz=xlwt.Alignment.HORZ_CENTER#水平居中
alignment.vert=xlwt.Alignment.VERT_CENTER#垂直居中#設(shè)置字體為微軟雅黑
all_font=xlwt.Font()
all_='微軟雅黑'5設(shè)置第一行字體樣式#第一行設(shè)置為微軟雅黑并字體加粗,字體大小為11
first_row_font=xlwt.Font()
first_row_='微軟雅黑'
first_row_font.bold=True
first_row_font.height=20*111將修改好的相應(yīng)樣式綁定到全部樣式實(shí)例2將修改好的相應(yīng)樣式綁定到第一行樣式實(shí)例然后,設(shè)置表格樣式3將樣式返回#將修改好的樣式添加到全部樣式實(shí)例中
all_style.font=all_font
all_style.alignment=alignment
all_style.borders=border#將修改好的樣式添加到第一行樣式實(shí)例中first_row_style.font=first_row_font
first_row_style.alignment=alignment
first_row_style.borders=border#將樣式返回
returnall_style,first_row_style1定義函數(shù),參數(shù)為表格內(nèi)創(chuàng)建的單元,高校數(shù)據(jù)表和表格樣式2從第二行開始,向表格中寫入編號(hào)表格樣式相關(guān)工作已經(jīng)完成,下面我們編寫寫入數(shù)據(jù)的函數(shù)3向表格寫入數(shù)據(jù)#將數(shù)據(jù)寫入表格
defwrite_item_in_sheet(sheet,item_list,style):#獲得行號(hào)列號(hào)
forrowinrange(len(item_list)):
#生成表格編號(hào)
sheet.write(row+1,0,row+1,style)向表格寫入數(shù)據(jù),使用sheet.write()方法四個(gè)參數(shù)依次為:將內(nèi)容寫到第幾行、寫到第幾列、寫如的內(nèi)容、樣式由于是從第二行開始,所以是row+1forcolinrange(len(item_list[row])):
#將高校信息數(shù)據(jù)寫入到excel表格中
sheet.write(row+1,col+1,ite
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 家私廠職業(yè)衛(wèi)生制度
- 棄土場環(huán)境衛(wèi)生制度
- 衛(wèi)生院轉(zhuǎn)診服務(wù)制度
- 客運(yùn)站公廁衛(wèi)生管理制度
- 衛(wèi)生許可證所需管理制度
- 美容業(yè)每日衛(wèi)生管理制度
- 衛(wèi)生殺蟲藥規(guī)范制度
- 衛(wèi)生院宣傳三項(xiàng)制度
- 修理廠個(gè)人衛(wèi)生規(guī)章制度
- 衛(wèi)生院藥品財(cái)務(wù)管理制度
- 醫(yī)保智能審核系統(tǒng)的構(gòu)建與實(shí)踐
- 2025年司法考試真題試卷+參考答案
- DB61∕T 1434-2021 崩塌、滑坡、泥石流專業(yè)監(jiān)測規(guī)范
- 2025年《治安管理處罰法》知識(shí)考試題及答案
- 電力設(shè)計(jì)部門管理制度
- 飲片物料管理培訓(xùn)
- 2025年及未來5年中國正辛硫醇行業(yè)市場全景監(jiān)測及投資戰(zhàn)略咨詢報(bào)告
- DB4403-T 377-2023 民宿消防安全管理規(guī)范
- 危險(xiǎn)化學(xué)品運(yùn)輸安全手冊
- GB/T 46146-2025家具五金件鉸鏈及其部件的強(qiáng)度和耐久性繞垂直軸轉(zhuǎn)動(dòng)的鉸鏈
- 粵教花城版音樂 鋼琴獨(dú)奏《雪橇》聽評課記錄
評論
0/150
提交評論