Python爬虫获取楼盘信息

    在一家线上租房的公司已经实习两周了。作为实习生,所以日常的工作主要是收集和整理全国各小区的信息,比如小区的建成年代,是否有电梯,小区的门牌数等。因为我不太喜欢用复制粘贴这种效率低的工作方式,所以写了一个简单的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'



 

猜你喜欢

转载自blog.csdn.net/weixin_41968760/article/details/80449987