1. 程式人生 > >Python高階應用程式設計任務

Python高階應用程式設計任務

Python高階應用程式設計任務要求


用Python實現一個面向主題的網路爬蟲程式,並完成以下內容:
(注:每人一題,主題內容自選,所有設計內容與原始碼需提交到部落格園平臺)

一、主題式網路爬蟲設計方案(15分) 1.主題式網路爬蟲名稱   名稱:爬取攜程網站泉州地區酒店資訊
2.主題式網路爬蟲爬取的內容與資料特徵分析   本次爬蟲主要爬取攜程網站泉州地區酒店名稱與地址和酒店評分
3.主題式網路爬蟲設計方案概述(包括實現思路與技術難點)   實現思路:本次設計方案主要使用request庫爬取網頁資訊和beautifulSoup庫來提取泉州地區酒店資訊 技術難點:主要包括對攜程網站泉州地區酒店部分的頁面進行分析採集   二、主題頁面的結構特徵分析(15分) 1.主題頁面的結構特徵

 

 


2.Htmls頁面解析

 通過F12,對頁面進行檢查,檢視我們所需要爬取內容的相關程式碼

 

 

 

 

 

 


3.節點(標籤)查詢方法與遍歷方法
(必要時畫出節點樹結構)
 查詢方法:find
遍歷方法:for迴圈
三、網路爬蟲程式設計(60分)
爬蟲程式主體要包括以下各部分,要附原始碼及較詳細註釋,並在每部分程式後面提供輸出結果的截圖。
1.資料爬取與採集

 

 


2.對資料進行清洗和處理
 

 

 

 

 

 

 

 

 

 

 

 

3.文字分析(可選):jieba分詞、wordcloud視覺化
4.資料分析與視覺化
(例如:資料柱形圖、直方圖、散點圖、盒圖、分佈圖、資料迴歸分析等)

 

 

 

 

 

 


 5.資料持久化

 

 

 

 6.附完整程式程式碼
# 匯入相關模組
import requests
from bs4 import BeautifulSoup
import pandas as pd


def getHtml(url):
    # 判斷爬取 是否出錯
    try:
        # 使用get方式爬取頁面,新增頭部偽裝瀏覽器
        r = requests.get(url, headers={'user-agent': 'Mozilla/5.0'})

        r.raise_for_status()
        # 設定編碼格式
        r.encoding = r.apparent_encoding
        # 返回原始碼
        return r.text
    except:
        return "頁面爬取Error"

def HotelList(text,hotellist):

    soup = BeautifulSoup(text, "html.parser")
    # 爬取酒店列表
    hotel_list = soup.select("div#hotel_list>div")
    # 迴圈
    for hotel in hotel_list:
        # 將可能出現錯誤的地方進行跳過
        try:
            # 酒店名稱
            hotel_name = hotel.select("h2")[0].text
            # 酒店連結
            href = hotel.select("h2>a")[0].attrs["href"]
            # 服務貧家
            recommend = hotel.select("span.recommend")[0].text
            p = hotel.select("p.hotel_item_htladdress")
            # 酒店地址
            dizhi = p[0].text
            # 最新預定時間
            newtime = hotel.select("p.hotel_item_last_book")[0].text
            # 評分
            hotel_score = hotel.find_all("span", "hotel_value")[0].text
            # 點評人數
            people_number = hotel.select("span.hotel_judgement>span")[0].text
            # 酒店評分
            level = hotel.find_all("span", "hotel_level")[0].text
            # 質量保證
            ico_quality_gold = hotel.select("span.ico_quality_gold")[0].text
            # 所屬地區
            diqu = p[0].find_all(
                "a", attrs={"tracekey": "nhtllistroomclick"})[0].text
            # price = hotel.find_all("span", "J_price_lowList ")[0].text
            
            hotellist.append([hotel_name, href, recommend, dizhi, newtime, 
                              hotel_score, people_number, level, ico_quality_gold, diqu])
            print([hotel_name, href, recommend, dizhi, newtime,
                   hotel_score, people_number, level, ico_quality_gold, diqu])

        except:
            "一個數據爬取出錯"
            hotellist.append([hotel_name, href, recommend, dizhi, newtime, 
                              hotel_score, people_number, level, ico_quality_gold, diqu])


def savedata(hotellist):

    wri = pd.ExcelWriter("HotelList.xlsx")

    col = ["hotel_name", "href", "recommend", "dizhi", "newtime",
           "hotel_score", "people_number", "level", "ico_quality_gold", "diqu"]

    pf = pd.DataFrame(hotellist,columns=col)
    # 寫入excel
    pf.to_excel(wri)

    wri.save()

def main():
    # 存放資料的陣列
    hotellist = []
    text = getHtml(
        "https://hotels.ctrip.com/hotel/quanzhou406#ctm_ref=hod_hp_sb_lst")

    HotelList(text, hotellist)
    #列印結果資訊
    print(hotellist)
    # 資料儲存
    savedata(hotellist)

 

 

 

 

四、結論(10分)
1.經過對主題資料的分析與視覺化,可以得到哪些結論? 通過對泉州地區酒店的爬取,可以知道每個酒店的具體名稱和地址還有酒店評分,由此可知泉州華僑大廈和希岸酒店,泉州錢隆酒店的評分最高;泉州泉興精品酒店評分最低。 泉州酒店點評人數最多,泉州錢隆酒店點評人數最少。
2.對本次程式設計任務完成的情況做一個簡單的小結。 我覺得這次爬蟲的內容還挺有意思的,也讓我學到了很多書本以外的知識,一步一步自己探索出來,遇到不懂的問題及時問同學答疑解惑。這一次任務按照老師的要求一步一步來實現,雖然有一些沒有完全實現出來,還存在在很多問題,但是發現問題多了也就能及時查缺補漏,讓我們對Python這門語言有了更深的理解,也讓我增加了更多的興趣對於這個課程,能夠讓自己能更好地進步。