python是一种面向对象的高级语言_爬了世纪佳缘后发现了一个秘密,世纪佳缘找对象靠谱吗?...
今天在知乎上看到一个关于【世纪佳缘找对象靠谱吗?】的讨论,其中关注的人有 1903,被浏览了 1940753 次,355 个回答中大多数都是不靠谱。用 Python 爬取世纪佳缘的数据是否能证明它的不靠谱?
数据抓取
在 PC 端打开世纪佳缘网站,搜索 20 到 30 岁、不限地区的女朋友
翻了几页找到一个 search_v2.php 的链接,它的返回值是一个不规则的 json 串,其中包含了昵称、性别、是否婚配、匹配条件等等
点开 Hearders 拉到最下面,在它的参数中 sex 是性别、stc 是年龄、p 是分页、listStyle 是有照片
通过 url + 参数的 get 方式,抓取了 10000 页的数据总共 240116
需要安装的模块有 openpyxl,用于过滤特殊的字符
# coding:utf-8
import csv
import json
import requests
from openpyxl.cell.cell import ILLEGAL_CHARACTERS_RE
import re
line_index = 0
def fetchURL(url):
headers = {
'accept': '*/*',
'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',
'Cookie': 'guider_quick_search=on; accessID=20201021004216238222; PHPSESSID=11117cc60f4dcafd131b69d542987a46; is_searchv2=1; SESSION_HASH=8f93eeb87a87af01198f418aa59bccad9dbe5c13; user_access=1; Qs_lvt_336351=1603457224; Qs_pv_336351=4391272815204901400%2C3043552944961503700'
}
r = requests.get(url, headers=headers)
r.raise_for_status()
return r.text.encode("gbk", 'ignore').decode("gbk", "ignore")
def parseHtml(html):
html = html.replace('', '')
html = ILLEGAL_CHARACTERS_RE.sub(r'', html)
s = json.loads(html,strict=False)
global line_index
userInfo = []
for key in s['userInfo']:
line_index = line_index + 1
a = (key['uid'],key['nickname'],key['age'],key['work_location'],key['height'],key['education'],key['matchCondition'],key['marriage'],key['shortnote'].replace('n',' '))
userInfo.append(a)
with open('sjjy.csv', 'a', newline='') as f:
writer = csv.writer(f)
writer.writerows(userInfo)
if __name__ == '__main__':
for i in range(1, 10000):
url = 'http://search.jiayuan.com/v2/search_v2.php?key=&sex=f&stc=23:1,2:20.30&sn=default&sv=1&p=' + str(i) + '&f=select&listStyle=bigPhoto'
html = fetchURL(url)
print(str(i) + '页' + str(len(html)) + '*********' * 20)
parseHtml(html)
发现秘密
在处理数据去掉重复的时候发现有好多重复的,还以为是代码写的有问题呢,查了好久的 bug 最后才发现网站在 100 页只有的数据有好多重复的,下面两个图分别是 110 页数据和 111 页数据,是不是有很多熟面孔。
110 页数据
111 页数据
过滤重复后的数据只剩下 1872 了,这个水分还真大
def filterData():
filter = []
csv_reader = csv.reader(open("sjjy.csv", encoding='gbk'))
i = 0
for row in csv_reader:
i = i + 1
print('正在处理:' + str(i) + '行')
if row[0] not in filter:
filter.append(row[0])
print(len(filter))
总结
世纪佳缘的数据告诉我们网上交友需谨慎。用好 Python 走遍网络都不怕。
相关文章:

使用邮件规则,将收到的邮件进行分类
随着工作的进行,我们经常会发现邮箱里一大堆各种各样的邮件,而要从中找到指定类型的邮件,只能每次都进行一次搜索。但是,经常这样搜索,先不说效率如何,它肯定会对我们的工作进行一些影响。 在这里ÿ…

多个CALayer的联动
在如何通过手势捕获CALayer基础上做了个示例,两个CALayer的联动,当拖动左侧的Layer的时候,右侧的Layer随动。因为右侧的动画没有关闭,有延迟,产生随动的效果。如果不想延迟,可参考拖动动画的问题及解决。 在…

