1. 程式人生 > 其它 >20211102 尹子揚《Python程式設計》 實驗四 Python綜合實踐實驗報告

20211102 尹子揚《Python程式設計》 實驗四 Python綜合實踐實驗報告

20211102 尹子揚 《Python程式設計》 實驗4報告

課程:《Python程式設計》

班級: 2111

姓名: 尹子揚

學號:20211102

實驗教師:王志強

實驗日期:2022年5月31日

必修/選修: 公選課

(一)實驗要求

Python綜合應用:爬蟲、資料處理、視覺化、機器學習、神經網路、遊戲、網路安全等。
課代表和各小組負責人收集作業(原始碼、視訊、綜合實踐報告)

注:在華為ECS伺服器(OpenOuler系統)和物理機(Windows/Linux系統)上使用VIM、PDB、IDLE、Pycharm等工具程式設計實現。

批閱:注意本次實驗不算做實驗總分,前三個實驗每個實驗10分,累計30分。本次實踐算入綜合實踐,打分為25分。
評分標準:
(1)程式能執行,功能豐富。(需求提交原始碼,並建議錄製程式執行的視訊)10分
(2)綜合實踐報告,要體現實驗分析、設計、實現過程、結果等資訊,格式規範,邏輯清晰,結構合理。10分。
(3)在實踐報告中,需要對全課進行總結,並寫課程感想體會、意見和建議等。5分

(4)如果沒有使用華為雲服務(ECS或者MindSpore均可),本次實踐扣10分。

注意:每個人的實驗不能重複,課代表先統計大家做的內容並彙總,有重複的需要自行協商。

(二)實驗過程及結果

1.匯入庫

 2.制定一些空的list

 3.向地址傳送請求並用美味的湯解析返回的內容

 4.針對每一個屬性進行解析

 5.在儲存資料時對儲存有影響的情況進行排查

 6.把資料儲存到csv裡面

7.主函式

8.執行結果







(三)在華為雲上執行程式碼

 1.開啟ESC伺服器

 2.連入putty

 3.開啟WinSCP並建立test

 4.下載python3以及pip and更新

具體操作按照搭建微信公眾號後臺——收發文字訊息_彈性雲伺服器 ECS_最佳實踐_華為雲 (huaweicloud.com)上的指示完成

5.執行成功結果

 (四)在實驗中遇到的問題

問題一:對於庫的匯入不清楚

解決:在檔案中的setting裡找到資源包上的搜尋欄進行尋找

問題二:在putty執行時對python安裝包,pip庫匯入不知道怎麼弄

解決:在查找了n天資料後找到上述網址,按照流程就可以很簡單的進行更新,不過庫下載巨慢

問題三:python在putty上無法執行

解決:把py檔案拖入在putty上下載的python資料夾就可以了(在SCP上操作)

 (五)節課感悟

 在本學期的python公選課中,我接觸到了一個從來沒有接觸的領域(從入門到入土),上學期選到python的時候心情也是非常激動的,在這短短的十幾節大課裡,我感受到了python的魅力(尤其是這學期還有無情的c語言),王老師上課也是講的非常有意思,尤其時對於markdown測評作業發獎品的時候顯得整個人散發著光芒(yue)在課上,王老師對於每一個部分都講的非常細緻,不過下次可不可以講的慢一點,每次都要跟著旁邊的同學抄程式碼,菜鳥真的跟不上啊TAT,我對於python的爬蟲感受是最深的,大家都是知道一句話“學python就要學爬蟲”,其實我感覺生活中爬蟲用的好絕對能給我帶更多的1收穫,雖然我現在只會爬一些比較簡單的網站,但是以後我還是會加深python功夫,在python的道路上走到頭禿.......阿不,走得越來越遠qwq。


(以下是本次實驗的python程式碼)
import requests #傳送請求
from bs4 import BeautifulSoup #解析網頁
import pandas as pd #存取csv
from time import sleep #等待時間(防止反爬)

book_name = [] # 書名
book_url = [] # 書籍連結
book_star = [] # 書籍評分
book_star_people = [] # 評分人數
book_author = [] # 書籍作者
book_translater = [] # 書籍譯者
book_publisher = [] # 出版社
book_pub_year = [] # 出版日期
book_price = [] # 書籍價格
book_comment = [] # 一句話評價

def get_book_info(url, headers):
res = requests.get(url, headers=headers)
soup = BeautifulSoup(res.text, 'html.parser')
for book in soup.select('.item'):
name = book.select('.pl2 a')[0]['title'] # 書名
book_name.append(name)
bkurl = book.select('.pl2 a')[0]['href'] # 書籍連結
book_url.append(bkurl)
star = book.select('.rating_nums')[0].text # 書籍評分
book_star.append(star)
star_people = book.select('.pl')[1].text # 評分人數
star_people = star_people.strip().replace(' ', '').replace('人評價', '').replace('(\n', '').replace('\n)',
'') # 資料清洗
book_star_people.append(star_people)

# 沒有一句話評價,比如倒數第二名,君主論
if book.select('.quote span'):
book_comment.append(book.select('.quote span')[0].text)
else:
book_comment.append(None)

info = book.select('.pl')[0].text.split('/')
if len(info) == 5: # 正常情況
book_author.append(info[0])
book_translater.append(info[1])
book_publisher.append(info[2])
book_pub_year.append(info[3])
book_price.append(str(info[4]))
elif len(info) == 4: # 沒有譯者,比如:第一名,紅樓夢
book_author.append(info[0])
book_translater.append(None)
book_publisher.append(info[1])
book_pub_year.append(info[2])
book_price.append(str(info[3]))
elif len(info) == 6: # 有2個價格,比如:第一頁,福爾摩斯探案全集(上中下)
book_author.append(info[0])
book_translater.append(info[1])
book_publisher.append(info[2])
book_pub_year.append(info[3])
book_price.append(str(info[4]) + '/' + str(info[5]))
elif len(info) == 3: # 沒有作者,且沒有譯者,比如:第5頁,十萬個為什麼
book_author.append(None)
book_translater.append(None)
book_publisher.append(info[0])
book_pub_year.append(info[1])
book_price.append(str(info[2]))
else:
pass


def save_to_csv(csv_name):
df = pd.DataFrame() # 初始化一個DataFrame物件
df['書名'] = book_name
df['豆瓣連結'] = book_url
df['作者'] = book_author
df['譯者'] = book_translater
df['出版社'] = book_publisher
df['出版日期'] = book_pub_year
df['價格'] = book_price
df['評分'] = book_star
df['評分人數'] = book_star_people
df['一句話評價'] = book_comment
df.to_csv(csv_name, encoding='utf_8_sig') # 將資料儲存到csv檔案


if __name__ == "__main__":
# 定義一個請求頭
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'}
# 開始爬取豆瓣資料
for i in range(4): # 爬取共10頁,每頁25條資料
page_url = 'https://book.douban.com/top250?start={}'.format(str(i * 25))
print('開始爬取第{}頁,地址是:{}'.format(str(i + 1), page_url))
get_book_info(page_url, headers)
sleep(1) # 等待1秒
# 儲存到csv檔案
save_to_csv(csv_name="BookDouban250.csv")