import requests
from pyquery import PyQuery as pq
from bs4 import BeautifulSoup
import re
import datetime#首先通过chrome获得headers,包括user-agent和cookie
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36','Cookie': 'tips=1; V7Qq_2132_smile=1D1; nodeId=_all; nodeType=1; V7Qq_2132_saltkey=jE3E1veZ; V7Qq_2132_lastvisit=1540778092; warning=1; TimeOut=-1; LoginTime=1541143580000; ShowAlert=0; ShowTimeOut=0; V7Qq_2132_editormode_e=1; V7Qq_2132_ulastactivity=be5f8Jd10mhLpV65dxvLP0K1%2BKlfS7mfpC74GPDlXhH0gJSJoiAR; V7Qq_2132_forum_lastvisit=D_36_1541556325; V7Qq_2132_visitedfid=48D36D46D131D53D42D45D39D37D40; PD_STATEFUL_e2a6d2b4-9490-11e6-952f-d8d385a4d314=%2FMultiSeUn; logintype=4; vfCode=uDYGxC; tivoli_loginname=zhanglei1; auth_flag=true; PD-H-SESSION-ID=4_mVnmIh2aciCM3p83ix2dAy5ASdFUA+eErAe8HfXym7XLVZJX; loged=4_mVnmIh2aciCM3p83ix2dAy5ASdFUA+eErAe8HfXym7XLVZJX; messageStr=%u4E0A%u6B21%u767B%u5F55%u65F6%u95F4%uFF1A%3Cfont%20color%u7B49%u4E8E%27yellow%27%3E2018-11-07%2019%3A18%3A22%3C/font%3E%uFF0CIP%uFF1A%3Cfont%20color%u7B49%u4E8E%27yellow%27%3E10.7.31.170%3C/font%3E; goto_url=/; AMWEBJCT!%2FportalserverU!JSESSIONID=0000Yj0K3_CQF9zfidzS0LuSFyw:1a4c3h4fl; ltpacreatetime=1541637238384; acc_valid=1; AMWEBJCT!%2Fportalwas1!JSESSIONID=0000GGz5NFSVoynZVO4PiccMllM:1a3qoeddj; mssPortalPreLogin=0; PD_STATEFUL_a2d06bb2-9f14-11e1-9654-0050561100ae=%2Fappserver; AMWEBJCT!%2FIDAP!JSESSIONID=E802784C0A2987E82501D76C1008410E; Coremail.sid=BAKDKuBBUHYtxYGcJWBBXFTiAMtOESTx; updatesessiontime=1541642831; AMWEBJCT!%2Fportalserver!JSESSIONID=0000Dqyy57wnLWYjUcskCGp_-PW:14q3sh66a; LtpaToken=x5qkJ7PIdJ36dd3xp+WPwGG8KyvONhpP6LUAK5mJKm6q+7vewMmlzZsUNch+tED1xN8hjrf6JeJ/mP+G7jlYr4VpPYwLf6FW2ZnHCndRB0MaZIpEGUmWZRWwaoI5cs/42A+/QIWYCFJpn7L2RJ34eYoQoHNVwr5oWXkbFGArfUWlPjf1p+rEXhk8lAjWHxpHMR500Colf3GTIKKQoIqIwW1AwjsbFuK0SfGzuEh8WI3Iy3VCcxBo8vTEMOHOh4DHJhrJ6esQzRVszXNesWgOP5f1hl/AfBrPbbgNEnuupUj0cxT+PKIUKj0x7uIYM6PQC9h19EnprymCc6dAF0vZxmMnaYeAVfWz; AMWEBJCT!%2Fportalserver!JSESSIONID2=0000HvsQzC2kC1VsMmrl9OZqLjI:14q3sgu18; MssSsoToken=QW6uLAypiih/mW33jw2kbkF2L1vA6RZjaBVUrTGH/gA=; AMWEBJCT!%2Fpwas_virtual!JSESSIONID=0000xtpzPuILdJxOu3r2w2rAxoT:1amslq7b0; AMWEBJCT!%2Fappserver!JSESSIONID=0000TRD1aVMFw3IVSfIj1aKqRDw:16saotmp4'
}#获取该部门通讯录的最大页数
def Part_List(part_Name,part_ID):url = r"http://www.sh.ctc.com/CompanyAddressListNew/newDeptShow.do?method=doSearch&ZDWID="+part_ID+"&currentPage=1&orderIndex=&orderSign=1&str=all&isVirtal=no"r = requests.get(url=url, headers=headers)r.encoding = 'utf-8'soup = BeautifulSoup(r.text, 'lxml')totalPage = int(soup.find(name='input',attrs={'name':'totalPage'})['value'])#通过正则表达式获得该部门的总人数temp_renshu = soup.find(name='b',attrs={'f-fam1'}).stringif temp_renshu == '没有找到记录.':print("部门:{}没有找到记录".format(part_Name))return temp_renshuelse:renshu = int(re.search('\D\D(\d+)\D',temp_renshu).group(1))print("正在爬取部门:{}{}人的信息".format(part_Name, renshu))return totalPage#获取每一页中每个员工的id和姓名拼音
def get_Agent(totalPage,part_ID):for j in range(totalPage+1):url = r"http://www.sh.ctc.com/CompanyAddressListNew/newDeptShow.do?method=doSearch&ZDWID="+part_ID+"&currentPage="+str(j)+"&orderIndex=&orderSign=1&str=all&isVirtal=no"r = requests.get(url=url, headers=headers)r.encoding = 'utf-8'soup = BeautifulSoup(r.text, 'lxml')agent_clickView = soup.find_all(name='div',attrs={'style':'cursor: pointer;'})for i in range(len(agent_clickView)):clickView = str(agent_clickView[i]).split("'")agent_id = clickView[1]agent_py = clickView[3]virtualType = clickView[5]single_agent(agent_id,agent_py,virtualType,part_ID)#获取单个员工的信息并导出
def single_agent(agent_id,agent_py,virtualType,part_ID):url = r"http://www.sh.ctc.com/CompanyAddressListNew/newDeptShow.do?method=doViewLayer&id="+agent_id+"&isVirtal=no&zygzh="+agent_py+"&ZDWID="+part_ID+"&virtualType="+virtualTyper = requests.get(url=url, headers=headers)r.encoding = 'utf-8'soup = BeautifulSoup(r.text, 'lxml')staff_detail = []for td in soup.select('td'):staff_detail.append(td.text.strip())#删除列表中不需要的元素del staff_detail[2]del staff_detail[7]del staff_detail[10:14]#把获得的员工信息导出到文件中with open('上海电信通讯录.txt', 'a', encoding='utf-8') as file:file.write(','.join(staff_detail))file.write('\n')#获得每一个三级部门的部门名称和部门id(如浦东电信局)
starttime = datetime.datetime.now()
url = 'http://www.sh.ctc.com/CompanyAddressListNew/deptCustom.do?method=loadMenuData'
response = requests.get(url, headers=headers)
json = response.json()
for i in json:if i.get('jt_code'):part_ID = i.get('jt_code')part_Name = i.get('name')totalPage = Part_List(part_Name, part_ID)if totalPage == '没有找到记录.':continueelse:get_Agent(totalPage, part_ID)else:continue
endtime = datetime.datetime.now()
total_time = (endtime - starttime).seconds
print("员工数据爬取完毕,总共耗时{}秒".format(total_time))

