单身狗福利?Python爬取某婚恋网征婚数据


Posted in Python onJune 03, 2021

目标网址https://www.csflhjw.com/zhenghun/34.html?page=1

一、打开界面

单身狗福利?Python爬取某婚恋网征婚数据

鼠标右键打开检查,方框里为你一个文小姐的征婚信息。。由此判断出为同步加载

单身狗福利?Python爬取某婚恋网征婚数据

点击elements,定位图片地址,方框里为该女士的url地址及图片地址

单身狗福利?Python爬取某婚恋网征婚数据

可以看出该女士的url地址不全,之后在代码中要进行url的拼接,看一下翻页的url地址有什么变化

点击第2页
https://www.csflhjw.com/zhenghun/34.html?page=2

点击第3页
https://www.csflhjw.com/zhenghun/34.html?page=3

可以看出变化在最后
做一下fou循环格式化输出一下。。一共10页

单身狗福利?Python爬取某婚恋网征婚数据

二、代码解析

1.获取所有的女士的url,xpath的路径就不详细说了。。

单身狗福利?Python爬取某婚恋网征婚数据

2.构造每一位女士的url地址

单身狗福利?Python爬取某婚恋网征婚数据

3.然后点开一位女士的url地址,用同样的方法,确定也为同步加载

单身狗福利?Python爬取某婚恋网征婚数据

4.之后就是女士url地址html的xpath提取,每个都打印一下,把不要的过滤一下

单身狗福利?Python爬取某婚恋网征婚数据
单身狗福利?Python爬取某婚恋网征婚数据

5.最后就是文件的保存

单身狗福利?Python爬取某婚恋网征婚数据

打印结果:

单身狗福利?Python爬取某婚恋网征婚数据
单身狗福利?Python爬取某婚恋网征婚数据

三、完整代码

# !/usr/bin/nev python
# -*-coding:utf8-*-

import requests, os, csv
from pprint import pprint
from lxml import etree

def main():
    for i in range(1, 11):
        start_url = 'https://www.csflhjw.com/zhenghun/34.html?page={}'.format(i)

        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '
                          'Chrome/87.0.4280.88 Safari/537.36'

        }
        response = requests.get(start_url, headers=headers).content.decode()
        # # pprint(response)
        # 3 解析数据
        html_str = etree.HTML(response)
        info_urls = html_str.xpath(r'//div[@class="e"]/div[@class="e-img"]/a/@href')
        # pprint(info_urls)

        # 4、循环遍历 构造img_info_url
        for info_url in info_urls:
            info_url = r'https://www.csflhjw.com' + info_url
            # print(info_url)
            # 5、对info_url发请求,解析得到img_urls
            response = requests.get(info_url, headers=headers).content.decode()
            html_str = etree.HTML(response)
            # pprint(html_str)
            img_url = 'https://www.csflhjw.com/' + html_str.xpath(r'/html/body/div[4]/div/div[1]/div[2]/div[1]/div['
                                                                r'1]/img/@src')[0]
            # pprint(img_url)
            name = html_str.xpath(r'//div[@class="team-info"]/div[@class="team-e"]/h2/text()')[0]
            # pprint(name)
            xueli = html_str.xpath(r'//div[@class="team-info"]/div[@class="team-e"]/p[1]/text()')[0].split(':')[1]
            # pprint(xueli)
            job = html_str.xpath(r'//div[@class="team-info"]/div[@class="team-e"]/p[2]/text()')[0].split(':')[1]
            # pprint(job)
            marital_status = html_str.xpath(r'//div[@class="team-info"]/div[@class="team-e"]/p[3]/text()')[0].split(
                ':')[1]
            # pprint(marital_status)
            is_child = html_str.xpath(r'//div[@class="team-info"]/div[@class="team-e"]/p[4]/text()')[0].split(':')[1]
            # pprint(is_child)
            home = html_str.xpath(r'//div[@class="team-info"]/div[@class="team-e"]/p[5]/text()')[0].split(':')[1]
            # pprint(home)
            workplace = html_str.xpath(r'//div[@class="team-info"]/div[@class="team-e"]/p[6]/text()')[0].split(':')[1]
            # pprint(workplace)
            requ = html_str.xpath(r'/html/body/div[4]/div/div[1]/div[2]/div[2]/div[2]/p[2]/span/text()')[0].split(':')[1]
            # pprint(requ)
            requ = [requ if requ != str() else '无要求'][0]
            monologue = html_str.xpath(r'//div[@class="hunyin-1-3"]/p/text()')
            # pprint(monologue)
            monologue = [monologue[0].replace(' ', '').replace('\xa0', '') if monologue !=list() else '无'][0]
            # pprint(monologue)
            zeo_age = html_str.xpath(r'/html/body/div[4]/div/div[1]/div[2]/div[2]/div[2]/p[1]/span[1]/text()')[0].split(':')[1]
            zeo_age = [zeo_age if zeo_age!=str() else '无要求'][0]
            # pprint(zeo_age)
            zeo_address = html_str.xpath(r'/html/body/div[4]/div/div[1]/div[2]/div[2]/div[2]/p[1]/span[2]/text()')[0].split(':')[1]
            zeo_address = [zeo_address if zeo_address!=str() else '无要求'][0]
            # pprint(zeo_address)

            if not os.path.exists(r'./{}'.format('妹子信息数据')):
                os.mkdir(r'./{}'.format('妹子信息数据'))
                csv_header = ['姓名', '学历', '职业', '婚姻状况', '有无子女', '是否购房', '工作地点', '择偶年龄', '择偶城市', '择偶要求', '个人独白', '照片链接']
                with open(r'./{}/{}.csv'.format('妹子信息数据', '妹子数据'), 'w', newline='', encoding='gbk') as file_csv:
                    csv_writer_header = csv.DictWriter(file_csv, csv_header)
                    csv_writer_header.writeheader()

            try:
                with open(r'./{}/{}.csv'.format('妹子信息数据', '妹子数据'), 'a+', newline='',
                          encoding='gbk') as file_csv:
                    csv_writer = csv.writer(file_csv, delimiter=',')
                    csv_writer.writerow([name, xueli, job, marital_status, is_child, home, workplace, zeo_age,
                                         zeo_address, requ, monologue, img_url])
                    print(r'***妹子信息数据:{}'.format(name))
            except Exception as e:
                with open(r'./{}/{}.csv'.format('妹子信息数据', '妹子数据'), 'a+', newline='',
                          encoding='utf-8') as file_csv:
                    csv_writer = csv.writer(file_csv, delimiter=',')
                    csv_writer.writerow([name, xueli, job, marital_status, is_child, home, workplace, zeo_age,
                                         zeo_address, requ, monologue, img_url])
                    print(r'***妹子信息数据保存成功:{}'.format(name))



