这福利给你要不要 — 用Python采集相亲网站女生数据

news2024/11/8 15:14:33

前言

俗话说学咱这行的男同志 找对象容易吗

这马上就要过完年了 是时候找找女朋友了

我在这里摸索到了个网站 或许你们可以来看看

送一波单身福利 不需要的也可以学学怎么采集这些数据呗

在这里插入图片描述

环境与模块

环境开发

  • Python 3.8
  • Pycharm

模块使用

import parsel       --> pip install parsel
import requests     --> pip install requests
import csv
import re

安装模块

模块没有安装的朋友

win + R 输入cmd 输入安装命令 pip install 模块名 (如果你觉得安装速度比较慢, 你可以切换国内镜像源)

模块安装问题:

  • 如果安装python第三方模块:
    1. win + R 输入 cmd 点击确定, 输入安装命令 pip install 模块名 (pip install requests) 回车
    2. 在pycharm中点击Terminal(终端) 输入安装命令

  • 安装失败原因:

  • 失败一: pip 不是内部命令
    解决方法: 设置环境变量

  • 失败二: 出现大量报红 (read time out)
    解决方法: 因为是网络链接超时, 需要切换镜像源

清华:https://pypi.tuna.tsinghua.edu.cn/simple
阿里云:https://mirrors.aliyun.com/pypi/simple/
中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
华中理工大学:https://pypi.hustunique.com/
山东理工大学:https://pypi.sdutlinux.org/
豆瓣:https://pypi.douban.com/simple/
例如:pip3 install -i https://pypi.doubanio.com/simple/ 模块名

  • 失败三: cmd里面显示已经安装过了, 或者安装成功了, 但是在pycharm里面还是无法导入
    解决方法: 可能安装了多个python版本 (anaconda 或者 python 安装一个即可) 卸载一个就好 或者你pycharm里面python解释器没有设置好

如何配置pycharm里面的python解释器?

  1. 选择file(文件) >>> setting(设置) >>> Project(项目) >>> python interpreter(python解释器)
  2. 点击齿轮, 选择add
  3. 添加python安装路径

pycharm如何安装插件?

  1. 选择file(文件) >>> setting(设置) >>> Plugins(插件)
  2. 点击 Marketplace 输入想要安装的插件名字 比如:翻译插件 输入 translation / 汉化插件 输入 Chinese
  3. 选择相应的插件点击 install(安装) 即可
  4. 安装成功之后 是会弹出 重启pycharm的选项 点击确定, 重启即可生效

基本思路流程

一. 数据来源分析:

  1. 明确需求:

采集数据是什么 —> 资料数据 <静态网页>

都是在网页源代码里面

在这里插入图片描述

只要获取到所有 ID 就可以 采集所有数据信息

在这里插入图片描述

就有所有 小姐姐 详情页url ID

二. 代码实现步骤:

  • 发送请求
  • 获取数据
  • 解析数据
  • 保存数据

获取所有详情页ID:

  1. 发送请求, 模拟浏览器对于url地址发送请求

在这里插入图片描述

  1. 获取数据, 获取服务器返回响应数据
    开发者工具 —> response

  2. 解析数据, 提取我们想要数据内容
    详情页ID —> UID
    获取详情页资料信息

  3. 发送请求, 模拟浏览器对于url地址发送请求
    在这里插入图片描述
    资料详情页url地址

  4. 获取数据, 获取服务器返回响应数据
    网页源代码

  5. 解析数据, 提取我们想要数据内容
    基本资料信息

  6. 保存数据, 把数据内容保存本地
    基本资料信息保存csv表格
    照片数据, 保存本地文件夹

在这里插入图片描述


实现代码

完整 源码 点击 此处 领取 即可

# 导入数据请求模块
import requests
# 导入数据解析模块
import parsel
# 导入csv
import csv
# 导入正则
import re
f = open('data.csv', mode='a', encoding='utf-8', newline='')
csv_writer = csv.DictWriter(f, fieldnames=['昵称',
                                           '性别',
                                           '年龄',
                                           '身高',
                                           '体重',
                                           '出生日期',
                                           '生肖',
                                           '星座',
                                           '籍贯',
                                           '所在地',
                                           '学历',
                                           '婚姻状况',
                                           '职业',
                                           '年收入',
                                           '住房',
                                           '车辆',
                                           '照片',
                                           '详情页',
                                           ])
