前言
到了一定年龄,父母可能会催你找女朋友,结婚。
大多数的父母催婚,是父母渐渐老了,想让你找个人照顾你,有热饭吃,生病了有人照顾。在外面不被人欺负。
当然,也有一部分来自周围人的压力,跟你同龄的孩子差不多都结婚了,你父母的压力自然就来了。跟父母给孩子报课外辅导班的心理一样。
很多时候让你成家立业,在父母看来,帮你完成成家的任务,父母的一大任务算是完成了。不然单身的男女每个家,在父母心里始终是个心结,这种心情,小城镇特别的突出。
父母帮你完成了结婚的任务,不需要像以前那样辛辛苦苦奔波赚钱了。
催婚,第一,是父母对你的关心。
第二,是父母的私心(虽然有时候这种私心是被动的私心)
第三,父母养育任务的完成,要开始享受生活了。

所以,今天作者就来爬取下交友网站,看看小姐姐的择偶观。
结合博主的年龄
所以博主的筛选条件是
重庆,年龄21-27岁,未婚小姐姐。
大姐姐们的择偶观我并不关心。
对技术不感兴趣的,下拉到后面看结论。

技术部分

网站选取

世纪佳缘得到的信息如图,对择偶条件未怎么提及。所以该网站放弃。

世纪佳缘爬取代码