if __name__ == '__main__':
    main()

到此这篇关于单身狗福利?Python爬取某婚恋网征婚数据的文章就介绍到这了,更多相关Python爬取征婚数据内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python的Flask框架中的Jinja2模板引擎学习教程
Jun 30 Python
使用python将大量数据导出到Excel中的小技巧分享
Jun 14 Python
Python使用jsonpath-rw模块处理Json对象操作示例
Jul 31 Python
python将.ppm格式图片转换成.jpg格式文件的方法
Oct 27 Python
Linux上使用Python统计每天的键盘输入次数
Apr 17 Python
python实现二级登陆菜单及安装过程
Jun 21 Python
Python自动生成代码 使用tkinter图形化操作并生成代码框架
Sep 18 Python
tensorflow获取预训练模型某层参数并赋值到当前网络指定层方式
Jan 24 Python
django-xadmin根据当前登录用户动态设置表单字段默认值方式
Mar 13 Python
Python3读写ini配置文件的示例
Nov 06 Python
python中使用np.delete()的实例方法
Feb 01 Python
python上下文管理的使用场景实例讲解
Mar 03 Python
告别网页搜索!教你用python实现一款属于自己的翻译词典软件
Python 中random 库的详细使用
Jun 03 #Python
详解Python常用的魔法方法
Python自动化之批量处理工作簿和工作表
Jun 03 #Python
Jupyter Notebook内使用argparse报错的解决方案
Python实现机器学习算法的分类
Jupyter Notebook 如何修改字体和大小以及更改字体样式
You might like
PHP生成UTF8文件的方法
2010/05/15 PHP
如何设置mysql允许外网访问
2013/06/04 PHP
PHP处理大量表单字段的便捷方法
2015/02/07 PHP
CI(Codeigniter)的Setting增强配置类实例
2016/01/06 PHP
脚本吧 - 幻宇工作室用到js,超强推荐share.js
2006/12/23 Javascript
JAVASCRIPT对象及属性
2007/02/13 Javascript
js arguments对象应用介绍
2012/11/28 Javascript
JQuery文字列表向上滚动的代码
2013/11/13 Javascript
将查询条件的input、select清空
2014/01/14 Javascript
详解JavaScript对Date对象的操作问题(生成一个倒数7天的数组)
2015/10/01 Javascript
jQuery+jsp下拉框联动获取本地数据的方法(附源码)
2015/12/03 Javascript
JavaScript ParseFloat()方法
2015/12/18 Javascript
关于cookie的初识和运用(js和jq)
2016/04/07 Javascript
利用AJAX实现WordPress中的文章列表及评论的分页功能
2016/05/17 Javascript
Adapter适配器模式在JavaScript设计模式编程中的运用分析
2016/05/18 Javascript
jQuery实现公告新闻自动滚屏效果实例代码
2016/07/14 Javascript
基于Bootstrap实现的下拉菜单手机端不能选择菜单项的原因附解决办法
2016/07/22 Javascript
AngularJs表单校验功能实例代码
2017/02/09 Javascript
微信小程序实现长按删除图片的示例
2018/05/18 Javascript
springMvc 前端用json的方式向后台传递对象数组方法
2018/08/07 Javascript
nodejs微信开发之自动回复的实现
2019/03/17 NodeJs
Vue组件通信入门之Provide和Inject机制
2019/12/29 Javascript
vue和小程序项目中使用iconfont的方法
2020/05/19 Javascript
在vue中对数组值变化的监听与重新响应渲染操作
2020/07/17 Javascript
通过C++学习Python
2015/01/20 Python
Python自定义类的数组排序实现代码
2016/08/28 Python
python 基础教程之Map使用方法
2017/01/17 Python
浅谈Python基础之I/O模型
2017/05/11 Python
Python通过属性手段实现只允许调用一次的示例讲解
2018/04/21 Python
利用Python+阿里云实现DDNS动态域名解析的方法
2019/04/01 Python
python实现图像全景拼接
2020/03/27 Python
python 在sql语句中使用%s,%d,%f说明
2020/06/06 Python
2014年公司庆元旦活动方案
2014/03/05 职场文书
2016年元旦主持词
2015/07/06 职场文书
医院病假条怎么写
2015/08/17 职场文书
小学生作文之《压岁钱的烦恼》
2019/09/27 职场文书