Python实战计划week2_1项目

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)。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容