爬取藝龍網站部分酒店信息


一.主題式網絡爬蟲設計方案
1.主題式網絡爬蟲名稱:爬取藝龍網站泉州酒店信息
2.主題式網絡爬蟲的內容與數據特征分析:爬取藝龍網站泉州酒店的名稱,價格和評分
3.主題式網絡爬蟲設計方案概述(包括實現思路與技術難點):
實現思路:本次設計方案主要使用request庫爬取網頁信息和beautifulSoup庫來提取泉州酒店信息,將其存入Excel文件里,並對其進行數據清理,模型分析和數據可視化。
技術難度:對藝龍網站泉州酒店頁面分析和信息采集以及數據可視化

二.主題頁面的結構特征分析

1.主題'頁面的結構與特征分析:通過HTML頁面的分析我們可以知道每個酒店的信息都在class="h_list"的子標簽中,然后我們所要的信息都在於class="h_info_text"中,接着我們可以利用find_all逐一將需要的信息篩選出來。

2.HTML的頁面解析

 

 

 

 

 

 三.網絡爬蟲程序設計

1.數據爬取與采集

 1 import requests
 2 import pandas as pd
 3 from bs4 import BeautifulSoup
 4 
 5 url='http://hotel.elong.com/quanzhou/'
 6 header = {"User-Agent": "huang"}
 7 r = requests.get(url, timeout=30, headers=header)
 8 r.raise_for_status()              # 產生異常信息
 9 r.encoding = r.apparent_encoding  # 修改編碼
10 html = r.text
11 soup=BeautifulSoup(html,'html.parser')
12 #創建空列表
13 name=[]
14 level=[]
15 price=[]
16 hotellist=[]
17 
18 #酒店名稱
19 for span in soup.find_all("span","info_cn"):
20     name.append(span.string)
21 #酒店評分
22 for i in soup.find_all("i","t20 c37e"):
23     level.append(i.string)
24 #酒店價格
25 for span in soup.find_all("span","h_pri_num"):
26     price.append(span.string)
27 print("{:^60}".format("泉州酒店信息"))
28 print("{:^5}\t{:^20}\t{:^10}\t{:^10}".format("序列","酒店名稱","酒店評分","酒店價格"))
29 #將數據進行整合
30 for i in range(20):
31     print("{:^5}\t{:^20}\t{:^10}\t{:^10}".format(i+1,name[i],level[i],price[i]))
32     hotellist.append([i+1,name[i],level[i],price[i]])
33 #對數據進行保存
34 df = pd.DataFrame(hotellist,columns = ['序列','酒店名稱','酒店評分','酒店價格'])
35 df.to_excel('藝龍網站泉州酒店信息.xlsx')

 

 

 

 

 

2.對數據進行清洗和處理

(1).刪除酒店價格

1 df=pd.read_excel('藝龍網站泉州酒店信息.xlsx')
2 df.drop('酒店名稱',axis=1,inplace=True)  #刪除酒店名稱
3 df.head(20)

 

 

 

 

 

 

 

 

 

 (2).重復值處理

 1 df.duplicated() #重復值處理 

 

 

 

(3).空值與缺失值處理

1 a=df['酒店價格'].isnull().value_counts()  #檢查是否有空值或缺失值
2 print(a)

 

 

 (4).異常值處理

1 df.describe()  #檢查是否有異常值

 

 

 

 

 

 3.數據分析與可視化

(1)散點圖

1 #散點圖
2 x = df.酒店價格
3 y = df.酒店評分
4 plt.xlabel("酒店價格")
5 plt.ylabel("酒店評分")
6 plt.scatter(x,y,color="red",label="散點")
7 plt.title("酒店價格與酒店評分的散點圖")
8 plt.legend()
9 plt.show()

 

 

 (2).柱狀圖(各酒店評分分布)

1 #柱形圖
2 name_list = df.酒店名稱
3 num_list = df.酒店評分  
4 plt.barh(range(len(num_list)), num_list,tick_label = name_list)
5 plt.title("各酒店評分分布")
6 plt.show()

 

 

 

 

 

 (3).直方圖(各酒店價格分布)

 1 #直方圖
 2 plt.hist(x = df.酒店價格,
 3          bins = 20,
 4          color = 'steelblue',
 5          edgecolor = 'black'
 6          )
 7 plt.xlabel('酒店價格')
 8 plt.ylabel('酒店個數')
 9 plt.title("各酒店價格分布")
10 plt.show()

 

 

 

 

 4.數據之間的關系與相關系數

 1 import numpy as np
 2 import pandas as pd
 3 import seaborn as sns
 4 import sklearn
 5 df=pd.read_excel('藝龍網站泉州酒店信息.xlsx')
 6 df.head(20)
 7 from sklearn.linear_model import LinearRegression
 8 X=df.drop("酒店名稱",axis=1)
 9 predict_model=LinearRegression()
