【Python获取相亲网站数据】马上都元宵节了,还在相亲,看看某相亲网站有没有那个有缘人。

news2025/2/26 13:38:15

前言

1b83b1d3fff541e6844ba7bfc4b8f724.gif

马上都元宵节了,还在相亲,看看某相亲网站有没有那个有缘人。今天我们来爬取某相亲网站获取我们想要的数据,比如说,对方的姓名,年龄,身高,体重等等。今天我们主要使用CSS选择的方法来匹配我们想要的数据,通过这篇的学习,可以加深大家对CSS的用法的了解,以及明白不同于正则匹配的地方。话不多说,让我手把手教你,如何获取吧。

环境使用

  • python 3.9
  • pycharm

模块使用

  • requests
  • re
  • csv
  • os
  • parsel

模块介绍

  • requests

        requests是一个很实用的Python HTTP客户端库,爬虫和测试服务器响应数据时经常会用到,requests是Python语言的第三方的库,专门用于发送HTTP请求,使用起来比urllib简洁很多。

  • parsel

        parsel是一个python的第三方库,相当于css选择器+xpath+re。

parsel由scrapy团队开发,是将scrapy中的parsel独立抽取出来的,可以轻松解析html,xml内容,获取需要的数据。

相比于BeautifulSoup,xpath,parsel效率更高,使用更简单。

  • re

        re模块是python独有的匹配字符串的模块,该模块中提供的很多功能是基于正则表达式实现的,而正则表达式是对字符串进行模糊匹配,提取自己需要的字符串部分,他对所有的语言都通用。

  • os

        os 就是 “operating system” 的缩写,顾名思义,os模块提供的就是各种 Python 程序与操作系统进行交互的接口。通过使用 os 模块,一方面可以方便地与操作系统进行交互,另一方面也可以极大增强代码的可移植性。

  • csv

        它是一种文件格式,一般也被叫做逗号分隔值文件,可以使用 Excel 软件或者文本文档打开 。其中数据字段用半角逗号间隔(也可以使用其它字符),使用 Excel 打开时,逗号会被转换为分隔符。csv 文件是以纯文本形式存储了表格数据,并且在兼容各个操作系统。

 

模块安装问题:

  • 如果安装python第三方模块:

win + R 输入 cmd 点击确定, 输入安装命令 pip install 模块名 (pip install requests) 回车

在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解释器没有设置好。

代码实现

发送请求

首先我们需要确定我们的目标网址。 

a56cafba3bc942cd998a25c4f5986dcf.png

 

获取数据

我们通过开发者工具会发现,每一个女嘉宾都是有自己单独的网页,而且其网页构成规律明显,都是由固定网页+uid构成,所以我们只需要找到每一个女嘉宾对应的uid即可。

https://love.19lou.com/detail/51639237

https://love.19lou.com/detail/51404458

https://love.19lou.com/detail/51371926

接下来我们目标明确,获取女嘉宾的uid。

第一种方法,直接在网页源代码中获取uid。

respnse = requests.get(url, headers=headers)

    # print(respnse.text)
    uids = re.findall('uid:(\d+)', respnse.text, re.S)
    print(uids)

 第二种方法,通过找到对应的数据包,里面就有女嘉宾的uid。

# 第二种方法获取uid,即数据包,xhr刷新。得到下面链接
# https://love.19lou.com/valueApp/api/love/searchLoveUser?page=2&perPage=12&sex=0
    #https://love.19lou.com/valueApp/api/love/searchLoveUserpage=1&perPage=12&sex=0&minWeight=31&maxAge=59
    url1 = 'https://love.19lou.com/valueApp/api/love/searchLoveUser?page=2&perPage=12&sex=0'
    respnse1 = requests.get(url1,headers=headers)
    #第1种写法,有局限性
    uids=respnse1.json()['data']['items']
    print(uids)
    for i in range(0,12):
         uid = uids[i]['uid']
         print(uid)
    #第2种写法
    for index in respnse1.json()['data']['items']:
         print(index['uid'])

 构成我们想要的女嘉宾的网页。

    for uid in uids:
        html_url = 'https://love.19lou.com/detail/' + uid
        print(html_url)

解析数据

我们请求我们刚刚得到的html_url,并做数据转换。

html_response = requests.get(html_url, headers=headers)
        # print(html_response)
        html_data = html_response.text
        selector = parsel.Selector(html_data)
        # css选择器,根据标签属性内容提取数据
        # 会找标签

 今天我们就不用正则去匹配我们想要的数据,用CSS去匹配我们想要的数据。

9901ef60d37644ed861e850871f5bb7f.jpg

 

其他的数据内容获取都是类似的,这里我们就不做过多的赘述。直接上代码。

        name = selector.css('.username::text').get()
     
        # print(name)
        info_list = selector.css('.info-tag::text').getall()
        
        sex = info_list[0].split(':')[1]
        age = info_list[1].split(':')[1]
        height = info_list[2].split(':')[1]

        birth = info_list[-1].split(':')[1]