```python
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Author: yudengwu(余登武)
# @Date  : 2021/2/15
#@email:1344732766@qq.com
# -*- coding: utf-8 -*-import requests
import json
import pandas as pd
from requests.exceptions import ReadTimeout, ConnectionError, RequestException
def get_page(url):#获取请求并返回解析页面,'''参数:url :目标网页的 url返回:目标网页的 html 内容'''headers = {'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8','user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3947.100 Safari/537.36','Cookie': 'guider_quick_search=on; SESSION_HASH=0ea6881596be6958acab86601f12c97fdc211b1d; jy_refer=www.baidu.com; accessID=20210215105936945652; user_access=1; Qs_lvt_336351=1613358012; _gscu_1380850711=133580687kjmry14; _gscbrs_1380850711=1; COMMON_HASH=03ccf3f907328da89142987423a9215b; stadate1=271766541; myloc=50%7C5001; myage=25; mysex=m; myuid=271766541; myincome=40; Qs_pv_336351=1107463009737048200%2C2408036345389375500%2C1494836557490850800%2C3408124253653422600%2C1396723355418865400; PHPSESSID=3699194bbb0a1fb7c7f3c46c813f162c; pop_avatar=1; PROFILE=272766541%3A%25E6%2580%25BB%25E8%25A3%2581%25E4%25BD%2599%3Am%3Aimages1.jyimg.com%2Fw4%2Fglobal%2Fi%3A0%3A%3A1%3Azwzp_m.jpg%3A1%3A1%3A50%3A10%3A3; main_search:272766541=%7C%7C%7C00; RAW_HASH=PBalPtMnGoSGsXuyDvb3BTznuvyG8MajCm%2AWrcDW%2Av1YkfseTjLUbLLCCHeQJ0B25bjAa%2Ak4IbveQI5X4uzQhvvD3qbP6ajy90MEyOpZDZzznTM.; is_searchv2=1; pop_1557218166=1613364302492; pop_time=1613363558012'}try:response = requests.get(url, headers=headers, timeout=10)response.encoding = 'unicode_escape'  # 加编码,重要!转换为字符串编码,read()得到的是byte格式的if response.status_code == 200:return response.textexcept ReadTimeout:  # 超时#get_page(url)#如果是这行则是递归调用函数return Noneexcept ConnectionError:  # 网络问题#get_page(url)return Noneexcept RequestException:  # 其他问题#get_page(url)return None
#解析网页def pase_page(url):html = get_page(url)'''功能:尝试解析其结构,获取所需内容并保存进CSV'''if html is not None:html = str(html)s = json.loads(html,strict=False)  # ka添加参数 strict=False。否则会出现 错误信息如json.decoder.JSONDecodeError: Invalid control character at: line 1 column 4007 (char 4006)usrinfolist = []  # 存放一页内所有小姐姐的信息for key in s['userInfo']:personlist = []  # 存放一个人的信息uid = key['uid']nickname = key['nickname']sex = key['sex']age = key['age']work_location = key['work_location']height = key['height']education = key['education']marriage = key['marriage']income = key['income']matchCondition = key['matchCondition']shortnote = key['shortnote']image = key['image']personlist.append(uid)personlist.append(nickname)personlist.append(sex)personlist.append(age)personlist.append(work_location)personlist.append(height)personlist.append(education)personlist.append(matchCondition)personlist.append(marriage)personlist.append(income)personlist.append(shortnote)personlist.append(image)usrinfolist.append(personlist)dataframe = pd.DataFrame(usrinfolist)dataframe.to_csv('世纪佳缘小姐姐信息.csv', mode='a+', index=False, header=False)  # mode='a+'追加写入print('当前页数{0}'.format(page))else:print('解析失败')import threading
if __name__ == '__main__':for page in range(1, 5000,3):url1 = 'http://search.jiayuan.com/v2/search_v2.php?key=&sex=f&stc=2:18.24,3:155.170,23:1&sn=default&sv=1&p=%s&f=select'+str(page)#pase_page(url1)url2 = 'http://search.jiayuan.com/v2/search_v2.php?key=&sex=f&stc=2:18.24,3:155.170,23:1&sn=default&sv=1&p=%s&f=select' + str(page+1)url3 = 'http://search.jiayuan.com/v2/search_v2.php?key=&sex=f&stc=2:18.24,3:155.170,23:1&sn=default&sv=1&p=%s&f=select' + str(page + 2)t1 = threading.Thread(target=pase_page, kwargs={'url':url1})  # 线程1t2 = threading.Thread(target=pase_page, kwargs={'url':url2})  # 线程2t3 = threading.Thread(target=pase_page, kwargs={'url':url3})  # 线程3t1.start()t2.start()t3.start()

所以我爬取其他网站
http://www.lovewzly.com/jiaoyou.html

网站主页图

点开一个小姐姐,发现有择偶观信息可以提取。
发现该小姐姐的网址链接为http://www.lovewzly.com/user/4270839.html

在主页中查看源码,我们可以发现小姐姐的网页地址链接可以从主页图data-uid分析得到。

于是我们可以认为,爬取主页,得到所有小姐姐的data-uid,然后遍历每一个data-uid,根据data-uid拼接小姐姐网页的地址。然后分析该小姐姐的择偶观。

网页分析
从sources,我们可以找到城市年龄,星座等的数字标签。这些我们用来自己动手写函数,用于筛选。

网页链接如图

下拉查看参数。因为我只勾选了几个条件,所以网页链接呈现出的参数少。

查看数据,如图

从上发现数据没有我想要的择偶要求。 所以我在此网页只取userid。然后构建小姐姐网页地址如http://www.lovewzly.com/user/4276242.html,再从该网页中提取小姐姐的信息和择偶条件.

代码1:根据条件提取小姐姐的userid
本次编程语言:python。
其他语言也在学,但尚未成长为我的主语言,还不能杀敌。

该代码中我只设置了筛选条件:小姐姐年龄,性别,城市,是否婚配。

import requests
from requests.exceptions import ReadTimeout, ConnectionError, RequestException
import pandas as pd
import numpy as np
def set_age():age = int(input("请输入对方的期望年龄:"))  # 强制字符串转整型if 21 <= age <= 30:startage = 21endage = 30elif 31 <= age <= 40:startage = 31endage = 40return startage, endage
# 设置性别
def set_sex():sex = input("请输入对方的期望性别:")if sex == '男':gender = 1elif sex == '女':gender = 2return gender
# 设置城市
def set_city():city = input("请输入对方的期望城市:")if city == '北京':cityid = 52elif city == '深圳':cityid = 77elif city == '广州':cityid = 76elif city == '福州':cityid = 53elif city == '厦门':cityid = 60elif city == '杭州':cityid = 383elif city == '青岛':cityid = 284elif city == '长沙':cityid = 197elif city == '济南':cityid = 283elif city == '南京':cityid = 220elif city == '香港':cityid = 395elif city == '上海':cityid = 321elif city == '成都':cityid = 322elif city == '武汉':cityid = 180elif city == '苏州':cityid = 221elif city == '重庆':cityid = 394elif city == '香港':cityid = 395elif city == '南昌':cityid = 233elif city == '南宁':cityid = 97elif city == '合肥':cityid = 3401elif city == '郑州':cityid = 149elif city == '佛山':cityid = 80elif city == '珠海':cityid = 96elif city == '昆明':cityid = 397elif city == '石家庄':cityid = 138elif city == '天津':cityid = 143return cityid#是否婚配
def marry():print('请输入是否婚配。输入字符如:未婚,离异,丧偶')marry= input("输入是否婚配:")if marry == '未婚':marryid=1elif marry=='离异':marryid=3elif marry=='丧偶':marryid=2return marryid# 解析网页
def get_info(page, startage, endage, gender, cityid, marryid):#   http://www.lovewzly.com/api/user/pc/list/search?startage=21&endage=30&gender=2&cityid=394&marry=1&page=1#   字符串格式化  %surl = 'http://www.lovewzly.com/api/user/pc/list/search?startage={}&endage={}&gender={}&cityid={}&marry={}&page={}'.format(startage, endage, gender, cityid, marryid, page)try:# response = requests.get(url).json()    #简单写法response = requests.get(url)if response.status_code == 200:result = response.json()return resultexcept ReadTimeout:  # 超时print('Timeout')return Noneexcept ConnectionError:  # 网络问题print('Connection error')return Noneexcept RequestException:  # 其他问题print('Error')return None
#主函数
# 主程序
def main():print("请输入你的筛选条件,开始本次姻缘:")# 调用上面编写的函数startage, endage = set_age()#年龄gender = set_sex()#性别cityid = set_city()#城市marryid=marry()#是否婚配for i in range(1, 100):  # 取1~100的内容。大多数情况下没有100页# 获取抓取到的json数据json = get_info(i, startage, endage, gender, cityid,marryid)# print(json['data']['list'])# 保存图片for item in json['data']['list']:userid = item['userid']# print(userid)userid = np.array(userid)userid = pd.Series(userid)userid.to_csv('小姐姐信息userid.csv', mode='a+', index=False, header=False)  # # mode='a+'追加写入if __name__ =='__main__':main()print('读取结束')

程序图

结果图。在此条件下,在该网站只找到454个重庆小姐姐。

再次运行程序,目标城市:成都,上海。将所有结果整合成一张

代码2:根据userid提取小姐姐的个人信息和择偶观
选项一个小姐姐单击,审查元素,发现信息直接显示在网页源代码中,没有经过渲染等。所以该部分信息提取没有难度,不再细讲。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Author: yudengwu(余登武)
# @Date  : 2021/2/15
#@email:1344732766@qq.com
import numpy as np
import pandas as pd
import requests
from bs4 import BeautifulSoup
import re
def get_page(url):#获取请求并返回解析页面,offest,keyword为可变参数headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36'}try:response = requests.get(url,headers = headers,timeout=10)response.encoding = 'utf-8'  # 加编码,重要!转换为字符串编码,read()得到的是byte格式的if response.status_code == 200 :return response.textexcept ConnectionError:print('程序错误')return None#解析网页def pase_page(url,i):html = get_page(url)html = str(html)if html is not None:soup = BeautifulSoup(html, 'lxml')"----------------------------------小姐姐信息------------------------------""--昵称--"nickname=soup.select('.view.fl.c6 .nick.c3e')nickname=''.join([i.get_text() for i in nickname])"--年龄--"age=soup.select('.f18.c3e.p2 .age.s1')age=''.join(i.get_text()for i in age)"--身高--"height=soup.select('.f18.c3e.p2 .height')height=''.join(i.get_text()for i in height)"--学历--"education=soup.select('.f18.c3e.p2 .education')education=''.join(i.get_text()for i in education)"--现居地--"present_address=soup.select('div.cm-wrapin.user-warpin > div.clearfix > div.users-left > div:nth-child(1) > div.view.fl.c6 > ul > li:nth-child(1) > span')present_address=''.join(i.get_text() for i in present_address)"--职业--"professional=soup.select('div.cm-wrapin.user-warpin > div.clearfix > div.users-left > div:nth-child(1) > div.view.fl.c6 > ul > li:nth-child(7) > span')professional=''.join(i.get_text() for i in professional)"--收入--"income=soup.select('div.cm-wrapin.user-warpin > div.clearfix > div.users-left > div:nth-child(1) > div.view.fl.c6 > ul > li:nth-child(8) > span')income=''.join(i.get_text()for i in income)"--个人照链接--"photo=soup.select('div.cm-wrapin.user-warpin > div.clearfix > div.users-left > div:nth-child(1) > div.photo.fl > div.imgwrap > ul > li:nth-child(1) > img')photo=str(photo)pat1 = '.+src="(.+)"'photo=re.compile(pat1).findall(photo)"----------------------------------择偶要求------------------------------""--是否介意对方抽烟--"smoking=soup.select('div.cm-wrapin.user-warpin > div.clearfix > div.users-left > div.clearfix.user-detail > div:nth-child(2) > div.body > ul > li:nth-child(2)')smoking=''.join(i.get_text() for i in smoking)"--是否介意对方喝酒--"drinking = soup.select('div.cm-wrapin.user-warpin > div.clearfix > div.users-left > div.clearfix.user-detail > div:nth-child(2) > div.body > ul > li:nth-child(4)')drinking=''.join(i.get_text() for i in drinking)"--是否介意对方有子女--"children = soup.select('div.cm-wrapin.user-warpin > div.clearfix > div.users-left > div.clearfix.user-detail > div:nth-child(2) > div.body > ul > li:nth-child(3)')children=''.join(i.get_text()for i in children)"--择偶年龄--"age_man = soup.select('#userid > div.cm-wrapin.user-warpin > div.clearfix > div.users-left > div.clearfix.user-detail > div:nth-child(3) > div.body > ul > li:nth-child(1)')age_man=''.join(i.get_text()for i in age_man)"--择偶身高--"height_man = soup.select('#userid > div.cm-wrapin.user-warpin > div.clearfix > div.users-left > div.clearfix.user-detail > div:nth-child(3) > div.body > ul > li:nth-child(2)')height_man=''.join(i.get_text()for i in height_man)"--择偶月薪--"money_man = soup.select('#userid > div.cm-wrapin.user-warpin > div.clearfix > div.users-left > div.clearfix.user-detail > div:nth-child(3) > div.body > ul > li:nth-child(3)')money_man=''.join(i.get_text()for i in money_man)"--择偶学历--"study_man = soup.select('div.cm-wrapin.user-warpin > div.clearfix > div.users-left > div.clearfix.user-detail > div:nth-child(3) > div.body > ul > li:nth-child(4)')study_man=''.join(i.get_text()for i in study_man)"--择偶职业--"professional_man = soup.select('#userid > div.cm-wrapin.user-warpin > div.clearfix > div.users-left > div.clearfix.user-detail > div:nth-child(3) > div.body > ul > li:nth-child(8)')professional_man=''.join(i.get_text() for i in professional_man)"--择偶现居地--"present_addressman = soup.select('#userid > div.cm-wrapin.user-warpin > div.clearfix > div.users-left > div.clearfix.user-detail > div:nth-child(3) > div.body > ul > li:nth-child(6)')present_addressman=''.join(i.get_text()for i in present_addressman)"----------------------------------所有信息写入表格------------------------------"information = [nickname,age,height,education,present_address,professional,income,photo,smoking,drinking,children,age_man,height_man,money_man,study_man,professional_man, present_addressman]information = np.array(information)information = information.reshape(-1, 17)information = pd.DataFrame(information,columns=[nickname,age,height,education,present_address,professional,income,photo,smoking,drinking,children,age_man,height_man,money_man,study_man,professional_man, present_addressman])if i==0:information.to_csv('相亲网站小姐姐数据.csv', mode='a+', index=False, header=0)  # mode='a+'追加写入else:information.to_csv('相亲网站小姐姐数据.csv', mode='a+', index=False, header=False)  # mode='a+'追加写入else:print('解析错误')def main():f = open('小姐姐信息.txt', encoding='gbk')txt = []for line in f:txt.append(line.strip())#txt = np.array(txt)[0]i=0for userid in txt:  # 遍历useridprint(i)#userid=4283676base_url = 'http://www.lovewzly.com/user/'+str(userid)+'.html'pase_page(base_url,i)i+=1#print(html)
if __name__ =='__main__':main()

得到的数据如下,2500多条数据

数据分析部分

数据分析部分,我懒得写代码了,有些累了。
简单操作,通过表格的数据透视表来简单分析下。
数据透视表教程

对对象工资分析
在有工资字段内,58.78%的小姐姐要求对象月入1万以上。
(钱果然还是万能的,前段时间听说离我很近的一个成功企业家出轨一个比他女儿稍微大点的小姐姐,禽兽呀)

单身小姐姐的学历分布
以本科和专科生居多。果然学历越低越不容易单身。

查看各个学历阶段小姐姐对对象工资要求
本科生和专科生要求对象月入1万的人数为294,188

查看小姐姐与对象工资的区别
横坐标为小姐姐的工资,纵坐标为对象工资统计个数。能月收入5千到1万的,基本都要求对象月收入1万以上。

小姐姐对象学历要求
横坐标为小姐姐学历,纵坐标为对象学历

y轴为小姐姐学历,x轴为对象。学历为本科的小姐姐还有不少人要求对象为初高中专科。

小姐姐对象身高要求
字段太多了,简单截图看下,几个比较大的值170-180


通过此文,我发现了小姐姐们的择偶观。
此刻的我很膨胀,我觉得她们都配不上我。

爬虫实战:过年你被催婚啦吗?爬取相亲网站,看看当下年轻小姐姐的择偶观。相关推荐

  1. 过年你被催婚了吗?爬取相亲网站,看看当下年轻小姐姐的择偶观

    到了一定年龄,父母可能会催你找女朋友,结婚. 大多数的父母催婚,是父母渐渐老了,想让你找个人照顾你,有热饭吃,生病了有人照顾.在外面不被人欺负. 当然,也有一部分来自周围人的压力,跟你同龄的孩子差不多 ...

  2. python爬虫实战之图灵社区图书信息的爬取(找了久,才找到一个比较好爬取的网站)

    python爬虫实战之图灵社区图书信息的爬取 程序的描述 目标 获取图灵社区(https://www.ituring.com.cn/book)中40本图书的书名 将获取的信息以列表的形式输出到屏幕上, ...

  3. 网络爬虫实战:英雄联盟全人物图片爬取

    学习爬虫也有几天了,是时候实战实战了,所以就试着爬取了所有英雄联盟皮肤的图片,下面就是最后爬取的所有原画,真的炒鸡兴奋!(虽然我知道这个超级简单,我这个菜鸡都能写出来

  4. 【爬虫实战】Python 自制天气预报程序!爬取全国天气网

    学会了爬虫,让我们自制一个天气预报的爬虫吧! 需求分析 1.用 requests 爬取 全国天气网 的网页源代码: 2.用 pyquery 解析网页源代码,取得天气情况信息的节点: 3.用 xlwt ...

  5. 【记录爬虫实战过程】入门学习·详细过程·爬取天气信息并通过pyecharts进行可视化展示1

    文章目录 前言 正文 1.导入对应模块 2.确定爬取的网站 3.得到数据 4.数据处理 5.将所得数据写入CSV 完整代码 补充:数据可视化 前言 入门学习这个部分是跟着b站教学视频做的,记录了所有过 ...

  6. Python爬虫实战03:用Selenium模拟浏览器爬取淘宝美食

    1 目标站点分析 淘宝页面信息很复杂的,含有各种请求参数和加密参数,如果直接请求或者分析Ajax请求的话会很繁琐.所以我们可以用Selenium来驱动浏览器模拟点击来爬取淘宝的信息.这样我们只要关系操 ...

  7. 【爬虫实战】手把手教你用Python爬取某图网4000张图片

    相信很多设计小伙伴有好的灵感,但是没有好的设计素材,今天它来了.摄图网4000张设计素材,取之不尽,如下图所示: 好了,废话不多说,开始用Python采集. 01需求分析 采集摄图网的素材图片,目标网 ...

  8. scrapy爬虫实战——米哈游官网数据爬取

    项目总览 前言 项目建立 爬虫代码编写 爬虫运行 导出到Excel 后记 前言 scrapy是一个强大的爬虫框架,熟练地使用它几乎可以随心所欲地抓取任何网页上想要获得的数据.笔者初学爬虫,需要项目练手 ...

  9. (九)python网络爬虫(理论+实战)——爬虫实战:指定关键词的百度新闻爬取

    目录 4.5 动手写网络爬虫--指定关键词的百度新闻爬取(实战) 序言 本人从事爬虫相关工作已8年以上,从一个小白到能够熟练使用爬虫,中间也走了些弯路,希望以自身的学习经历,让大家能够轻而易举的,快速 ...

最新文章

  1. 30岁学python编程_朋友问我,你都30岁了学编程来得及吗
  2. Hello World, S/4HANA for Customer Management 1.0 1
  3. python之异常处理_Python之异常处理
  4. ROS笔记(3) Melodic 的安装和配置
  5. UkrGuru.SqlJson——你的SQL Server和.NET 5之间的链接
  6. 漫画:一文学会面试中常问的 IO 问题!
  7. 2018.12.2 频谱分析
  8. BGP路径属性分类与实验(华为设备)
  9. Java JDK 配置环境变量
  10. pandas如何保存在excel里面_别找了,这是 Pandas 最详细教程了
  11. C 语言中的结构体(数据结构)
  12. My Eighty-second Page - 打家劫舍Ⅱ - By Nicolas
  13. ar5418无线网卡驱动
  14. 计算机文化基础案例教程第三版答案,计算机文化基础案例教程教学课件作者第3版谭宁教学课件素材排骨做法.doc...
  15. 九龙证券|次新股叠加智慧交通+信创+数字经济概念,开盘冲涨停!
  16. 《灵魂的事-节选》(史铁生)
  17. Winsows Server 2019 安装 PostgreSQL
  18. == 与 === 的区别
  19. 一招教你用Kettle整合大数据和Hive,HBase的环境!
  20. pytest--fixture的使用(前置、后置)

热门文章

  1. php mysql服务器配置_配置最新的PHP加MYSQL服务器
  2. python面向对象继承_Python 面向对象 --- 继承
  3. 算法系列之赫夫曼树的精解【构造流程及原理分析】
  4. activiti7可以两个网关连着用吗
  5. 给echarts添加筛选时间控件时,控件不显示,并设置数据库无数据时echarts模块显示暂无数据
  6. springboot项目中一个实体类引用其它实体类的字段并显示到页面上
  7. Spring Boot——基于AOP的HTTP操作日志解决方案
  8. PHP——获取当前日期时间错误解决方案(PHP当前时区设置)
  9. C/C++控制台应用程序——画三角形、圆、直线、矩形
  10. Uniform String