10 predict_model.fit(X,df['酒店價格'])
11 print("回歸系數為:",predict_model.coef_)    #判斷相關性
12 sns.regplot(df.酒店價格,df.序列)

 

 

 5.將代碼匯總,附上完整代碼

 1 import requests
 2 import pandas as pd
 3 from bs4 import BeautifulSoup
 4 
 5 url='http://hotel.elong.com/quanzhou/'
 6 header = {"User-Agent": "huang"}
 7 r = requests.get(url, timeout=30, headers=header)
 8 r.raise_for_status()              # 產生異常信息
 9 r.encoding = r.apparent_encoding  # 修改編碼
10 html = r.text
11 soup=BeautifulSoup(html,'html.parser')
12 #創建空列表
13 name=[]
14 level=[]
15 price=[]
16 hotellist=[]
17 
18 #酒店名稱
19 for span in soup.find_all("span","info_cn"):
20     name.append(span.string)
21 #酒店評分
22 for i in soup.find_all("i","t20 c37e"):
23     level.append(i.string)
24 #酒店價格
25 for span in soup.find_all("span","h_pri_num"):
26     price.append(span.string)
27 print("{:^60}".format("泉州酒店信息"))
28 print("{:^5}\t{:^20}\t{:^10}\t{:^10}".format("序列","酒店名稱","酒店評分","酒店價格"))
29 #將數據進行整合
30 for i in range(20):
31     print("{:^5}\t{:^20}\t{:^10}\t{:^10}".format(i+1,name[i],level[i],price[i]))
32     hotellist.append([i+1,name[i],level[i],price[i]])
33 #對數據進行保存
34 df = pd.DataFrame(hotellist,columns = ['序列','酒店名稱','酒店評分','酒店價格'])
35 df.to_excel('藝龍網站泉州酒店信息.xlsx')
36 #對數據進行讀取
37 import pandas as pd
38 df=pd.read_excel('藝龍網站泉州酒店信息.xlsx')
39 print(df)
40 #對數據進行清洗和處理
41 #刪除酒店價格
42 df.drop('酒店名稱',axis=1,inplace=True)
43 df.head(20)
44 #檢查是否有重復值
45 df.duplicated()   
46 #檢查是否有空值或缺失值 
47 a=df['酒店價格'].isnull().value_counts()  
48 print(a)
49 #檢查是否有異常值
50 df.describe()
51 
52 #對數據分析與可視化
53 import pandas as pd
54 import numpy as np
55 import matplotlib.pyplot as plt
56 import seaborn as sns
57 df = pd.DataFrame(pd.read_excel('藝龍網站泉州酒店信息.xlsx'))
58 #散點圖
59 x = df.酒店價格
60 y = df.酒店評分
61 plt.xlabel("酒店價格")
62 plt.ylabel("酒店評分")
63 plt.scatter(x,y,color="red",label="散點")
64 plt.title("酒店價格與酒店評分的散點圖")
65 plt.legend()
66 plt.show()
67 #柱形圖
68 name_list = df.酒店名稱
69 num_list = df.酒店評分  
70 plt.barh(range(len(num_list)), num_list,tick_label = name_list)
71 plt.title("各酒店評分分布")
72 plt.show()
73 #直方圖
74 plt.hist(x = df.酒店價格,
75          bins = 20,
76          color = 'steelblue',
77          edgecolor = 'black'
78          )
79 plt.xlabel('酒店價格')
80 plt.ylabel('酒店個數')
81 plt.title("各酒店價格分布")
82 plt.show()
83 
84 #數據之間的關系與相關系數
85 import numpy as np
86 import pandas as pd
87 import seaborn as sns
88 import sklearn
89 df=pd.read_excel('藝龍網站泉州酒店信息.xlsx')
90 df.head(20)
91 from sklearn.linear_model import LinearRegression
92 X=df.drop("酒店名稱",axis=1)
93 predict_model=LinearRegression()
94 predict_model.fit(X,df['酒店價格'])
95 print("回歸系數為:",predict_model.coef_)    #判斷相關性
96 sns.regplot(df.酒店價格,df.序列)

四.結論

1.經過對主題數據的分析與可視化,我發現酒店的價格跟酒店的評分不相關。

2.通過這次的練習讓我懂得了不少知識,也對自己的不足之處更加了解。對於本次的編程對象方面由於沒有充足了解,導致其數據可視化方面較少,其相關性不明顯,總的方面做的還是有些不足。雖說有些不完美,但還是收獲了不少,對Python越來越感興趣,希望今后能學到更多方面的知識提升自己的不足。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM