資源簡介 (共28張PPT)Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.少兒編程課爬取高校排名本節課我們來編寫一個爬蟲案例,將高校信息爬取下來,并存入Excel表課程案例現在我們開始編寫代碼,首先使用Requests庫獲得頁面信息1導入requests庫,將要爬取的網站賦值給變量2編寫獲取整個網頁數據的函數import requests# 要爬取的目標網站start_url = 'https://tool.lu/school/index.html'def get_text(url):response = requests.get(url)return response.text獲得網頁信息數據后,查看網頁源代碼,確定我們所需數據的位置1在網頁中單擊右鍵,然后點擊查看網頁源代碼2通過查看分析,發現需要的數據被兩個相同的標簽包裹在其中確定了所需信息的位置之后,我們使用字符串相關知識來獲取目標信息1通過源代碼中的標簽將整個頁面數據拆分2繼續查看源代碼,發現每個高校信息被標簽分割# 使用字符串截取知識點獲取所有高校數據def get_item_by_str(text):item_list = []# 將整頁數據拆為列表list_1 = text.split('')# 將list_1的后半部分通過在拆一次list_2 = list_1[1].split('')3通過索引獲得包含高校數據的部分,并通過標簽在拆分一次1輸出list_2,觀察得到的數據2以下是一部分數據去除臟數據# 使用字符串截取知識點獲取所有高校數據def get_item_by_str(text):……print(list_2)content = get_text(start_url)get_item_by_str(content)列表第一項為空數據,之后的每一項都包含了高校的信息,但是有很多我們不需要的臟數據1通過切片,去除list_2列表中的第一項2替換每一項中的臟數據,只保留現在,我們去除列表中的臟數據3輸出替換過后的數據4通過標簽再次將每一條數據進行拆分for i in list_2:# 去除臟數據for tag in ['\n', ' ', '', '', '', '', '','', '', '', '','', '注:', '', '']:i = i.replace(tag, '')list_2 = list_1[1].split('')[1:]print(i)little_item = i.split('')第一條數據是我們不需要的,我們暫時先不管它1輸出little_item,結果如下:2通過切片去除空數據接著觀察處理后的數據,對數據進行進一步處理3將處理之后的小列表添加到之前創建的空列表中4將完整的高校信息表作為返回值返回,同時去除第一條我們不需要的數據可以看到,第一個列表是我們不需要的數據,剩下的每一個高校信息列表中的第一項數據都為空數據little_item = i.split('')[1:]# 將每個小列表添加到item_list中item_list.append(little_item)return item_list[1:]正則表達式正則表達式也能夠索引數據以下是正則表達式中常用的一些規則:語法 說明 語法 說明. 匹配除換行符以外的所有字符 * 匹配前一個字符0次或多次\ 轉義字符,例如想要匹配 . ,使用\. + 匹配前一個字符1次或多次[…] 字符集 ? 匹配前一個字符0次或一次\d 數字,也可寫作[0-9] {m} 匹配前一個字符m次\D 非數字,[^\d] {m,n} 匹配前一個字符m到n次\s 空白字符 ^ 字符串以什么開頭\S 非空白字符[^\s] $ 字符串以什么結尾\w 單詞[A-Za-z0-9_] | 左右表達式任意匹配一個\W 非單詞字符 (…) 被括起來的表達式作為一個整體1對于本測試用例,手機號的匹配規則:接下來我們使用一個例子來看一下正則表達式的使用2郵箱的匹配規則測試用例test_str = '''小王 手機號碼:15478954564 郵箱:12356484557@ 密碼:qwer123小李 手機號碼:18878456564 郵箱:dada_qqq@ 密碼:QQppp121小劉 手機號碼:13022454564 郵箱:abc666@ 密碼:1545454小吳 手機號碼:15578958411 郵箱:545131ads@ 密碼:123645小鄭 手機號碼:15466475464 郵箱:assdasdfa@ 密碼:mingtian小趙 手機號碼:13644887874 郵箱:1231eq143123@ 密碼:nihao小孫 手機號碼:13123444364 郵箱:1121112wqeq@ 密碼:12qw12qw小鄭 手機號碼:18845456864 郵箱:dadad_dadad@ 密碼:qeqerqtad小張 手機號碼:15478123131 郵箱:1234@ 密碼:qQDA12wQEQ3小馮 手機號碼:15123144444 郵箱:qwe@ 密碼:WEQDAQ12121''''(1[0-9]\d{9})'([0-9a-zA-Z_]{0,19}@[0-9a-zA-Z]{1,13}\.[a-zA-Z]+)1新建python文件,導入re庫并,將測試用例復制進去接下來我們使用一個例子來看一下正則表達式的使用2將手機號碼查找出來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)直接使用字符串表示的正則表達式進行findall操作時,Python會將字符串轉為正則表達式對象所以我們先使用compile完成一次轉換,之后使用就不用重復轉換了練習Exercises密封線內不準答題編寫正則,使用re庫將密碼查找出來1導入Python正則庫re2定義函數,首先去除整個網頁數據中的換行和空格接下來,我們回到高校案例,使用Python中的正則庫取出高校數據3通過正則提取數據,縮小范圍4再次編寫正則,將高校數據取出,并作為返回值返回import re# 使用正則表達式獲取所有高校數據def get_item_by_re(text):# 去除空格html = text.replace('\n', '').replace(' ', '')# 縮小范圍rule_1 = pile(r'雙一流(.*)注')table = rule_1.findall(html)# 正則取出數據rule_2 = pile('td>(.* )(.* )''(.* )(.* )')return rule_2.findall(table[0])BeautifulSoup除了使用上面兩種方式獲取數據,還有更加方便的方式:借助BeautifulSoup庫的幫忙BeautifulSoup是一個可以從HTML或XML文件中提取數據的Python庫1首先來安裝,打開CMD,使用pip安裝2按下回車鍵,就能夠自動下載安裝安裝完成之后,我們通過一個小案例來學習一下它的簡單用法BeautifulSoup庫的簡單使用:BeautifulSoup使用范例我是H1標簽我是第一個p標簽我是第二個p標簽我是第一個a標簽我是第一個a標簽我是第一個a標簽我是第一個a標簽一個簡單的HTML范例如下:from bs4 import BeautifulSouphtml = '''...'''bs = BeautifulSoup(html, 'lxml')# 簡單的獲取數據的方法:print('文檔的title:', bs.title)print('title的name屬性:', bs.title.name)print('title的內容:', bs.title.string)print('title的parent名稱,也就是上一級名稱:', bs.title.parent.name)print('文檔中第一個p節點:', bs.p) # 獲取print('文檔中第一個p節點的內容:', bs.p.get_text()) # 獲取print('第一個p節點的class內容:', bs.p['class']) # 獲取print('文檔的第一個a節點:', bs.a) # 獲取print('文檔中所有的a節點,返回一個list:', bs.find_all('a'))print('文檔中id屬性為a2的節點:', bs.find(id='a2'))1使用BeautifulSoup獲取數據212導入相關庫接下來,我們就使用BeautifulSoup獲取高校數據43# 使用BeautifulSoup獲取所有高校數據def get_item_by_bs(text):# 創建BeautifulSoup實例bs = BeautifulSoup(text, ‘lxml')from bs4 import BeautifulSoup# 查找所有標簽為tr的內容tag_tr = bs.find_all('tr')# 獲取所有高校數據并轉為數據表return [[i.get_text().strip()for i in tr.find_all('td')]for tr in tag_tr][1:-5]返回高校數據表獲得tr標簽中的內容定義函數,創建BeautifulSoup實例將數據存入Excel表1先來安裝,cmd中輸入pip install xlwt2安裝完成后,將其導入接下來,我們將得到的高校信息存入Excel表,Python操作Excel可以使用xlwt庫4設置第二列和第五列的單元格長度3觀察最終效果,第二列和第五列的單元格長度較長import xlwt# 設置單元格寬度def set_width(sheet):# 設置第二列寬度col_2 = sheet.col(1)col_2.width = 256 * 20# 設置第五列寬度col_5 = sheet.col(4)col_5.width = 256 * 15256*N,就表示有N個字符長度。1定義設置樣式的函數,創建兩個樣式實例2設置表格邊框為實線然后,設置表格樣式4設置全部字體樣式3使文字居中顯示# 設置Excel樣式def set_sheet_style():# 創建第一行樣式和全部樣式實例all_style = xlwt.XFStyle()first_row_style = xlwt.XFStyle()由于第一行的樣式和剩余樣式不同,所以這里我們創建兩個樣式實例# 設置邊框線border = xlwt.Borders()border.top = xlwt.Borders.THINborder.bottom = xlwt.Borders.THINborder.left = xlwt.Borders.THINborder.right = xlwt.Borders.THIN# 使文字居中alignment = xlwt.Alignment()alignment.horz = xlwt.Alignment.HORZ_CENTER # 水平居中alignment.vert = xlwt.Alignment.VERT_CENTER # 垂直居中# 設置字體為微軟雅黑all_font = xlwt.Font()all_font.name = '微軟雅黑'5設置第一行字體樣式# 第一行設置為微軟雅黑并字體加粗,字體大小為11first_row_font = xlwt.Font()first_row_font.name = '微軟雅黑'first_row_font.bold = Truefirst_row_font.height = 20 * 111將修改好的相應樣式綁定到全部樣式實例2將修改好的相應樣式綁定到第一行樣式實例然后,設置表格樣式3將樣式返回# 將修改好的樣式添加到全部樣式實例中all_style.font = all_fontall_style.alignment = alignmentall_style.borders = border# 將修改好的樣式添加到第一行樣式實例中first_row_style.font = first_row_fontfirst_row_style.alignment = alignmentfirst_row_style.borders = border# 將樣式返回return all_style, first_row_style1定義函數,參數為表格內創建的單元,高校數據表和表格樣式2從第二行開始,向表格中寫入編號表格樣式相關工作已經完成,下面我們編寫寫入數據的函數3向表格寫入數據# 將數據寫入表格def write_item_in_sheet(sheet, item_list, style):# 獲得行號列號for row in range(len(item_list)):# 生成表格編號sheet.write(row + 1, 0, row + 1, style)向表格寫入數據,使用sheet.write()方法四個參數依次為:將內容寫到第幾行、寫到第幾列、寫如的內容、樣式由于是從第二行開始,所以是row+1for col in range(len(item_list[row])):# 將高校信息數據寫入到excel表格中sheet.write(row + 1, col + 1, item_list[row][col], style)1創建表格和單元2調用設置寬度方法,設置單元格寬度最后,定義一個函數,創建表格并調用之前幾個函數將數據寫入3調用設置樣式方法,設置樣式# 創建表格并指定標題def save_in_excel(item_list):# 打開表格wbk = xlwt.Workbook()# 創建一個單元sheet = wbk.add_sheet('高校信息表V2.0')# 調用設置寬度方法設置單元格寬度set_width(sheet)# 調用設置樣式方法,獲得第一行樣式和全部樣式all_style, first_row_style = set_sheet_style()# 生成excel表格的標題title_list = ['編號', '學校名稱', '985', '211', '雙一流']# 將標題寫入excel并設置樣式for col in range(len(title_list)):sheet.write(0, col, title_list[col], first_row_style)4創建表格標題,并寫入表格# 將高校數據寫入excel并設置樣式write_item_in_sheet(sheet, item_list, all_style)# 保存excel表wbk.save('高校信息表V2.0.xls')5調用寫入數據函數,并將表格保存總結Summarypython爬蟲√字符串和列表的數據處理√正則表達式和re庫常見方法的使用√BeautifulSoup庫獲取數據常用方式√python操作Excel的庫xlwt的使用√Thanks! 展開更多...... 收起↑ 資源預覽 縮略圖、資源來源于二一教育資源庫 主站蜘蛛池模板: 成安县| 孝感市| 南和县| 合水县| 利川市| 邮箱| 卢湾区| 灵璧县| 临漳县| 柘城县| 阿图什市| 义乌市| 政和县| 怀安县| 抚州市| 类乌齐县| 庄浪县| 达尔| 井冈山市| 张家川| 金湖县| 金堂县| 祁连县| 太原市| 西乌珠穆沁旗| 奉化市| 阜阳市| 上虞市| 吉水县| 伊金霍洛旗| 阳谷县| 竹山县| 冀州市| 镇巴县| 澄迈县| 凤山县| 山阳县| 隆德县| 深泽县| 当涂县| 太康县|