在不允许新建对象的条件下,将list中指定条件的值去除
package com.liujianwang.learning;import java.util.LinkedList; import java.util.List;public class ListTest {public static void main(String[] args) {/** 在不允许新建对象的条件下,将list中指定条件的值去除。* 例如:移除list中值大于6的元素。…

openlayers map获取全部feature_tf2.0基础-tf.data与tf.feature_column
7.2.1 tf.data使用 tf.data API 可以轻松处理大量数据、不同的数据格式以及复杂的转换。tf.data API 在 TensorFlow 中引入了两个新的抽象类:tf.data.Dataset 表示一系列元素,其中每个元素包含一个或多个 Tensor 对象。:创建来源(…

项目活动定义 概述
项目活动定义概述 项目活动定义是确认和描述项目的特定活动,它把项目的组成要素加以细分为可管理的更小部分,以便更好地管理和控制。 确定计划活动需要确定和记载计划完成的工作。活动定义过程识别处于工作分解结构(WBS)最下层,叫…

如何判断CPU、内存、磁盘的性能瓶颈?
1.如何判断CPU、内存、磁盘的瓶颈? CPU瓶颈 1) 查看CPU利用率。建议CPU指标如下 a) User Time:65%~70% b) System Time:30%~35% c) Idle:0%~5% 如果us,sy高于这个指标可以判断CPU有瓶颈 使用top…

一个苹果手机移动电源也能让他拽得跟二五八万似的
一个苹果手机移动电源也能让他拽得跟二五八万似的~~低调一定是美德,尤其是在见过各种JP人类之后,我真心在心里呐喊,你丫稍微低调一点会死啊!!!是的,这个世界上不可能不存在拽得调子高的人&#…

Confluence 6 配置服务器基础地址
服务器基础地址(Server Base URL)是用户访问 Confluence 的 URL 地址。这个基础的 URL 地址必须与你在浏览器中访问 Confluence 中的地址。 Confluence 将会在安装的时候自动侦测基础的 URL,但是如果你的站点 URL 修改了,或者你的…

python gui编程框架添加工具栏_python gui编程,我是初学者。用tk,制作下拉菜单的command不分我想打开另一个界面。如和解决,求解!!...
展开全部 from tkinter import * def new_file(): print("Open new file") def open_file(): print("Open existing file") def stub_action(): print("Menu select") def makeCommandMenu(): CmdBtn Menubutton(mBar, textButton Commands, un…

这样在一个sql里完成更新和插入,只用一次数据库连接,效率提高了
代码如下,请给出具体修改代码 public void AddCategory(string nCategoryName, int nImgId, int nBelongToId, int nShopId, int nSortId) { int CategoryId 0; string cmdText "Select top 1 CategoryId from ProductCategory where Categ…

USACO Section 1.5 Checker Challenge
经典八皇后问题 只写的最基本的,对称剪枝,位运算都没有用,以后有时间再看 1 /* ID:linyvxi1 2 PROB:checker 3 LANG:C 4 */ 5 #include <stdio.h> 6 #include <stdlib.h> 7 #include <string.h> 8 int N; 9 int tota…

使用JavaScript实现在页面上所有内容加载完之前一直显示loading...页面
Html 1 <body class"is-loading">2 <div class"curtain">3 <div class"loader">4 loading...5 </div>6 </div> 7 <div>8 <!--这里 正文 -->9 </div> 10 </body> …

SpringCloud + Consul服务注册中心 + gateway网关
1 启动Consul 2 创建springcloud-consul项目及三个子模块 2.1 数据模块consul-producer 2.2 数据消费模块consul-consumer 2.3 gateway网关模块 3 测试及项目下载 1、首先安装Consul并启动Consul,端口号为8500 2、创建一个maven项目springcloud-consul࿰…

MySql按日期进行统计(前一天、本周、某一天)[转载]
转自:http://www.yovisun.me/mysql-date-statistics.html 在mysql数据库中,常常会遇到统计当天的内容。例如,在user表中,日期字段为:log_time 统计当天 sql语句为: select * from user where date(log_time…

右键新建里面没有word和excel_Windows10系统下如何将Sublime Text3添加到右键快捷菜单?...
由于本人用的Sublime Text是汉化绿色版的,不仅仅是因为绿色版免去了安装步骤 解压即用,还因为里面整合了常用的高效率必备插件,但是发现右键竟然没有用Sublime Text打开的快捷菜单,这对于我使用Sublime Text 打开一些代码文档会有…

NOI2011 道路修建
题目连接:http://221.192.240.123:8586/JudgeOnline/showproblem?problem_id1670 题意自便。 相关知识:树的遍历,非递归DFS写法。 分析:因为树的边给定,所以从哪个点开始求都是一样的。递归求出每个点的的子树个数&am…

Wiener Filter
假设分别有两个WSS process:$x[n]$,$y[n]$,这两个process之间存在某种关系,并且我们也了解这种关系。现在我们手头上有process $x[n]$,目的是要设计一个LTI系统,使得系统输出$y[n]$,不过$y[n]$是…
c++ string replace_JAVA应用程序开发之String类常用API
【本文详细介绍了JAVA应用开发中的String类常用API,欢迎读者朋友们阅读、转发和收藏!】1 基本概念API ( Application Interface 应用程序接口)是类中提供的接口,类库是类的集合。在 Java 语言中可以通过 import 关键字导入相关的类࿰…

强大的Charles的使用,强大的flutter1.9
<a href"http://www.cocoachina.com/articles/37551?filterios"> 强大的Charles强大的flutter转载于:https://www.cnblogs.com/henusyj-1314/p/11586350.html

多层次架构设计前言
因为 php 原生来就是要辅助 HTML 的产生,所以程式码跟 HTML 码混在一起写,正是 PHP 的特点也是优点,但正也造成很多分工上的问题,也就是你在写 php 的同时,你也必须很了解 前端、后端技能,像是 DataBase, H…

在java的程序里date类型比较大小
Date a; Date b; 假设现在你已经实例化了a和b a.after(b)返回一个boolean,如果a的时间在b之后(不包括等于)返回trueb.before(a)返回一个boolean,如果b的时间在a之前(不包括等于)返回truea.equals(b)返回一个…

linux安装ActiveMQ
1. 下载: # wget https://archive.apache.org/dist/activemq/5.14.0/apache-activemq-5.14.0-bin.tar.gz 2. 解压: # tar zxvf apache-activemq-5.14.0-bin.tar.gz -C ../ 3. 配置环境变量: # vim /etc/profile 4. 启动: # active…

用递归来判断输入的字符串是否是回文
设计思路:导入Scanner类输入字符串,再将输入的字符串转化为字符数组,然后从字符串左右两侧依次比较字符chu是否相同,若相同递归返回读取的字符个数,若返回字符的个数输入字符串的长度,则输出该字符串是回文…

js高级程序设计之跨浏览器事件处理
//事件 var EventUtil { //添加事件 addHandler:function (element, type, handler) { //element:DOM对象,type:事件类型,handler:事件函数 if (element.addEventListener) { //是否存在DOM2级方法 element.addEventListener(type, handler, false); } else if (element.attac…

在python中使用关键字define定义函数_python自定义函数def的应用详解
这里是三岁,来和大家唠唠自定义函数,这一个神奇的东西,带大家白话玩转自定义函数 自定义函数,编程里面的精髓! def 自定义函数的必要函数:def 使用方法:def 函数名(参数1,参数2&…

在Win7 + VMware7下安装Xcode 4
我的Mac OS X是在Win7下虚拟机上安装的,我先把xcode_4.0.2_and_ios_sdk_4.3.dmg下载到Win7下某个目录下,然后共享该目录,然后启动Mac OS X,开始安装:1. 找到Win7下xcode_4.0.2_and_ios_sdk_4.3.dmg所在的共享文件夹&am…

plsql误删除数据,提交事务后如何找回?
select *from tbs_rep_template as of timestamp to_timestamp(2018-07-12 14:23:00, yyyy-mm-dd hh24:mi:ss)where tplname like %工业管道定期检验报告%;--其中2018-07-12 14:23:00为:误删数据的大致时刻的提前时间转载于:https://www.cnblogs.com/demon09/p/9300756.html

配置flutter For IOS
https://www.cnblogs.com/lovestarfish/p/10628205.html第一步,下载flutter最新版,解压到自己的目录里: 提供网址:https://flutter.io/setup-macos/ 第二步,终端配置环境,这里我配知道了IOS,安…

Unity3D 镜面反射
原创文章如需转载请注明:转载自 脱莫柔Unity3D学习之旅 QQ群:【119706192】 本文链接地址: Unity3D 镜面反射 这是官方CharacterCustomization事例中的镜面反射shader。 1.首先需要一个plane当镜子,将代码MirrorReflection.cs文件绑定到镜子…

python后端学什么框架_献给正在学习python的你, 10个最受欢迎的Python开源框架
很多小伙伴在学习wen的时候说,有没有几个常用的框架,好多小伙伴都只说对了其中几个,只有少部分是说正确的,想要了解更多,欢迎大家订阅微信公众号:Python从程序猿到程序员,或者加4913.08659&…