




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
Loremipsumdolorsitamet,consectetueradipiscingelit.Aeneancommodoligulaegetdolor.Cumsociisnatoquepenatibusetmagnisdisparturientmontes,nasceturridiculusmus.少兒編程課爬取高校排名本節(jié)課我們來編寫一個爬蟲案例,將高校信息爬取下來,并存入Excel表課程案例現(xiàn)在我們開始編寫代碼,首先使用Requests庫獲得頁面信息1導(dǎo)入requests庫,將要爬取的網(wǎng)站賦值給變量2編寫獲取整個網(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ù)被兩個相同的標(biāo)簽包裹在其中確定了所需信息的位置之后,我們使用字符串相關(guān)知識來獲取目標(biāo)信息1通過源代碼中的標(biāo)簽將整個頁面數(shù)據(jù)拆分2繼續(xù)查看源代碼,發(fā)現(xiàn)每個高校信息被<tr>標(biāo)簽分割#使用字符串截取知識點(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ù)#使用字符串截取知識點(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ù)是我們不需要的,我們暫時先不管它1輸出little_item,結(jié)果如下:2通過切片去除空數(shù)據(jù)接著觀察處理后的數(shù)據(jù),對數(shù)據(jù)進(jìn)行進(jìn)一步處理3將處理之后的小列表添加到之前創(chuàng)建的空列表中4將完整的高校信息表作為返回值返回,同時去除第一條我們不需要的數(shù)據(jù)可以看到,第一個列表是我們不需要的數(shù)據(jù),剩下的每一個高校信息列表中的第一項(xiàng)數(shù)據(jù)都為空數(shù)據(jù)little_item=i.split('<td>')[1:]#將每個小列表添加到item_list中
item_list.append(little_item)returnitem_list[1:]正則表達(dá)式正則表達(dá)式也能夠索引數(shù)據(jù)以下是正則表達(dá)式中常用的一些規(guī)則:語法說明語法說明.匹配除換行符以外的所有字符*匹配前一個字符0次或多次\轉(zhuǎn)義字符,例如想要匹配.,使用\.+匹配前一個字符1次或多次[…]字符集?匹配前一個字符0次或一次\d數(shù)字,也可寫作[0-9]{m}匹配前一個字符m次\D非數(shù)字,[^\d]{m,n}匹配前一個字符m到n次\s空白字符^字符串以什么開頭\S非空白字符[^\s]$字符串以什么結(jié)尾\w單詞[A-Za-z0-9_]|左右表達(dá)式任意匹配一個\W非單詞字符(…)被括起來的表達(dá)式作為一個整體1對于本測試用例,手機(jī)號的匹配規(guī)則:接下來我們使用一個例子來看一下正則表達(dá)式的使用2郵箱的匹配規(guī)則測試用例test_str='''
小王手機(jī)號碼箱:12356484557@密碼:qwer123
小李手機(jī)號碼箱:dada_qqq@密碼:QQppp121
小劉手機(jī)號碼箱:abc666@163.com密碼:1545454
小吳手機(jī)號碼箱:545131ads@密碼:123645
小鄭手機(jī)號碼箱:assdasdfa@密碼:mingtian
小趙手機(jī)號碼箱:1231eq143123@密碼:nihao
小孫手機(jī)號碼箱:1121112wqeq@密碼:12qw12qw
小鄭手機(jī)號碼箱:dadad_dadad@密碼:qeqerqtad
小張手機(jī)號碼箱:1234@126.com密碼:qQDA12wQEQ3
小馮手機(jī)號碼箱: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)去接下來我們使用一個例子來看一下正則表達(dá)式的使用2將手機(jī)號碼查找出來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操作時,Python會將字符串轉(zhuǎn)為正則表達(dá)式對象所以我們先使用compile完成一次轉(zhuǎn)換,之后使用就不用重復(fù)轉(zhuǎn)換了練習(xí)Exercises密封線內(nèi)不準(zhǔn)答題編寫正則,使用re庫將密碼查找出來1導(dǎo)入Python正則庫re2定義函數(shù),首先去除整個網(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是一個可以從HTML或XML文件中提取數(shù)據(jù)的Python庫1首先來安裝,打開CMD,使用pip安裝2按下回車鍵,就能夠自動下載安裝安裝完成之后,我們通過一個小案例來學(xué)習(xí)一下它的簡單用法BeautifulSoup庫的簡單使用:<!DOCTYPEhtml>
<htmllang="en">
<head>
<metacharset="UTF-8">
<title>BeautifulSoup使用范例</title>
</head>
<body>
<h1>我是H1標(biāo)簽</h1>
<pclass='第一個P'>我是第一個p標(biāo)簽</p>
<p>我是第二個p標(biāo)簽</p>
<a>我是第一個a標(biāo)簽</a>
<aid='a2'>我是第一個a標(biāo)簽</a>
<a>我是第一個a標(biāo)簽</a>
<a>我是第一個a標(biāo)簽</a>
</body>
</html>一個簡單的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名稱,也就是上一級名稱:',)
print('文檔中第一個p節(jié)點(diǎn):',bs.p)#獲取
print('文檔中第一個p節(jié)點(diǎn)的內(nèi)容:',bs.p.get_text())#獲取
print('第一個p節(jié)點(diǎn)的class內(nèi)容:',bs.p['class'])#獲取
print('文檔的第一個a節(jié)點(diǎn):',bs.a)#獲取
print('文檔中所有的a節(jié)點(diǎn),返回一個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個字符長度。1定義設(shè)置樣式的函數(shù),創(chuàng)建兩個樣式實(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)建兩個樣式實(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從第二行開始,向表格中寫入編號表格樣式相關(guān)工作已經(jīng)完成,下面我們編寫寫入數(shù)據(jù)的函數(shù)3向表格寫入數(shù)據(jù)#將數(shù)據(jù)寫入表格
defwrite_item_in_sheet(sheet,item_list,style):#獲得行號列號
forrowinrange(len(item_list)):
#生成表格編號
sheet.write(row+1,0,row+1,style)向表格寫入數(shù)據(jù),使用sheet.write()方法四個參數(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)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 班干部工作測試題及答案
- 小自考視覺傳播制作經(jīng)典試題及答案
- CPBA考試考點(diǎn)回顧試題及答案
- 流行趨勢的商業(yè)分析師試題及答案
- 2024年CPBA個人發(fā)展試題及答案
- 2025年塑料擠吹中空成型機(jī)合作協(xié)議書
- 2025年醫(yī)藥中間體合作協(xié)議書
- 校園禁毒宣傳活動策劃方案(9篇)
- ktv的項(xiàng)目計(jì)劃書
- 2025年剝絨機(jī)項(xiàng)目發(fā)展計(jì)劃
- 2025-2030中國融資租賃行業(yè)發(fā)展分析與投資戰(zhàn)略研究報告
- 2024年北京市統(tǒng)計(jì)局招聘事業(yè)單位考試真題
- 2025年“鑄牢中華民族共同體意識”應(yīng)知應(yīng)會知識競測試賽題
- 2025年四川宜賓三中高三二模高考數(shù)學(xué)模擬試卷(含答案)
- 入職培訓(xùn)測試題及答案
- 境外項(xiàng)目合作居間協(xié)議書范本
- 網(wǎng)格員矛盾糾紛培訓(xùn)
- 2025年河南經(jīng)貿(mào)職業(yè)學(xué)院單招職業(yè)技能測試題庫學(xué)生專用
- GB/T 1346-2024水泥標(biāo)準(zhǔn)稠度用水量、凝結(jié)時間與安定性檢驗(yàn)方法
- 2024年襄陽汽車職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測驗(yàn)歷年參考題庫(頻考版)含答案解析
- 醫(yī)療機(jī)構(gòu)性侵防護(hù)制度與措施
評論
0/150
提交評論