收获:进一步优化了昨天的代码,同时员工信息从原来的主菜单扩展到了分菜单获取(具体就是打开了一个新的窗口,获得更详细的数据),而员工的id等关键字由主菜单获取
同时加强了基础的学习:列表的删增和导出、soup的字段查找和数据获取等
明天计划:继续爬公司内部通讯录,获得每一个员工的图片并导出
2018年11月8日更新:已把代码优化,可以准确爬取所有部门的数据了

学习爬虫第二天:继续爬公司内部的通讯录相关推荐

  1. 学习爬虫的第一天(公司内部oa通讯录初爬)

    用了requests和BeautifulSoup import requests from bs4 import BeautifulSoup import re#首先通过chrome获得headers ...

  2. python爬虫第二弹-多线程爬取网站歌曲

    python爬虫第二弹-多线程爬取网站歌曲 一.简介 二.使用的环境 三.网页解析 1.获取网页的最大页数 2.获取每一页的url形式 3.获取每首歌曲的相关信息 4.获取下载的链接 四.代码实现 一 ...

  3. 学习爬虫第二天 requests库

    一. requests基础 1. requets 作用 作用:发送网络请求,返回相应数据 中文文档API:reques介绍 2. requests中解决编码的方法 response.contnet.d ...

  4. Python爬虫第二课 Selenium介绍和反爬技术

    selenium的介绍 知识点: 了解 selenium的工作原理 了解 selenium以及chromedriver的安装 掌握 标签对象click点击以及send_keys输入 1. seleni ...

  5. 爬虫学习笔记-猫眼电影排行爬取

    爬虫学习笔记-猫眼电影排行爬取 1 分析页面 https://maoyan.com/board/4 点击页码发现页面的URL变成: 初步推断出offset是一个偏移量的参数,当页面为第一页时offse ...

  6. 以下用于数据存储领域的python第三方库是-Python3爬虫学习之MySQL数据库存储爬取的信息详解...

    本文实例讲述了Python3爬虫学习之MySQL数据库存储爬取的信息.分享给大家供大家参考,具体如下: 数据库存储爬取的信息(MySQL) 爬取到的数据为了更好地进行分析利用,而之前将爬取得数据存放在 ...

  7. 一个老鸟发的公司内部整理的 Android 学习路线图 Markdown 版本

    jixiaohua发了一篇一个老鸟也发了一份他给公司内部小伙伴整理的路线图.另一份 Android 开发学习路线图.可惜不是MarkDown格式的,所以jixiaohua直接上传的截图,在jixiao ...

  8. 工作汇报ppt案例_美国苹果公司内部年终汇报PPT曝光!网友:职场范十足,学习了...

    先问一个问题: 你的2019年工作汇报PPT做完了吗? 2019年马上就要结束了,各大公司的年会又开始了,伴随这年会来的是年终总结PPT的制作,很多人都因为这个事情在头秃,后台也有很多读者一直在询问, ...

  9. 伊朗第二大航空公司内部系统遭到网络攻击

    本周一,据伊朗官方媒体报道,伊朗第二大航空公司马汉航空(Mahan Air)在官方推特账号上发布声明,称公司已确认遭受网络攻击,但该航空公司的航班运营并未受到本次攻击的影响. 据马汉航空公司表示,本次 ...

  10. Python疫起学习·万丈高楼平地起Day09(精简版|浓缩就是精华)爬虫知识附上案例爬取北京地区短租房信息、爬取酷狗TOP500的数据以及爬取网易云音乐热歌榜单

    爬虫知识 Requests库 部分运行结果如下: 有时爬虫需要加入请求头来伪装成浏览器,以便更好地抓取数据.在Chrome浏览器中按F12键打开Chrome开发者工具,刷新网页后找到User-Agen ...

