問題
訪問國防科技大學招生網http://www.gotonudt.cn/site/gfkdbkzsxxw/lqfs/index.html,爬取各省市歷年分數線信息。
步驟
1.引入
import urllib.request as req
import re
2.捕獲網頁源代碼
url = 'http://www.gotonudt.cn/site/gfkdbkzsxxw/lqfs/info/2017/717.html'
webpage = req.urlopen(url) # 根據超鏈訪問鏈接的網頁
data = webpage.read() # 讀取超鏈網頁數據
data = data.decode('utf-8') # byte類型解碼爲字符串
這樣如果輸出data便會得到如下信息:
3.獲取所有表格信息
table = re.findall(r'<table(.*?)</table>', data, re.S)
表格對應如下:
4.預處理
firsttable = table[0] # 取網頁中的第一個表格
# 數據清洗,將表中的 ,\u3000,和空格號去掉
firsttable = firsttable.replace(' ', '')
firsttable = firsttable.replace('\u3000', '')
firsttable = firsttable.replace(' ', '')
對應下表:
5.數據分析
def step3():
score = []
# 請按下面的註釋提示添加代碼,完成相應功能,若要查看詳細html代碼,可在瀏覽器中打開url,查看頁面源代碼。
#********** Begin *********#
# 1.按tr標籤對獲取表格中所有行,保存在列表rows中:
rows = re.findall(r'<tr(.*?)</tr>', firsttable, re.S)
# 2.迭代rows中的所有元素,獲取每一行的td標籤內的數據,並把數據組成item列表,將每一個item添加到scorelist列表:
scorelist = []
for row in rows:
items = []
tds = re.findall(r'<td.*?>(.*?)</td>', row, re.S)
for td in tds:
rightindex = td.find('</span>') # 返回-1表示沒有找到
leftindex = td[:rightindex].rfind('>')
items.append(td[leftindex+1:rightindex])
scorelist.append(items)
# 3.將由省份,分數組成的7元列表(分數不存在的用\代替)作爲元素保存到新列表score中,不要保存多餘信息
for record in scorelist[3:]:
record.pop()
score.append(record)
#********** End **********#
return score
print(step3())
輸出結果如下: