都說現在的房價很高,具體有多高呢,我們一起來看看。
現在網上關於房子的價格以及交易信息魚龍混雜,與實際情況相差比較大,目前鏈家平臺的數據應該是相對比較可靠的,所以這次我們就打算去鏈家爬一爬。
說到爬蟲,前面也有說過,無非就三個主要的步驟
1、獲取目標網頁或接口
2、從目標網頁或接口中解析並提煉出你要的數據字段
3、數據保存
我們今天就以鏈家平臺上北京地區二手房爲例,首先是打開目標網頁。
https://bj.lianjia.com/ershoufang/
網頁下面有分頁,一共提供了 100 頁數據,也就是說這 100 頁都是我們的目標網頁,所以第一件事就是要獲取到總頁數。
打開開發者模式可以看到,有個字段 totalPage 字段,這個字段就是總頁數,如下圖。
有了總頁數之後呢,接下來就是要對這 100 個頁面循環解析了,把我們要的字段和數據都解析出來。
爲了獲取更詳細的數據,這裏我們進入到詳情頁去解析數據,同樣打開開發者模式,看到有總價 total(總價)、unitPriceValue(單價)、areaName(位置)等字段,這些就是我們要獲取的主要字段。
解析得到字段數據後,就要把數據保存起來,保存數據的方式一般有保存到數據庫(Mysql、MongoDB)和保存到本地文件(txt、excel、csv),爲了方便起見,這裏我們將數據只保存到本地 csv 文件。
上面說的就是這個爬蟲的大致過程,下面是一段主要代碼,在公衆號後臺回覆關鍵字【鏈家】可獲取完整代碼,有需要 csv 文件數據的也可以後臺私信聯繫我哈。
def getContent(self, url):
totalPage = self.getTotalPage(url)
totalPage = 2 #爲了方便調試,我這裏把總頁數寫死了
# 循環處理每個目標頁面
for pageNum in range(1, totalPage+1 ):
url = "https://bj.lianjia.com/ershoufang/pg{}/".format(pageNum)
print("正在獲取第{}頁數據: {}".format(pageNum,url))
response = requests.get(url, headers = self.headers)
soup = BeautifulSoup(response.text, "html.parser")
links = soup.find_all("div", class_ = "info clear")
for i in links:
link = i.find("a")["href"]
detail = self.parseDetail(link)
self.datas.append(detail)
#爲了防止反爬限制休眠1s
time.sleep(1)
# 數據存儲到csv文件中
data = pd.DataFrame(self.datas)
# 自定義字段
columns = ["小區", "戶型", "面積", "價格", "單價", "朝向", "電梯", "位置", "地鐵"]
data.to_csv("./lianjiaData.csv", encoding='utf_8_sig', index=False, columns=columns)