python实战计划的第五个项目:在 MongoDB 中筛选房源。
我选的目标是小猪短租武汉地区的前3个page,先抓取每个page的所有链接,之后进入链接抓取具体的4个数据(标题、价钱、房主名称、房主性别),分别插入xiaozhu数据库的fangzi表单,最后筛选出价格大于400元的房子。
最终战果如下:
two_one.png
代码如下:
import requests
from bs4 import BeautifulSoup
import pymongo
client = pymongo.MongoClient('localhost', 27017)
xiaozhu = client['xiaozhu']
fang_zi = xiaozhu['fangzi']
urls = ['http://wh.xiaozhu.com/search-duanzufang-p{}-0/'.format(i) for i in range(1, 4)]
def girl_boy(a):
if a == 'member_girl_ico':
return '女'
elif a == 'member_boy_ico':
return '男'
else:
return '没填'
def get_links(url):
wb_data = requests.get(url)
soup = BeautifulSoup(wb_data.text, 'lxml')
links = soup.select('a.resule_img_a')
for link in links:
link = link['href']
insert_info(link)
def insert_info(url):
wb_data = requests.get(url)
soup = BeautifulSoup(wb_data.text, 'lxml')
title = soup.select('div.pho_info > h4 > em')
price = soup.select('div.day_l > span')
name = soup.select('div.w_240 > h6 > a')
sex = soup.select('div.w_240 > h6 > span')
data = {
'title': title[0].get_text(),
'price': price[0].get_text(),
'name': name[0].get_text(),
'sex': girl_boy(sex[0].get('class')[0])
}
fang_zi.insert_one(data)
def find_fang():
for info in fang_zi.find():
if int(info['price']) >= 400:
print(info)
# for url in urls:
# get_links(url)
find_fang()
总结:
1.mongodb的使用:导入pymongo模块之后,用pymongo的MongoClient创建client,再用client创建数据库,最后用数据库创建表单。
2.插入单条数据到数据库,格式为:表单名.insert_one(),例如:fang_zi.insert_one(data)。