百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

用 Python 给自己找个合适的妹子

toyiye 2024-06-24 19:29 11 浏览 0 评论

先上效果图吧,no pic say bird!

古人云: 知己知彼,百战不殆. 好好去了解一下妹子们的内心想法,早日脱单!

这次我在一个某知名婚恋网站,抓取了一些数据,对她们的内心读白进行分析.

我这次筛选条件: 女性,年龄20-30,学历本科 ,就这些条件.

3000条妹子内心读白词云如下:

放心好了,她们都是追求精神满足而非物质,大部分都是要找生命中的另一半,那她们的另一半会是你吗?

完整代码

# coding=utf-8
from selenium import webdriver
import time
from lxml import etree
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
"""
PEP8 Python编程规范
https://www.douban.com/note/134971609/
"""
# 获取浏览器驱动
driver = webdriver.Firefox()
driver.maximize_window()
webUrl = 'http://www.lovewzly.com/jiaoyou.html'
driver.get(webUrl)
# 等15秒,我来手动做一下筛选条件。,女性,21-30左右,学历本科,\
# 本来想通过js代码,来自动执行,但无奈对js真的不熟,也没有太多时间去整了,凑合看看.
time.sleep(15)
"""
下拉滚动条,从1开始到3结束 分2次加载完每页数据
"""
while True:
 for i in range(1, 20):
 height = 1000 * i # 每次滑动20000像素
 strword = "window.scrollBy(0," + str(height) + ")"
 driver.execute_script(strword)
 time.sleep(3)
 s = etree.HTML(driver.page_source)
 selectors = s.xpath('//*[@id="hibox"]/table/tbody/tr/td/div')
 with open('内心读白.txt', 'a') as f:
 for selector in selectors:
 img = selector.xpath('./div[1]/img/@src')
 nick = selector.xpath('./div[2]/p[1]/span/text()')
 age = selector.xpath('./div[2]/p[2]/span[1]/text()')
 height = selector.xpath('./div[2]/p[2]/span[2]/text()')
 address = selector.xpath('./div[2]/p[2]/span[3]/text()')
 heart = selector.xpath('./div[2]/p[3]/text()')
 img = img[0] if len(img) > 0 else ''
 nick = nick[0] if len(nick) > 0 else ''
 age = age[0] if len(age) > 0 else ''
 height = height[0] if len(height) > 0 else ''
 address = address[0] if len(address) > 0 else ''
 heart = heart[0] if len(heart) > 0 else ''
 print nick, age, height, address, heart, img
 f.write(heart)

生成词云的代码之前的文章里面有,这里就不展示了,自行前往查阅!

一个高效获取数据的办法.由于并没有什么模拟的操作,一切都可以人工来控制,所以也不需要打开网页就能获取数据!

但我们需要分析这个网页,打开网页 http://www.lovewzly.com/jiaoyou.html 后,按F12,进入Network项中

url在筛选条件后,只有page在发生变化,而且是一页页的累加,而且我们把这个url在浏览器中打开,会得到一批json字符串,所以我可以直接操作这里面的json数据,然后进行存储即可!

代码结构图:

操作流程:

headers 一定要构建反盗链以及模拟浏览器操作,先这样写,可以避免后续问题!

条件拼装

然后记得数据转json格式

然后对json数据进行提取,

把提取到的数据放到文件或者存储起来

主要学习到的技术:

  1. 学习requests+urllib
  2. 操作execl
  3. 文件操作
  4. 字符串
  5. 异常处理
  6. 另外其它基础

请求数据

def craw_data(self):
 '''数据抓取'''
 headers = {
 'Referer': 'http://www.lovewzly.com/jiaoyou.html',
 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.4620.400 QQBrowser/9.7.13014.400'
 }
 page = 1
 while True:
 query_data = {
 'page':page,
 'gender':self.gender,
 'starage':self.stargage,
 'endage':self.endgage,
 'stratheight':self.startheight,
 'endheight':self.endheight,
 'marry':self.marry,
 'salary':self.salary,
 }
 url = 'http://www.lovewzly.com/api/user/pc/list/search?'+urllib.urlencode(query_data)
 print url
 req = urllib2.Request(url, headers=headers)
 response = urllib2.urlopen(req).read()
 # print response
 self.parse_data(response)
 page += 1

字段提取

 def parse_data(self,response):
 '''数据解析'''
 persons = json.loads(response).get('data').get('list')
 if persons is None:
 print '数据已经请求完毕'
 return
 for person in persons:
 nick = person.get('username')
 gender = person.get('gender')
 age = 2018 - int(person.get('birthdayyear'))
 address = person.get('city')
 heart = person.get('monolog')
 height = person.get('height')
 img_url = person.get('avatar')
 education = person.get('education')
 print nick,age,height,address,heart,education
 self.store_info(nick,age,height,address,heart,education,img_url)
 self.store_info_execl(nick,age,height,address,heart,education,img_url)

文件存放

 def store_info(self, nick,age,height,address,heart,education,img_url):
 '''
 存照片,与他们的内心独白
 '''
 if age < 22:
 tag = '22岁以下'
 elif 22 <= age < 28:
 tag = '22-28岁'
 elif 28 <= age < 32:
 tag = '28-32岁'
 elif 32 <= age:
 tag = '32岁以上'
 filename = u'{}岁_身高{}_学历{}_{}_{}.jpg'.format(age,height,education, address, nick)
 try:
 # 补全文件目录
 image_path = u'E:/store/pic/{}'.format(tag)
 # 判断文件夹是否存在。
 if not os.path.exists(image_path):
 os.makedirs(image_path)
 print image_path + ' 创建成功'
 # 注意这里是写入图片,要用二进制格式写入。
 with open(image_path + '/' + filename, 'wb') as f:
 f.write(urllib.urlopen(img_url).read())
 txt_path = u'E:/store/txt'
 txt_name = u'内心独白.txt'
 # 判断文件夹是否存在。
 if not os.path.exists(txt_path):
 os.makedirs(txt_path)
 print txt_path + ' 创建成功'
 # 写入txt文本
 with open(txt_path + '/' + txt_name, 'a') as f:
 f.write(heart)
 except Exception as e:
 e.message

execl操作

 def store_info_execl(self,nick,age,height,address,heart,education,img_url):
 person = []
 person.append(self.count) #正好是数据条
 person.append(nick)
 person.append(u'女' if self.gender == 2 else u'男')
 person.append(age)
 person.append(height)
 person.append(address)
 person.append(education)
 person.append(heart)
 person.append(img_url)
 for j in range(len(person)):
 self.sheetInfo.write(self.count, j, person[j])
 self.f.save(u'我主良缘.xlsx')
 self.count += 1
 print '插入了{}条数据'.format(self.count)

如果你对Python编程感兴趣,那么记得私信小编“007”领取全套Python资料哦。

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码