论如何利用 Python 优雅的找对象

672 阅读5分钟

(一)

早晨 7 点,两路口。小痴在清晨的梦中被闹钟叫醒。

他关掉闹钟,翻起身,来到洗漱台,对着镜子,不经意扬起了嘴巴,微笑起来。

(二)

小痴,全名陈小痴,是一名程序员。

小痴人如其名,长相清秀,痴迷于编程。人生的座右铭「人必有痴,而后有成」。小痴非常注重自身的穿着,平常虽然穿的不时尚,但却给人很舒服的感觉。

(三)

在简单的洗漱完之后,小痴穿上了带着公司 logo 的 T 恤,把笔记本放进小米电脑包,步行来到两路口轻轨站。

二号线正值早高峰,人潮汹涌。但小痴早已习惯,不慌不忙的买了早餐,豆浆配馒头。随后坐上了两路口的轻轨,手机看着「stromzhang」的文章,向着江北方向驶去。

(四)

小痴如今已是一位技术组的领导,带领着自己的团队。他主导 android 版的 APP,从原本日活几百到如今日活几万,给公司带来非常多的利润。这样的壮举让小痴名声大噪,受到领导的赏识,在公司里得到很多人的尊重。但最近小痴看起来非常的不开心。

(五)

平时海哥和小痴关系非常好,小海最先发现这个情况。在一次周末,海哥约小痴出来喝酒。随后海哥问到:“痴哥最近有心事吗?”小痴把眼前的啤酒一口闷下,随后说到:“哎,也没什么大事,就是家里人看我年龄大了,一直叫我去相亲。你说我年轻时是多么潇洒,如今就只能去相亲,寻找我的爱情吗?”小痴说完,又喝了一大口啤酒。

(六)

海哥随忙说道:“痴哥你最近可把我吓坏了,我还以为是什么事,让你最近如此心神不定。以痴哥英俊的长相,还要去相亲?在说现在谁还找媒婆相亲啊,如今相亲网站多的去了,比如最近很火的「我主良缘」。这个网站,还可以根据你想要的条件,来筛选自己心仪的对象。比如按痴哥这个条件来,对方身高至少要 170 吧,教育程度本科,月薪 5000,最好是在北京,因为痴哥马上要去北京发展。对象对于痴哥来说不是个事。以后痴哥在北京发展,可要带带小弟我啊”

果然还是海哥最了解小痴,这一番话让小痴心情好了许多,开心的跟着海哥喝着酒。回到家中,小痴就利用 Python 默默的爬取「我主良缘」。

Requests 库爬取「我主良缘」网站


今天的程序就是利用 requests 库进行「我主良缘」网站的爬取。我的代码是利用 requests 库进行网站的抓取,在利用 mongo 数据库进行数据的保存。大家可以对着两个版本的代码进行学习。

程序抓取结果


运行程序会把网站上,对应的交友信息抓取下来,保存到 mongodb 数据库中。并单独把图片保存到本地的 images2 文件夹中。

程序结构

程序逻辑

利用 requests 库对目标站点进行数据的抓取。

在对抓取的数据进行处理,筛选出自己想要的数据信息。

最后保存相应的数据信息到数据库中。

数据请求

'''
解析网站
'''
def get_one(page, startage, endage, gender, startheight, endheight, salary):
    # 设置请求头
    headers = {
        'Referer': 'http://www.lovewzly.com/jiaoyou.html',
        'User - Agent': 'Mozilla / 5.0(Windows NT 10.0;WOW64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 66.0.3359.170Safari / 537.36'
    }
    # 设置请求参数
    params = {
        # 页数
        'page':page,
        # 起始年龄
        'startage': startage,
        # 截止年龄
        'endage':endage,
        # 性别
        'gender':gender,
        # 所在城市的编号
        'cityid':'52',
        # 起始身高
        'startheight':startheight,
        # 终止身高
        'endheight':endheight,
        # 是否结婚
        'marry':'1',
        # 教育水平
        'educatin':'40',
        # 工资薪水
        'salary':salary
    }
    # 网站链接
    base_url = 'http://www.lovewzly.com/api/user/pc/list/search?'
    # 拼接请求参数
    url = base_url + urlencode(params)
    # 调试信息
    print(url)
    while True:
        try:
            # 利用 requests 库请求目标地址
            response = requests.get(url, headers=headers)
            # 判断请求的结果是否有效
            if response.status_code == 200:
                # 返回 json 数据
                return response.json()
        except ConnectionError:
            return None

字段提取

'''
# 解析数据
def get_person(json):
    # 判断 json 是否为空
    if json:
        # 获取 data 数据
        data = json.get('data').get('list')
    else:
        # 输出错误信息
        print('没有符合你的条件')
    if data:
        # 循环遍历 data 数据,重新构造新的字典
        for person in data:
            yield {
                # 用户 id
                'userid':person.get('userid'),
                # 用户名
                'username': person.get('username'),
                # 性别
                'gender': person.get('gender'),
                # 出现日期
                'birthdayyear': person.get('birthdayyear'),
                # 身高
                'height': person.get('height'),
                # 省份
                'province': person.get('province'),
                # 教育程度
                'education': person.get('education'),
                # 签名
                'monolog': person.get('monolog'),
                # 图片
                'avatar':person.get('avatar')
            }

数据库存放

'''
保存数据到 monogo 数据库
'''
def save_to_monogo(result):
    try:
        # 判断保存是否成功
        if db[MONGO_TABLE].insert(result):
            # 保存成功输入相应信息
            print('存储到 MONGODB 成功', result)
    except Exception:
        # 保存失败输出相应信息
        print('存储到 MONGODB 失败', result)

完整代码已上传到 Github 上,关注公众号「痴海」,回复「python对象」即可获取。感兴趣的同学可以自行下载查看,公众号所有的代码也都会保存到这个项目里,不妨给个 star。

在写完代码以后,我还去搜索下帝都的男生。搜索条件是:身高 180,年龄 25,月薪 1.5W。然后就得到这样的结果。

果然男生相对来说打扮比较普通,还是妹子的好看些。更多有趣的内容,可以自己运行代码,看看你的心仪的对象都会有哪些。


公众号「痴海」,每天分享 Python 干货