csv_writer.writeheader()

1. 发送请求, 模拟浏览器对于url地址发送请求

  • 模拟浏览器 headers 请求头
    可以在开发者工具里面复制粘贴的
    防止被反爬
  • <Response [200]> 响应对象
    200状态码 表示请求成功
for page in range(1, 11):
    # 请求链接
    url = f'https://********.com/valueApp/api/love/searchLoveUser?page={page}&perPage=12&sex=0'
    # 伪装模拟
    headers = {
        # User-Agent 用户代理, 表示浏览器基本信息
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
    }
    # 发送请求
    response = requests.get(url=url, headers=headers)
    print(response)

2. 获取数据, 获取服务器返回响应数据

开发者工具 —> response

response.json() 获取响应json数据, 字典数据类型

3. 解析数据, 提取我们想要数据内容

    详情页ID ---> UID
    因为得到数据: 字典数据类型
    所以解析数据: 键值对取值 ---> 根据冒号左边的内容[键], 提取冒号右边的内容[值]
# for循环遍历, 把列表里面元素一个一个提取出来
for index in response.json()['data']['items']:
    #  https://love.19lou.com/detail/51593564  format 字符串格式化方法
    link = f'https://****.com/detail/{index["uid"]}'

4. 发送请求, 模拟浏览器对于url地址发送请求

        https://love.19lou.com/detail/51593564  资料详情页url地址

5. 获取数据, 获取服务器返回响应数据

网页源代码

  • response.text 获取响应文本数据, 返回字符串数据类型
  • response.json() 获取响应json数据, 字典数据类型
html_data = requests.get(url=link, headers=headers).text

6. 解析数据, 提取我们想要数据内容

基本资料信息

css选择器: 根据标签属性内容提取数据
xpath: 根据标签节点提取数据
re正则

  1. 会找数据所对应标签是那个
  2. 选择复制就可以了

把获取下来 html字符串数据<html_data>, 转成可解析对象

selector = parsel.Selector(html_data)
name = selector.css('.username::text').get()
info_list = selector.css('.info-tag::text').getall()

. 表示调用方法属性

gender = info_list[0].split(':')[-1]
age = info_list[1].split(':')[-1]
height = info_list[2].split(':')[-1]
date = info_list[-1].split(':')[-1]

判断info_list元素个数 当元素个数4个 说明没有体重一栏

if len(info_list) == 4:
    weight = '0kg'
else:
    weight = info_list[3].split(':')[-1]
info_list_1 = selector.css('.basic-item span::text').getall()[2:]
zodiac = info_list_1[0].split(':')[-1]
constellation = info_list_1[1].split(':')[-1]
nativePlace = info_list_1[2].split(':')[-1]
location = info_list_1[3].split(':')[-1]
edu = info_list_1[4].split(':')[-1]
maritalStatus = info_list_1[5].split(':')[-1]
job = info_list_1[6].split(':')[-1]
money = info_list_1[7].split(':')[-1]
house = info_list_1[8].split(':')[-1]
car = info_list_1[9].split(':')[-1]
img_url = selector.css('.page .left-detail .abstract .avatar img::attr(src)').get()

7. 保存图片, 获取图片二进制数据

img_content = requests.get(url=img_url, headers=headers).content
with open('data\\' + new_name + '.jpg', mode='wb') as img:
    img.write(img_content)
print(dit)

效果

懂事的宝子 自己也可以做做可视化图表哦

在这里插入图片描述

最后

小圆在这里还给大家推荐个零基础朋友学习的案例教程 有兴趣的可以看看哦 需要源码也可以点击下方名片领取 ~

【Python案例教学】最适合零基础学习的实用案例,手把手带练,让你成为下一个Python大神

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/185545.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

类与对象的原理