在这里我和大家简单解释一下里面部分代码(info_list[0].split(':')[1])的含义。

        # 提取性别”女“字
        # print(info_list)#['性别:女', '年龄:29岁', '身高:164cm', '体重:45kg', '出生年份:1994']
        # print(info_list[0])#性别:女
        # print(info_list[0].split(':'))#['性别', '女']
        # print(info_list[0].split(':')[1])#女 

 接下来我们获取其个人基本信息。

        basic_list = selector.css('.basic-item span::text').getall()
        # basic_list = selector.css('.basic-item span::text').getall()[2:]#切片
        # print(basic_list)
        shuxiang = basic_list[2].split(':')[1]
        xingzuo = basic_list[3].split(':')[1]
        nativePlace = basic_list[4].split(':')[1]
        location = basic_list[5].split(':')[1]
        edu = basic_list[6].split(':')[1]
        marriage = basic_list[7].split(':')[1]
        job = basic_list[8].split(':')[1]
        money = basic_list[9].split(':')[1]
        house = basic_list[10].split(':')[1]
        car = basic_list[11].split(':')[1]

 输出数据

print(name, sex, age, height, weight, birth, shuxiang, xingzuo, nativePlace, location, edu, marriage, job, money,
              house, car)

 保存数据

我们把这些数据保存的csv文件里面,并把女嘉宾的图片保存下来。

        dit = {
            '昵称': name,
            '性别': sex,
            '身高': height,
            '体重': weight,
            '出生年份': birth,
            '生肖': shuxiang,
            '星座': xingzuo,
            '籍贯': nativePlace,
            '所在地': location,
            '学历': edu,
            '婚姻状况': marriage,
            '工作': job,
            '年收入': money,
            '房产': house,
            '车辆': car,
            '详情页': img_url,
        }
        csv_writer.writerow(dit)
        
        

保存图片就比较简单了,和之前一样,requests,然后二进制保存数据。

        img_url = selector.css('.page .left-detail .abstract .avatar img::attr(src)').get()
        # img_url = selector.css('.page .left-detail .abstract .avatar img')
        content = requests.get(img_url, headers=headers).content
        with open('图片\\' + str(name) + '.jpg', mode='wb') as f:
            f.write(content)

运行结果展示

8e3adb08710e4fefa83cc1f5aca485f6.png

0f02de804a9840f6b7051bff4e3030a2.png 

285a3f92182846339efceb5b5e005c1c.png

 相信大家跟着我一步一步操作,也做出了和我一样的效果,是不是很简单。

如果有不会的可以在评论区留言。

6adf31c8c5dd4e6a83314f4805b30bc1.jpg

 

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

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

相关文章

IDEA插件开发入门.01

环境准备Idea插件SDK文档在线地址:https://plugins.jetbrains.com/docs/intellij/welcome.html安装IntelliJ IDEA,这里使用版本2020.1.3 X64IDEA中安装Plugin DevKit插件创建插件项目新建工程。File ->New -> Project选择工程类型,Inte…

无法应用转换程序。请检查指定的转换程序路径是否有效。例子:Adobe Acrobat DC (PDF编辑器)卸载不了或者无法重新安装

不知道大家有没遇到这种情况,Adobe Acrobat DC (PDF编辑器)卸载不了或者无法重新安装,显示:无法应用转换程序。请检查指定的转换程序路径是否有效。 今天小编句遇到了这种情况,卸不了,把文件夹直接删了还是无法重新安装…

Linux安装Mysql8.0

mysql官网 www.mysql.com 这里是新建了个虚拟机 有时候用 rpm -qa|grep mysql和 rpm -qa|grep mariadb检测不到已经安装了mysql或者mariadb 可以使用rpm -qa|grep -i mysql 自己对Linux学习阶段,因此新建虚拟机安装 卸载原来的mariadb rpm -e mariadb-libs rpm -e --node…

微信如何注册小号?一个手机号注册两个微信账号?图文教学

2023年2月3日微信正式开放注册“小号”的功能,也就是可以使用一个手机号来注册两个微信账号。微信作为很多一款国民级别的工具,早就成为了小伙伴日常生活中不可或缺的一部分了。能够注册微信小号自然很好,可是微信如何注册小号呢?…

什么是窜货?为什么要治理窜货?如何正确治理窜货?

一、什么是窜货 “窜货”行为,就是超出自己授权范围,在非授权区域出售商品的行为。一般有线下窜区域销售、线下商品窜货线上销售两种情况。 二、为什么会出现窜货 1、窜货最常见的原因是,当经销商的授权区域市场趋向饱和时,或其…

茶杯:N个杯子排成一排,第X个杯子藏有球,交换任意两个杯子K次后,找出藏球杯子位置。

N个杯子排成一排,第X个杯子藏有球,交换任意两个杯子K次后,找出藏球杯子位置。 (本文获得CSDN质量评分【85】)【学习的细节是欢悦的历程】Python 官网:https://www.python.org/ Free:大咖免费“圣经”教程《 python 完…

Idea JSP 学习

