代码已经上传到github上

简介:

这是一个基于python3而写的爬虫,爬取的网站的脉脉网(https://maimai.cn/),在搜索框中搜索“CHO”,并切换到“人脉”选项卡,点击姓名,进入详情页,爬取其详细信息

获取的具体信息有:

基本信息、工作经历、教育经历、职业标签及其认可数、点评信息

几度关系:一度、二度、三度等

写给用户的

注意:如果你只是想使用这个项目,那么你可以看这里

如何使用:

使用之前,你要已经保证安装好相关的库和软件:

re

requests

selenium

logging

pymysql

chrome

mysql

使用:

从github上复制代码

填写自己的脉脉手机号和密码(你可以在login.py文件中找到他)

建表(详细建表见下)

运行程序login.py

详细建表

需要5张表,下面附上代码:

表1:basic_info(脉脉好友基本信息)

CREATE TABLE `basic_info` (

`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',

`name` varchar(56) NOT NULL COMMENT '名字',

`mmid` int(11) NOT NULL COMMENT 'mmid',

`rank` int(11) DEFAULT NULL COMMENT '影响力',

`company` varchar(128) DEFAULT NULL COMMENT '目前公司简称',

`stdname` varchar(128) DEFAULT NULL COMMENT '目前公司全称',

`position` varchar(128) DEFAULT NULL COMMENT '目前职位',

`headline` text COMMENT '自我介绍',

`ht_province` varchar(128) DEFAULT NULL COMMENT '家乡-省',

`ht_city` varchar(128) DEFAULT NULL COMMENT '家乡-城市',

`email` varchar(128) DEFAULT NULL COMMENT '邮箱',

`mobile` varchar(128) DEFAULT NULL COMMENT '手机',

`dist` tinyint(1) DEFAULT NULL COMMENT '几度关系',

PRIMARY KEY (`id`),

UNIQUE KEY `mmid` (`mmid`)

) ENGINE=InnoDB AUTO_INCREMENT=873 DEFAULT CHARSET=gbk ROW_FORMAT=DYNAMIC COMMENT='脉脉好友基本信息'

]

表2:education_exp(脉脉好友教育经历)

CREATE TABLE `education_exp` (

`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',

`mmid` int(11) NOT NULL COMMENT 'mmid',

`school_name` varchar(128) DEFAULT NULL COMMENT '学校名称',

`department` varchar(128) DEFAULT NULL COMMENT '专业',

`education` int(5) DEFAULT NULL COMMENT '学历(0:专科,1:本科,2:硕士,3:博士,255:其他)',

`start_year` int(11) DEFAULT NULL COMMENT '开始时间(年)默认为0000',

`start_mon` int(11) DEFAULT NULL COMMENT '开始时间(月)默认为0000',

`end_year` int(11) DEFAULT NULL COMMENT '结束时间(年)默认为0000',

`end_mon` int(11) DEFAULT NULL COMMENT '结束时间(月)默认为0000',

PRIMARY KEY (`id`),

UNIQUE KEY `mmid` (`mmid`,`school_name`,`education`,`start_year`)

) ENGINE=InnoDB AUTO_INCREMENT=1064 DEFAULT CHARSET=gbk ROW_FORMAT=DYNAMIC COMMENT='脉脉好友教育经历'

表3:review_info(脉脉好友点评信息)

CREATE TABLE `review_info` (

`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',

`mmid` int(11) NOT NULL COMMENT 'mmid',

`reviewer` varchar(128) DEFAULT NULL COMMENT '点评人',

`relationship` varchar(128) DEFAULT NULL COMMENT '关系',

`position` varchar(128) DEFAULT NULL COMMENT '点评人职位',

`eva_info` text COMMENT '评价信息',

PRIMARY KEY (`id`),

UNIQUE KEY `mmid` (`mmid`,`reviewer`)

) ENGINE=InnoDB AUTO_INCREMENT=400 DEFAULT CHARSET=gbk ROW_FORMAT=DYNAMIC COMMENT='脉脉好友点评信息'

表4:tag_info(脉脉好友点评信息)

CREATE TABLE `tag_info` (

`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',

`mmid` int(11) NOT NULL COMMENT 'mmid',

`tag` varchar(128) DEFAULT NULL COMMENT '标签',

`rec_num` varchar(128) DEFAULT NULL COMMENT '认可度',

PRIMARY KEY (`id`),

UNIQUE KEY `UNIQUE` (`mmid`,`tag`,`rec_num`)

) ENGINE=InnoDB AUTO_INCREMENT=5881 DEFAULT CHARSET=gbk ROW_FORMAT=DYNAMIC COMMENT='脉脉好友点评信息'

表5:work_exp(脉脉好友工作经历)

CREATE TABLE `work_exp` (

`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',

`mmid` int(11) NOT NULL COMMENT 'mmid',

`company` varchar(128) DEFAULT NULL COMMENT '公司简称',

`stdname` varchar(128) DEFAULT NULL COMMENT '公司全称',

`et_url` varchar(244) DEFAULT NULL COMMENT '公司页面url',

`description` text COMMENT '描述',

`start_year` int(11) DEFAULT NULL COMMENT '开始时间(年)默认0000',

`start_mon` int(11) DEFAULT NULL COMMENT '开始时间(月)默认0000',

`end_year` int(11) DEFAULT NULL COMMENT '结束时间(年)默认0000',

`end_mon` int(11) DEFAULT NULL COMMENT '结束时间(月)默认0000',

`position` varchar(128) DEFAULT NULL COMMENT '职位',

PRIMARY KEY (`id`),

UNIQUE KEY `UNIQUE` (`mmid`,`company`,`start_year`,`position`)

) ENGINE=InnoDB AUTO_INCREMENT=2582 DEFAULT CHARSET=gbk ROW_FORMAT=DYNAMIC COMMENT='脉脉好友工作经历'

写给开发者的

如果你是一个开发者,那么请看这里

具体的每个函数的作用,就不细说了,代码中有注释,可以自行查看

请求:

在这里我们主要说说请求这一块:

请求需要解决2个问题:

第一个是使用cookies模拟登陆

第二个是数据获取

模拟登陆

这是使用selenium驱动浏览器登录脉脉,然后获取cookie这样来就省去了自己去拼接cookie的麻烦,获取到cookie之后,在利用cookie来进行requests请求数据,这里不再使用selenium是因为selenium太慢,而且比较容易出错

看一下代码,思路是:

设置selenium参数

使用selenium打开到登录网址

输入手机号和密码,进行登录

获取cookies,并存到json文件中

这样就获取cookies成功了,之后将cookies添加到requests请求中,进行数据获取

def get_cookies():

"""

使用selenium获取cookies的值,将其存在文件中

:return:

"""

logger.info("使用selenium获取cookies")

chrome_options = Options()

chrome_options.add_argument('--no-sandbox') # 解决DevToolsActivePort文件不存在的报错

chrome_options.add_argument('--disable-gpu') # 谷歌文件提到需要加这个属性来规避bug

chrome_options.add_argument('--headless') # 无界面设置

chrome = webdriver.Chrome(chrome_options=chrome_options)

login_url = "https://acc.maimai.cn/login"

chrome.get(login_url)

wait = WebDriverWait(chrome, 10)

wait.until(EC.element_to_be_clickable(('xpath', "//input[@class='loginBtn']")))

time.sleep(1)

user_name = "***" # 你的手机号

password = "***" # 你的密码

chrome.find_element("xpath", "//input[@class='loginPhoneInput']").send_keys(user_name)

time.sleep(1)

chrome.find_element("xpath", "//input[@id='login_pw']").send_keys(password)

chrome.find_element('xpath', "//input[@class='loginBtn']").click()

cookies = chrome.get_cookies()

with open("cookie.json", "w+")as f:

f.write(json.dumps(cookies))

f.close()

logger.info("cookies获取成功")

chrome.close()

数据获取

这里面主要有2个问题:

第一个网站使用了ajax加载,我们需要找到我们需要的url

第二个是获取的html需要进行处理,才能被我们所利用

ajax加载

如图,我们可以在这里找我们需要的数据,这个是url:https://maimai.cn/search/cont...,这里获取的是json格式的数据,非常好解析,再进一步去获取详细信息的页面的时候,其方法也是一样的,这里就不多做说明了

html页面数据处理的问题

有一部分的数据是以json的形式返回给我们的,但是还有一些数据是在原网页中一起返回的,虽然也是json的形式,但是处理起来还是有一定的麻烦,看一下原网页的数据

这个JSON.parse后面的数据也是我们需要的,可以发现这里有一些像"u0022"的数据,这个其实是双引号的utf8编码,还有一些其他的字符,会以utf8编码的形式返回的,直接处理很不好处理,我们先将这些字符编码替换为对应的字符,之后转成json的格式进行解析,这样就方便多了,看一下代码:

def json_info(html):

"""

处理获取的html,转换为json格式

:param html:

:return:

"""

print(html.text)

c = re.search('JSON\.parse\("(.*?)"\);

data = json.loads(d)

return data

思路是很简单的:

先是将用正则匹配所需要的数据

拿下来之后将一些utf8编码的字符替换掉

转换为json的格式进行解析

主要需要解决的问题就只有这些,其他的一些数据处理,存储都是很简单和常见的,就不多做说明了

python获取app信息的库_基于Python的模拟登陆获取脉脉好友信息相关推荐

  1. python人脸识别库_基于Python的face_recognition库实现人脸识别

    Python Python开发 Python语言 基于Python的face_recognition库实现人脸识别 一.face_recognition库简介 face_recognition是Pyt ...

  2. python爬取微博用户正文_基于Python的新浪微博用户信息爬取与分析

    基于 Python 的新浪微博用户信息爬取与分析 邓文萍 [摘 要] 摘要:本文设计并实现了一个微博用户信息爬取与分析系统 , 利用 Cookie 实现了用户的模拟登录 , 使用 Python 语言的 ...

  3. python关于二手房的课程论文_基于python爬取链家二手房信息代码示例

    基本环境配置 python 3.6 pycharm requests parsel time 相关模块pip安装即可 确定目标网页数据 哦豁,这个价格..................看到都觉得脑阔 ...

  4. python的图书管理项目教程_基于python图书馆管理系统设计实例详解

    写完这个项目后,导师说这个你完全可以当作毕业项目使用了,写的很全,很多的都设计考虑周全,但我的脚步绝不止于现在,我想要的是星辰大海!与君共勉! 这个项目不是我的作业, 只是无意中被拉进来了,然后就承担 ...

  5. python中numpy数组的合并_基于Python中numpy数组的合并实例讲解

    基于Python中numpy数组的合并实例讲解 Python中numpy数组的合并有很多方法,如 - np.append() - np.concatenate() - np.stack() - np. ...

  6. python怎样使用各个日期赤纬_基于Python的天文软件命令行界面设计与实现

    计算机软件技术的不断发展,推动了人机交互技术的长足进步.从传统的命令行(Command Line Interface,CLI),到图形用户界面(Graphical User Interface,GUI ...

  7. python分布式爬虫开题报告范文_基于Python的豆瓣Top250排行榜影片数据爬取和分析开题报告...

    一.选题依据:(简述研究现状,说明该毕业设计的设计目的及意义) 研究现状 Python是一门很全面的语言,又随着大数据和人工智能的兴起,广受爬虫设计者们的青眯.设计者们运用Python语言的框架-Sc ...

  8. 基于python的爬虫系统金融数据_基于Python的互联网金融数据采集

    基于Python的互联网金融数据采集 □文/王 蕾1安英博1刘佳杰2 [提要] 互联网金融数据中潜藏着未知的知识价值,但也存在着巨量的数据冗余.通过Python可以进行互联网金融数据的获取.解析.提取 ...

  9. 基于python的公众号课堂教学_基于Python的微信公众号数据挖掘分析

    基于Python的微信公众号数据挖掘分析 华南农业大学电子工程学院 王 建 黄宁香 [期刊名称]电子世界 [年(卷),期]2019(000)011 [总页数]3 运用Python网络爬虫技术对某时事类 ...

最新文章

  1. 20+ 个很棒的 jQuery 文件上传插件或教程(此文值得“推荐”和“收藏”)
  2. php中session中的变量未定义,我的PHP页面SESSION变量无法储存该怎么办?
  3. 开放下载!《大促背后的前端核心业务实践》
  4. 使用while 循环实现输出 1, 2, 3, 4, 5, 7, 8, 9, 11, 12(提示:输出结果为一行,没有6和10,12后面没有逗号)
  5. java提示找不到或无法加载主类
  6. 前端学习(2851):简单秒杀系统学习之相对定位
  7. vue和微信小程序的区别、比较
  8. springcould结合springbboot微服务 开发@^——^@ 模式讲解
  9. MySQL Batch 与 Transaction
  10. m_Orchestrate learning system---二十九、什么情况下用数据库做配置字段,什么情况下用配置文件做配置...
  11. 8 更新全局变量_2月26日守望先锋版本更新
  12. Effective JavaScript Item 37 认识this的隐式指向
  13. Ubuntu4.04 安装Mesos
  14. 基于python/opencv/tesseract使用传统方法的,表格图片版面分析以及印刷体汉字识别(持续更新,学习备份用)
  15. ICPC World Finals 2015 D题 - Cutting Cheese 【二分答案】【球缺体积公式】
  16. left join 多表关联查询
  17. android应用市场 更新,当贝市场(com.dangbeimarket) - 4.2.9 - 应用 - 酷安
  18. windows win7电脑搜索功能失效怎么修复
  19. 青少年软件编程C++一级题库(31-40)
  20. html账号输入框整体透明,HTML在透明输入框里添加图标的实现代码

热门文章

  1. tkMyBatis执行insert返回主键
  2. 机器学习实践:动物图片识别-1
  3. 服务器系统剪辑视频,天影视通 影视后期剪辑工作站 EDIUS剪辑主机 视频编辑制作服务器...
  4. 如何共享打印机? 按照提示做就可以了~
  5. Fluent验证案例43:平板边界层转捩
  6. #css动画# 【四】如何实现鼠标经过盒子,盒子向上移动且有阴影?
  7. VA番茄助手支持vs2017
  8. 使用matlab制作gif动图
  9. CSS 3.0实现猫脸动画
  10. sdf- standrad dealy format