前言 在JavaScript中&#xff0c;类的实现是基于原型继承机制的。 JavaScript中的类的一个重要特性是“动态可继承”。 类与原型 在JavaScript中&#xff0c;类的所有实例对象都从同一个原型对象上继承属性&#xff0c;因此原型对象是类的核心。 所有的类都有一个共同的根…

关系数据库——关系操作和关系完整性

文章目录一、关系操作1.基本的关系操作2.关系数据语言的分类关系代数语言关系演算语言具有关系代数和关系演算双重特点的语言二、关系的完整性1.实体完整性(Entity Integrity)实体完整性规则2.参照完整性(Referential Integrity)参照完整性规则引用关系3.用户定义的完整性(User…

WebRTC 的连接过程

经过前面几部分的铺垫&#xff0c;你应该对P2P音视频互动的过程有了一个大概的了解&#xff0c;有可能你会觉得过程比较繁琐&#xff0c;甚至涉及到了网络底层。但是&#xff0c;不要担心&#xff0c;WebRTC已经帮我们做了很多的事情&#xff0c;让我们在音视频开发时变得轻而易…

【Spring源码】22. 属性填充populateBean()详解

进入populateBean()对bean的属性进行填充&#xff0c;将各个属性值注入&#xff08;存在其他bean的属性&#xff0c;则会递归初始化依赖的bean&#xff09;一开始会先对传入的参数进行判断&#xff08;如下图红框框中的逻辑&#xff09;如果传入的BeanWrapper和RootBeanDefinit…

SpringBoot3+最新MybatisPlus+Mysql与TDengine双数据源

前言 昨天写的ideaApifox uploader插件apifox新年第一天上班就上榜了&#xff0c;真是不错。今天来补一篇&#xff0c;本来应该是在前一篇之前发的。实际上就是最新的springBoot集成最新的mybatisPlus&#xff0c;加双数据源&#xff1a;mysql、TDengine&#xff0c;一个关系型…

kvm虚拟机克隆

kvm虚拟机克隆链接克隆和完整克隆的区别完整克隆自动克隆手动克隆的步骤1.复制模板vm磁盘为新vm的磁盘2.复制模板vm配置文件为新vm的配置文件3.修改新vm配置文件中的信息为新vm的信息4.导入新vm的配置文件5.启动新vm链接克隆1.生成链接克隆虚拟机磁盘文件2.后续流程与手动克隆一…

【算法练习】链表中环的入口结点

题源&#xff1a;牛客描述给一个长度为n链表&#xff0c;若其中包含环&#xff0c;请找出该链表的环的入口结点&#xff0c;否则&#xff0c;返回null。数据范围&#xff1a;n≤10000&#xff0c;1<结点值<10000要求&#xff1a;空间复杂度 O(1)&#xff0c;时间复杂度O(…

1、数据库概述

文章目录1 为什么要使用数据库2 数据库与数据库管理系统2.1 数据库的相关概念2.2 数据库与数据库管理系统的关系2.3 常见的数据库管理系统排名(DBMS)2.4 常见的数据库介绍3 MySQL介绍3.1 概述3.2 MySQL发展史重大事件3.3 关于MySQL 8.03.4 为什么选择MySQL3.5 Oracle vs MySQL4…

学成在线项目开发技巧整理---第二部分

1.静态资源处理通常项目会采用动静分离架构,利用Nginx作为静态资源服务器,存放所有静态资源:#访问动态资源时,将请求负载均衡到多个服务器实例或者多个网关实例 upstream webservice{server 192.168.200.146:8080; }server {listen 80;server_name localhost;#动态资源l…

C++基础知识点整理笔记(一)

一直想尝试自己动手构建一个简单的深度学习训练框架&#xff0c;包括数据读取与处理、PS、NN前后向传播、模型save和load、不同训练方式&#xff08;offline/online .etc&#xff09;、指标监控、模型部署等部分, 去深入研究内部深度学习训练框架及horovod、byteps、pslite、te…

深刻理解状态机设计需要避免的冒险;时序电路可能存在essential hazard;处理单元里的control和datapath;竞争冒险【SV】【VLSI】

深刻理解状态机设计需要避免的冒险&#xff1b;时序电路可能存在essential hazard&#xff1b;处理单元里的control和datapath&#xff1b;竞争冒险【SV】【VLSI】0. 前言&#xff1a;时序电路可能存在essential hazard1. 理解control和datapath1.1 Datapath control2. 硬件电路…

MFC|创建一个对话框及窗体各个属性介绍

参考&#xff1a; VS2015 建立一个C的MFC简易窗体程序项目&#xff08;https://www.cnblogs.com/xingboy/p/11059721.html&#xff09; 对话框中各项属性介绍&#xff08;https://blog.csdn.net/u012350993/article/details/26093051&#xff09; MFC窗口风格 WS_style/WS_EX_s…

【Hadoop】YARN简述

文章目录1. YARN总述2. YARN调度器2.1 FIFO Scheduler2.2 Capacity Scheduler2.3 Fair Scheduler1. YARN总述 YARN是Hadoop资源管理器&#xff0c;它是一个通用资源管理系统&#xff0c;可为上层应用提供统一的资源管理和调度&#xff0c;它的引入为集群在利用率、资源统一管理…

关于栈和队列

目录栈&#xff08;Stack&#xff09;什么是栈栈的使用栈的模拟实现队列&#xff08;Queue&#xff09;什么是队列队列的使用队列的模拟实现循环队列双端队列 (Deque)栈&#xff08;Stack&#xff09; 什么是栈 栈是一种特殊的线性表&#xff0c;它只允许在固定的一端进行插入…

JavaScriptArray和String对象~

初识Array&#xff1a; 定义&#xff1a; 方式1 var 变量名new Array(元素列表);举例&#xff1a; <script>var arraynew Array(1,2,3);alert(array); </script>显示如下&#xff1a; 方式2 var 变量名[元素列表];举例&#xff1a; <script>var array[…

App Inspector使用 (macaca移动端元素检查器)

App Inspector安装说明&#xff1a;https://macacajs.github.io/app-inspector/zh/guide/install.html#%E7%8E%AF%E5%A2%83%E9%9C%80%E8%A6%81 依赖安装说明&#xff1a; 1、node环境&#xff1a;这里安装的时候和初始化的时候报错使用了两个版本&#xff0c;所以这里使用nvm…

Python-模块、包和发布模块

1.模块1.1模块的概念模块是python程序架构的一个核心概念每一个以扩展名.py结尾的python源代码文件都是一个模块模块名同样也是一个标识符&#xff0c;需要符合标识符的命名规则在模块中定义的全局变量、函数、类都是提供给外界直接使用的工具模块就好比工具包&#xff0c;要想…

世界坐标系->相机坐标系详细推导

基变换 理论部分 在n维的线性空间中&#xff0c;任意n个线性无关的向量都可以作为线性空间的基&#xff0c;即空间基不唯一。对于不同的基&#xff0c;同一个向量的坐标一般是不同的。因为在计算机图形学中&#xff0c;主要研究三维的空间&#xff0c;所以可以简化问题倒三维…

Hi3861鸿蒙物联网项目实战:智能测距仪

华清远见FS-Hi3861开发套件&#xff0c;支持HarmonyOS 3.0系统。开发板主控Hi3861芯片内置WiFi功能&#xff0c;开发板板载资源丰富&#xff0c;包括传感器、执行器、NFC、显示屏等&#xff0c;同时还配套丰富的拓展模块。开发板配套丰富的学习资料&#xff0c;包括全套开发教程…

真假流量卡区别,一篇文章教你怎么区分流量卡和物联卡!

真假流量卡区别&#xff0c;小编教你怎么区分流量卡和物联卡&#xff0c;近年来&#xff0c;市面上的流量卡种类繁多&#xff0c;其中不乏有一些虚假的、有套路的套餐&#xff0c;那么&#xff0c;我们如何辨别流量卡的正规性呢&#xff0c;接下来&#xff0c;跟着小编一块来了…