运行JSP文件首次使用Idea运行jsp文件遇到的问题汇总。运行出现404错误。首先配置好Tomcat,我选用的是Tomcat 10.0.27.安装好Tomcat,并进行相关配置。我用的是IDEA2020.2.3 x64版本,不同版本会有区别。这是我的以上配置,特别注意下图三角标识的test.jsp。…

【JavaEE】单例模式详解

目录 一、单例模式的概念 二、饿汉模式 三、懒汉模式 (1)懒汉模式-单线程版 (2)懒汉模式-线程安全多线程版 啥是设计模式咧🤔设计模式好比象棋中的棋谱。红方当头炮,黑方马来跳👣。针对红方…

鸿蒙开发学习|HarmonyOS是什么

鸿蒙开发学习 第一章 HarmonyOS是什么文章目录鸿蒙开发学习前言一、什么是HarmonyOS二、HarmonyOS系统架构2.1 内核层2.2系统服务层2.3框架层2.4应用层三、HarmonyOS系统特性3.1 对消费者3.2.对应用开发3.3.对设备开发四、HarmonyOS系统四大技术特性4.1 分布式架构首次用于终端…

LabVIEW最大内存块属性不存在

LabVIEW最大内存块属性不存在在NI Linux实时操作系统目标中使用系统属性节点和分布式系统管理器(DSM),但遇到一些问题:它未正确报告系统上的可用物理内存量。在NI Linux实时系统上出现错误-2147220623尝试在NI Linux实时上监测RAM…

webpack自动化打包

webpack自动化打包 首先下载包 npm i webpack-dev-server -D 配置 webpack.config.js const path require(path)//nodejs核心模块,专门用来处理路径问题 const ESLintPlugin require(eslint-webpack-plugin) const HtmlWebpackPlugin require(html-webpack-p…

java-加密、解密算法

rsa2048、sha256 rsa2048对整个文件进行hash算法,生成公钥、私钥后用于数字签名, sha256通过公钥和私钥,作为证书使用。单板打包后对每个动态库sha256计算颁发证书 sha256签名后,rsa2048进行加密。签名用于校验加密数据没有被更…

初始化一个vite+vue3项目,配置eslint+Prettier

引用vite官网的一段话,解释一下我们为什么要选择使用vite 时过境迁,我们见证了诸如 webpack、Rollup 和 Parcel 等工具的变迁,它们极大地改善了前端开发者的开发体验。 然而,当我们开始构建越来越大型的应用时,需要处…

Java后端数据校验学习总结

Java后端校验总结 后端校验注解一直在用,但是感觉不是特别清楚,希望通过写这篇文章搞清楚。 Spring自带的Validation校验框架 Spring提供了Validator接口来校验对象,主要涉及到的方法和类如下: supports方法:设置校…

win11任务栏图标闪烁|任务栏QQ图标闪动|新消息任务栏自动弹出|设置自动隐藏任务栏之后,QQ或微信等工具新消息自动弹出任务栏并颜色提示问题解决方案

背景介绍: 今天正常使用电脑时也出现消息弹出问题(已经设置隐藏任务栏),很头疼那么时什么情况,该如何组去解决呢?(微信任务栏闪动未读消息) MyDockFinder Windows 桌面美化工具 目录 背景介绍 解决问题 微信环境测试 初始界面(微信) 打开微信 …

PostMan简介2022黑马跟学

2022黑马PostMan简介跟学1.PostMan工具的使用1.1 PostMan简介1.2 PostMan安装1.3 PostMan使用1.3.1 创建WorkSpace工作空间1.3.2 发送请求(1).以百度为例发送get请求(2).以百度为例发送post请求1.3.3 保存当前请求1.3.4 创建server端1.PostMan工具的使用 1.1 PostMan简介 代码…

运算放大电路(三)-加法器

加法器 由虚短知: V- V 0 ……a 由虚断及基尔霍夫定律知,通过R2与R1的电流之和等于通过R3的电流,故 (V1 – V-)/R1 (V2 – V-)/R2 (Vout – V-)/R3 ……b 代入a式,b式变为 V1/R1 V2/R2 Vout/R3 如果取 R1R2R3 则上式变为 Vo…

ideal整合reids实现缓存查询

目录 前言: 一.工作流程 二. RedisConfig类 三.application.properties 四.开启linux中的redis 五.使用redis结合数据库进行数据查询 5.1编程式缓存 5.2声明式缓存 5.2.1在启动类上添加注解 5.2.2实现代码 六.运行结果 ​编辑 前言: 废话不多讲…

Java文件读写和CSV文件解析(读取csv文件的一列或若干列)

文件类 Java 读文件流的知识不可少,先复习一下吧! OREACLE JDK8 DOCS 文件类是Java IO的一个对象,用于指定文件的相关信息,位置和名称信息。如txt文件,csv文件对Java来说就是一个文件类。 开发手册中指出&#xff0…

Android实战场景 - 保存WebView中的图片到相册

去年同事写了一个 “在H5中保存图片到相册” 的功能,虽然有大致实现思路,实现起来也没问题,但是感觉同事考虑问题的很周全,当时候就想着去学习一下,但是项目太赶没顾得上,索性现在有时间,准备好…