美文网首页
python实战计划:在MongoDB中筛选房源

python实战计划:在MongoDB中筛选房源

作者: black_crow | 来源:发表于2016-10-04 18:27 被阅读30次

    Date:2016-10-4
    By:Black Crow

    前言:

    本次作业为第二周第一节的作业,使用MongoDB来筛选大于等于500的房源。
    直接爬取的是列表页的几项数据,未进入房源页进行爬取。

    作业效果:

    大于等于500.png

    我的代码:

    20161004代码

    -- coding: utf-8 --

    from bs4 import BeautifulSoup
    from pymongo import MongoClient
    import requests,time
    client = MongoClient('localhost',27017)
    xiaozhu = client['xiaozhu']
    page_info = xiaozhu['page_info']
    def get_house_data(page_url):
    page_data = requests.get(page_url)
    page_soup = BeautifulSoup(page_data.text,'lxml')
    titles = page_soup.select('div > a > span')
    imgs = page_soup.select('li > a > img')
    prices = page_soup.select('span.result_price > i')
    house_urls =page_soup.select('div.result_btm_con.lodgeunitname')
    #需要注意下面zip函数,如果爬漏了会导致其他信息都不匹配,可能的解决方式就是去拿上一级的信息
    # print(imgs)
    for title,img,price,house_url in zip(titles,imgs,prices,house_urls):
    house_data ={
    'title':title.get_text(),
    'img':img.get('lazy_src'),#直接拿src显示的是lazysrc
    'price':int(price.get_text()),
    'house_url':house_url.get('detailurl')#之前爬的href,有缺漏导致信息不一一匹配,换了
    }
    #print(house_data)
    page_info.insert_one(house_data)
    time.sleep(1)
    def find_page_info():
    for item in page_info.find({'price':{'$gte':500}}):#使用了$gte匹配数据库,答案使用的是if
    print(item)#查找的是区间的话如何处理?
    page_urls =['http://gz.xiaozhu.com/search-duanzufang-p{}-0/'.
    format(str(i)) for i in range(4)]
    for page_url in page_urls:
    get_house_data(page_url)
    find_page_info()

    
    ####总结:
    >1. 从数据库中提取的时候写的选取方式比较方便,但是对于区间的数据如何处理,比如大于等于500小于等于700的。答案中固然采用的是if形式进行的处理,按此可以实现,但还是对于简便方式处理时的方法好奇。

    相关文章

      网友评论

          本文标题:python实战计划:在MongoDB中筛选房源

          本文链接:https://www.haomeiwen.com/subject/veqsyttx.html