用Python爬虫采集了世纪佳缘后发现了一个秘密
今天在知乎上看到一个关于【世纪佳缘找对象靠谱吗?】的讨论 , 其中关注的人有 1903 , 被浏览了 1940753 次 , 355 个回答中大多数都是不靠谱的 。 用 Python 爬取世纪佳缘的数据是否能证明它的不靠谱?
私信小编01即可获取大量Python学习资料
文章插图
数据抓取在 PC 端打开世纪佳缘网站 , 搜索 20 到 30 岁、不限地区的女朋友
文章插图
翻了几页找到一个 search_v2.php 的链接 , 它的返回值是一个不规则的 json 串 , 其中包含了昵称、性别、是否婚配、匹配条件等等
文章插图
点开 Hearders 拉到最下面 , 在它的参数中 sex 是性别、stc 是年龄、p 是分页、listStyle 是有照片
文章插图
通过 url + 参数的 get 方式 , 抓取了 10000 页的数据总共 240116
文章插图
需要安装的模块有 openpyxl , 用于过滤特殊的字符
# coding:utf-8import csvimport json import requestsfrom openpyxl.cell.cell import ILLEGAL_CHARACTERS_REimport 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_indexuserInfo = []for key in s['userInfo']:line_index = line_index + 1a = (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 = ';sex=f --tt-darkmode-color: #979797;">发现秘密在处理数据去掉重复的时候发现有好多重复的 , 还以为是代码写的有问题呢 , 查了好久的 bug 最后才发现网站在 100 页只有的数据有好多重复的 , 下面两个图分别是 110 页数据和 111 页数据 , 是不是有很多熟面孔 。
110 页数据
文章插图
111 页数据
文章插图
【用Python爬虫采集了世纪佳缘后发现了一个秘密】过滤重复后的数据只剩下 1872 了 , 这个水分还真大
def filterData():filter = []csv_reader = csv.reader(open("sjjy.csv", encoding='gbk'))i = 0for row in csv_reader:i = i + 1print('正在处理:' + str(i) + '行')if row[0] not in filter:filter.append(row[0])print(len(filter))
总结世纪佳缘的数据告诉我们网上交友需谨慎 。 用好 Python 走遍网络都不怕 。 各位程序员同志要当心了啊
- 看不上|为什么还有用户看不上华为Mate40系列来看看内行人怎么说
- 采用|消息称一加9系列将推出三款新机,新增一加9E
- 会员|美容院使用会员管理软件给顾客更好的消费体验!
- 行业|现在行业内客服托管费用是怎么算的
- 闲鱼|电诉宝:“闲鱼”网络欺诈成用户投诉热点 Q3获“不建议下单”评级
- 美国|英国媒体惊叹:165个国家采用北斗将GPS替代,连美国也不例外?
- 桌面|日常使用的软件及网站分享 篇一:几个动态壁纸软件和静态壁纸网站:助你美化你的桌面
- 同轴心配合|用SolidWorks画一个直角传动,画四个零件就行
- 先别|用了周冬雨的照片,我会成为下一个被告?自媒体创作者先别自乱阵脚
- 速度|华为P50Pro或采用很吓人的拍照技术:液体镜头让对焦速度更快