明天什么节日 ?明天谁过节 ?
是你吗,还是你的朋友 ?如果是你的话,那咱就帮帮朋友,到年龄的咱就直接相亲呗
赠人玫瑰 手留余香
好人做到底,来让朋友体验体验恋爱的感觉~
今天就带你们来爬爬相亲网站的数据信息
如果明天你不过节,那你也可以自己筛选筛选,这种好事,自己怎么能错过!
前期准备
环境开发
- Python 3.8
- Pycharm
模块使用
-
requests —> 数据请求模块 需要安装 pip install requests
-
parsel
-
csv
基本流程思路
一. 数据来源分析:
- 分析我们想要数据内容在哪里?
请求那个网站, 可以得到相应的数据 - 抓包分析, 我们想要数据内容 在哪里
通过开发者工具抓包分析… 会用 1 不会用 2
F12 或者 鼠标右键点击检查 选择 network <网络>
通过关键字搜索 可以找寻相关数据包 —> 查看 headers
二. 代码实现步骤:
- 发送请求, 模拟浏览器对于url地址发送请求
- 获取数据, 获取服务器返回响应数据 ----> 对应 开发者工具里面 response
- 解析数据, 提取我们想要数据内容 基本信息
- 保存数据, 保存表格里面 / 图片可以保存到文件夹里面
采集所有对象数据信息 —> 做一些简单可视化图表 —> 可以实现颜值检测 分析那个对象最好看
为什么实现颜值检测,为什么要分析
因为先看脸哈哈,有眼缘才有后续!!
实现代码
完整源码/疑问解答👉点击文末名片
# 导入数据请求模块 ---> 第三方模块 需要cmd里面 pip install requests
import requests
# 导入数据解析模块 ---> 第三方模块 需要cmd里面 pip install parsel
import parsel
# 导入csv模块 ---> 内置模块 不需要安装
import csv
# 创建文件
f = open('对象_1.csv', mode='a', encoding='utf-8', newline='')
csv_writer = csv.DictWriter(f, fieldnames=[
'标题',
'幸运号',
'性别',
'年龄',
'星座',
'年薪',
'学历',
'身高',
'爱情宣言',
'照片',
'详情页',
])
# 写入表头
csv_writer.writeheader()
# 网址 列表页面url
link = 'https://www.**平台不让发 需要的+wx:xiaoyuanllsll'
# 模拟浏览器headers
headers = {
'Cookie': '_',
'Host': 'www.19lou.com',
'Referer': 'https://www.19lou.com/r/1/19lnsxq-4.html',
'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_1 = requests.get(url=link, headers=headers)
# 获取数据 print(response_1.text)
# 解析数据
selector_1 = parsel.Selector(response_1.text)
# css提取内容
title_list = selector_1.css('.item-hd h3::text').getall() # 获取标题
# 获取链接
href = selector_1.css('.item-bd .cont a::attr(href)').getall()
# for循环
for title, index in zip(title_list, href):
# 把http替换成https
url = index.replace('http:', 'https:')
"""
1. 发送请求, 模拟浏览器对于url地址发送请求
- python代码 如何模拟浏览器发送请求
请求头 是字典数据类型, 我们构建完整键值对形式
- 如何替换内容
ctrl + R 会弹出框框 输入正则命令
(.*?): (.*)
'$1': '$2',
- <Response [200]> 表示请求成功
但是不代表你得到数据...
- response = requests.get(url=url, headers=headers)
response 自定义变量 自己定义变量
requests.get() 调用requests模块里面get方法
url=url 左边url是get函数里面形式参数 右边url是我们传递进去的参数
"""
# 确定请求url地址
# url = 'https://www.**平台不让发 需要的+wx:xiaoyuanllsll'
# 模拟浏览器发送请求 headers请求头
headers = {
'Cookie': '',
'Host': 'www.19lou.com',
'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 [200]> 表示请求成功
# requests模块里面get请求方法对于url地址发送请求, 并且携带上headers请求头伪装, 最后用response自定变量接受返回数据
response = requests.get(url=url, headers=headers)
# 2. 获取数据, 获取服务器返回响应数据 ----> 对应 开发者工具里面 response print(response.text)
"""
3. 解析数据, 提取我们想要数据内容 基本信息
bs4 lxml parsel.... 解析模块
- 解析方法: 都要学习掌握, 没有最好的 ---> 只有最适合的
re: 直接对于字符串数据进行提取
css: 根据标签属性提取数据内容
xpath: 根据标签节点提取数据内容
今日选择css选择器:
根据标签属性提取数据内容
都需要进行类型转换: 转成可解析对象
因为我们得到 response.text ---> 字符串数据类型
"""
# 转换数据类型 <Selector xpath=None data='<html>\n<head>\n <meta charset="gb23...'>
selector = parsel.Selector(response.text)
# 使用css提取数据 不会 2 会的 1 ---> 会复制么 ctrl + c ctrl + v
# replace() 字符串替换
love_num = selector.css('.love-blind-female .love-blind-info p::text').get()
if love_num:
love_num = love_num.replace('爱情幸运号:', '')
# split() 字符串分割
info_list = selector.css('.love-blind-female .love-blind-info .mt10::text').get().split(',')
# 列表索引位置取值
sex = info_list[0] # 性别
age = info_list[1] # 性别
constellation = info_list[2] # 星座
money = info_list[3] # 年薪
edu = info_list[4] # 学历
height = info_list[5] # 身高
love_txt = selector.css('.love-blind-female .love-blind-info .love-blind-txt::text').get()
img_url = selector.css('.view-cont .thread-cont img::attr(src)').get().replace('http:', 'https:')
# ctrl + D
dit = {
'标题': title,
'幸运号': love_num,
'性别': sex,
'年龄': age,
'星座': constellation,
'年薪': money,
'学历': edu,
'身高': height,
'爱情宣言': love_txt,
'照片': img_url,
'详情页': url,
}
csv_writer.writerow(dit)
print(img_url)
# 获取图片数据
img_content = requests.get(url=img_url).content
with open('img\\' + title + '.jpg', mode='wb') as f:
f.write(img_content)
print(dit)
最后
文章分享到这里就结束了
如果还有什么不懂的可以留言或者私信,也可以点击文末名片哦
帮自己还是帮兄弟就看你自己了!