最新文章

  1. Android开发中Handler的经典总结
  2. 计算机及其系统的泄密渠道之三
  3. matlab中转置和裁剪,对Matlab中共轭、转置和共轭装置的区别说明
  4. 01Spring的helloworld程序
  5. 完整的聚合支付中心设计方案
  6. Java里面的几种路径的区别
  7. 信息学奥赛一本通 1242:网线主管 | OpenJudge NOI 1.11 04:网线主管
  8. 软件外部接口和内部接口_java中的内部类内部接口详解
  9. 【人工智能】《Python深度学习》
  10. java多线程中的调度策略
  11. 关于IMX6Dl 芯片使用硬编解码的问题记录
  12. dns预获取(dns-prefetch)link rel="dns-prefetch"优化载入速度
  13. 提高效率的十款Blender快捷键,更多快捷键等着你去探索
  14. c语言编程马克思手稿 百例,清华大学出版社-图书详情-《C语言趣味编程100例》...
  15. 计算机术语一种单向密码体制,密码体制有哪五部分
  16. 2015 iMac如何绕过TMP安装Windows11(不用Parallels虚拟机实现macOS与Windows11双系统)
  17. radio按扭设置只读_关于html:为什么单选按钮不能为“只读”?
  18. 一个在线运行的Taro小程序完整实例
  19. java 微分方程求解_解微分方程
  20. MATLAB编程之PTB: 实验暂停

热门文章

  1. redis数据库实例
  2. 安卓实现调用三方地图导航
  3. Awvs 12.x安装教程
  4. 关于源泉插件没有办法正常载入cad里的问题
  5. 用Python搞了个基金查询机器人,还可以拓展!
  6. 充值核销卡密恶意并发请求防止重复利用卡密充值成功解决方案
  7. 背包问题-递归思想(C语言)
  8. 飘云阁(PYG)番茄插件 弹窗清除
  9. 图片完整检查linux,Linux 下的免费图片查看器
  10. Java NumberFormat,DecimalFormat保存小数位数