資料採集與融合技術實驗課程作業一

KaiInssy發表於2024-10-18

資料採集與融合技術實驗課程作業一

作業所屬課程 https://edu.cnblogs.com/campus/fzu/2024DataCollectionandFusiontechnology
作業連結 https://edu.cnblogs.com/campus/fzu/2024DataCollectionandFusiontechnology/homework/13286
gitee碼雲程式碼位置 https://gitee.com/wang-qiangsy/crawl_project/tree/master/作業一
學號 102202106

目錄
  • 資料採集與融合技術實驗課程作業一
    • 作業內容
      • 作業①:
      • 作業②:
      • 作業③:
    • 作業①:爬取大學排名資訊
      • 主要程式碼
      • 程式碼執行結果
      • 作業心得
    • 作業②:爬取商城中商品名稱與價格
      • 主要程式碼
      • 程式碼執行結果
      • 作業心得
    • 作業③:爬取網頁JPEG和JPG格式檔案
      • 主要程式碼
      • 程式碼執行結果
      • 作業心得

作業內容

作業①:

要求:用requests和BeautifulSoup庫方法定向爬取給定網址(http://www.shanghairanking.cn/rankings/bcur/2020)的資料,螢幕列印爬取的大學排名資訊。
輸出資訊:

排名 學校名稱 省市 學校型別 總分
1 清華大學 北京 綜合 852.5
2 ......

作業②:

要求:用requests和re庫方法設計某個商城(自已選擇)商品比價定向爬蟲,爬取該商城,以關鍵詞“書包”搜尋頁面的資料,爬取商品名稱和價格。
輸出資訊:

序號 價格 商品名
1 65.00 xxx
2 ......

作業③:

要求:爬取一個給定網頁( https://news.fzu.edu.cn/yxfd.htm)或者自選網頁的所有JPEG和JPG格式檔案
輸出資訊:將自選網頁內的所有JPEG和JPG檔案儲存在一個資料夾中

作業①:爬取大學排名資訊

主要程式碼

# 定義獲取院校資料的函式
def get_university_data():
    url = 'https://www.shanghairanking.cn/rankings/bcur/2021'
    response = requests.get(url)
    response.encoding = 'utf-8'
    soup = BeautifulSoup(response.text, 'html.parser')
    university_data = []
    # 查詢包含院校資訊的表格
    table = soup.find('table')
    for row in table.find_all('tr')[1:]: 
        cols = row.find_all('td')
        if len(cols) > 1:
            rank = cols[0].text.strip()
            name = ' '.join(cols[1].text.strip().split())  # 刪除換行符
            province = cols[2].text.strip()
            type_ = cols[3].text.strip()  # 院校型別
            total_score = cols[4].text.strip()  # 總分
            university_data.append((rank, name, province, type_, total_score))   
    return university_data

程式碼執行結果

作業心得

  1. 資料抓取與解析
    在這次作業中,我使用了 requests 庫來傳送 HTTP 請求,並使用 BeautifulSoup 庫來解析 HTML 內容。這兩個庫的結合實現資料抓取和解析。透過解析網頁中的表格資料,我能夠提取出每所大學的排名、名稱、所在省份、型別和總分。
  2. 資料展示
    為了更好地展示抓取到的資料,我使用了 PrettyTable 庫。這個庫可以將資料以表格的形式美觀地展示出來。透過設定表格的欄位名稱和對齊方式,我能夠清晰地展示每所大學的詳細資訊。

作業②:爬取商城中商品名稱與價格

主要程式碼

# 獲取網頁內容
def get_html(url):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36'
    }
    try:
        response = requests.get(url, headers=headers)
        response.raise_for_status()  # 確保請求成功
        return response.text
    except requests.RequestException as e:
        print(f"Error fetching data from {url}: {e}")
        return ""

# 解析網頁內容,提取商品名稱和價格
def parse_page(data):
    uinfo = []
    plt = re.findall(r'"sku_price":"([\d.]+)"', data)  # 商品價格
    tlt = re.findall(r'"ad_title_text":"(.*?)"', data)  # 商品名稱

    min_length = min(len(plt), len(tlt))

    for i in range(min_length):
        price = plt[i]
        name = tlt[i].strip()
        uinfo.append((name, price))  # 新增名稱和價格到uinfo列表

    return uinfo

程式碼執行結果

作業心得

  1. 資料抓取與解析
    在這次作業中,我使用了 requests 庫來傳送 HTTP 請求,並使用 BeautifulSoup 庫來解析 HTML 內容。這兩個庫的結合實現資料抓取和解析。透過解析網頁中的 JSON 資料,我能夠提取出每個商品的名稱和價格。
  2. 正規表示式的應用
    在資料解析過程中,我使用了 re 庫中的正規表示式來提取商品的價格和名稱。在這次作業中,我透過正規表示式提取了所需的資料。

作業③:爬取網頁JPEG和JPG格式檔案

主要程式碼

# 獲取網頁內容
def get_html(url):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36'
    }
    try:
        response = requests.get(url, headers=headers)
        response.raise_for_status()  # 確保請求成功
        return response.text
    except requests.RequestException as e:
        print(f"Error fetching data from {url}: {e}")
        return ""

# 解析網頁內容,提取圖片連結
def parse_page(html, base_url):
    soup = BeautifulSoup(html, 'html.parser')
    img_urls = []
    for img in soup.find_all('img'):
        src = img.get('src')
        if src and (src.lower().endswith('.jpg') or src.lower().endswith('.jpeg')):
            full_url = urljoin(base_url, src)
            img_urls.append(full_url)
    return img_urls

程式碼執行結果


作業心得

  1. 資料抓取與解析
    在這次作業中,我使用了 requests 庫來傳送 HTTP 請求,並使用 BeautifulSoup 庫來解析 HTML 內容。透過解析網頁中的資料,我能夠提取出所需的圖片的URL資訊。
  2. URL 處理
    在這次作業中,我使用了 urljoin 函式來處理相對 URL 和絕對 URL 的拼接。這個函式可以確保生成的 URL 是正確的,避免了手動拼接 URL 可能帶來的錯誤。

相關文章