資料採集與融合技術實驗課程作業一
作業所屬課程 | 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
程式碼執行結果
作業心得
- 資料抓取與解析
在這次作業中,我使用了 requests 庫來傳送 HTTP 請求,並使用 BeautifulSoup 庫來解析 HTML 內容。這兩個庫的結合實現資料抓取和解析。透過解析網頁中的表格資料,我能夠提取出每所大學的排名、名稱、所在省份、型別和總分。 - 資料展示
為了更好地展示抓取到的資料,我使用了 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
程式碼執行結果
作業心得
- 資料抓取與解析
在這次作業中,我使用了 requests 庫來傳送 HTTP 請求,並使用 BeautifulSoup 庫來解析 HTML 內容。這兩個庫的結合實現資料抓取和解析。透過解析網頁中的 JSON 資料,我能夠提取出每個商品的名稱和價格。 - 正規表示式的應用
在資料解析過程中,我使用了 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
程式碼執行結果
作業心得
- 資料抓取與解析
在這次作業中,我使用了 requests 庫來傳送 HTTP 請求,並使用 BeautifulSoup 庫來解析 HTML 內容。透過解析網頁中的資料,我能夠提取出所需的圖片的URL資訊。 - URL 處理
在這次作業中,我使用了 urljoin 函式來處理相對 URL 和絕對 URL 的拼接。這個函式可以確保生成的 URL 是正確的,避免了手動拼接 URL 可能帶來的錯誤。