Python爬蟲 學習筆記(一)

問題

  訪問國防科技大學招生網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]           # 取網頁中的第一個表格
# 數據清洗,將表中的&nbsp,\u3000,和空格號去掉
firsttable = firsttable.replace('&nbsp;', '')
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())

輸出結果如下:

 

發佈了37 篇原創文章 · 獲贊 11 · 訪問量 4787
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章