Date:2016-10-4
By:Black Crow
前言:
本次作業(yè)為第二周第一節(jié)的作業(yè),使用MongoDB來篩選大于等于500的房源。
直接爬取的是列表頁的幾項(xiàng)數(shù)據(jù)针饥,未進(jìn)入房源頁進(jìn)行爬取讲婚。
作業(yè)效果:
大于等于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函數(shù),如果爬漏了會(huì)導(dǎo)致其他信息都不匹配滞项,可能的解決方式就是去拿上一級(jí)的信息
# 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,有缺漏導(dǎo)致信息不一一匹配夭坪,換了
}
#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匹配數(shù)據(jù)庫文判,答案使用的是if
print(item)#查找的是區(qū)間的話如何處理?
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()
####總結(jié):
>1. 從數(shù)據(jù)庫中提取的時(shí)候?qū)懙倪x取方式比較方便室梅,但是對(duì)于區(qū)間的數(shù)據(jù)如何處理戏仓,比如大于等于500小于等于700的。答案中固然采用的是if形式進(jìn)行的處理竞惋,按此可以實(shí)現(xiàn)柜去,但還是對(duì)于簡便方式處理時(shí)的方法好奇。