Python爬蟲獲取樓盤資訊
阿新 • • 發佈:2019-01-04
在一家線上租房的公司已經實習兩週了。作為實習生,所以日常的工作主要是收集和整理全國各小區的資訊,比如小區的建成年代,是否有電梯,小區的門牌數等。因為我不太喜歡用複製貼上這種效率低的工作方式,所以寫了一個簡單的Python程式,相對那些高階爬蟲比較簡單,但是還挺實用。通過以下的程式碼可以爬取網站上的相關資訊啦。
def get_shanghai_beike_info(key): url1 = 'https://sh.ke.com/ershoufang/rs'+urp.quote(key) **這裡key是小區的名稱,也是函式的引數,這句語句可以生成進入搜尋對應的小區的網址 req1 = request.urlopen(url1) **request這條語句,如果發現結果中包括沒有找到,其實就是指沒有找到這個小區的資訊,那麼函式返回'None' res1 = req1.read() bs1 = BeautifulSoup(res1,'lxml') condition = bs1.get_text().find('沒有找到') if condition < 0: ##如果發現沒有 '沒有找到',也就是搜尋頁面中有這個小區,那麼在這個解析下來的lxml中找到對應Tag中電梯、建成年代和樓層高度的資訊 info_lift_1 = bs1.find_all('div',class_ = 'houseInfo') if len(info_lift_1) > 1: info_lift_2 = str() for i in np.arange(len(info_lift_1)): ##這段程式碼我最喜歡,因為現在很多網站不知道是不是有意的,故意把資訊的佈局弄成隨機的。這條語句把所有搜尋到的小區的資訊 info_lift_2 += info_lift_1[i].get_text() info_lift_3 = re.search(r'[有無]電梯',info_lift_2) ##詳情組合成一個完整的string,然後用正則表示式找其中是否包含'有電梯'或者'沒電梯' if info_lift_3 == None: lift = 'None' else: lift = info_lift_3.group() elif len(info_lift_1) == 1: info_lift_2 = info_lift_1[0].get_text() info_lift_3 = re.search(r'[有無]電梯',info_lift_2) if info_lift_3 == None: lift = 'None' else: lift = info_lift_3.group() else: lift = 'None' info_year_1 = bs1.find_all('div',class_='positionInfo') if len(info_year_1)>=1: info_year_2 = info_year_1[0].get_text() info_year_3 = re.search(r'([12]...)年建',info_year_2) if info_year_3 == None: year = 'None' else: year = pd.to_numeric(re.findall(r'\d\d\d\d',info_year_3.group())[0]) info_floor_1 = re.search(r'共[0-9].*層',info_year_2) if info_floor_1 == None: floor = 'None' else: floor2 = info_floor_1.group() floor = pd.to_numeric(re.findall(r'\d?\d',floor2)[0]) return lift,year,floor ##最後返回值就是是否有電梯、建成年代和樓層高度。樓層高度用來判斷那些電梯資訊不全的小區,如果樓層大於8,就判定為有電梯 else: return 'None','None','None'