中文字幕精品无码一区二区,成全视频在线播放观看方法,大伊人青草狠狠久久,亚洲一区影音先锋色资源

小學課后服務 Python少兒編程 進階篇:4-爬取高校排名 課件 (28張PPT)

資源下載
  1. 二一教育資源

小學課后服務 Python少兒編程 進階篇:4-爬取高校排名 課件 (28張PPT)

資源簡介

(共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正則庫re
2
定義函數,首先去除整個網頁數據中的換行和空格
接下來,我們回到高校案例,使用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 BeautifulSoup
html = '''...'''
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獲取數據
2
1
2
導入相關庫
接下來,我們就使用BeautifulSoup獲取高校數據
4
3
# 使用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 xlwt
2
安裝完成后,將其導入
接下來,我們將得到的高校信息存入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 * 15
256*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.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 # 垂直居中
# 設置字體為微軟雅黑
all_font = xlwt.Font()
all_font.name = '微軟雅黑'
5
設置第一行字體樣式
# 第一行設置為微軟雅黑并字體加粗,字體大小為11
first_row_font = xlwt.Font()
first_row_font.name = '微軟雅黑'
first_row_font.bold = True
first_row_font.height = 20 * 11
1
將修改好的相應樣式綁定到全部樣式實例
2
將修改好的相應樣式綁定到第一行樣式實例
然后,設置表格樣式
3
將樣式返回
# 將修改好的樣式添加到全部樣式實例中
all_style.font = all_font
all_style.alignment = alignment
all_style.borders = border
# 將修改好的樣式添加到第一行樣式實例中
first_row_style.font = first_row_font
first_row_style.alignment = alignment
first_row_style.borders = border
# 將樣式返回
return all_style, first_row_style
1
定義函數,參數為表格內創建的單元,高校數據表和表格樣式
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+1
for 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
調用寫入數據函數,并將表格保存
總結
Summary
python爬蟲

字符串和列表的數據處理

正則表達式和re庫常見方法的使用

BeautifulSoup庫獲取數據常用方式

python操作Excel的庫xlwt的使用

Thanks!

展開更多......

收起↑

資源預覽

<pre id="tfb94"><li id="tfb94"></li></pre>

<bdo id="tfb94"><rt id="tfb94"></rt></bdo>
  • <menu id="tfb94"><dl id="tfb94"></dl></menu><i id="tfb94"><acronym id="tfb94"><sub id="tfb94"></sub></acronym></i>

    1. 主站蜘蛛池模板: 成安县| 孝感市| 南和县| 合水县| 利川市| 邮箱| 卢湾区| 灵璧县| 临漳县| 柘城县| 阿图什市| 义乌市| 政和县| 怀安县| 抚州市| 类乌齐县| 庄浪县| 达尔| 井冈山市| 张家川| 金湖县| 金堂县| 祁连县| 太原市| 西乌珠穆沁旗| 奉化市| 阜阳市| 上虞市| 吉水县| 伊金霍洛旗| 阳谷县| 竹山县| 冀州市| 镇巴县| 澄迈县| 凤山县| 山阳县| 隆德县| 深泽县| 当涂县| 太康县|