拉勾网的反爬虫机制较强。数据加载采取的时异步AJAX技术,使用requests不能在网页源代码中直接找到职位信息的url,当然可以间接找到。这里我采取的是Selenium方法爬取拉勾网的职位信息,相比requests而言,在处理含有AJAX技术的网站时,Selenium会显得更加灵活、稳定!
这里我定义了一个LagouSpider()类,里面包含五个方法,将所有流程分成了五个步骤:
- 导入相应模块
- run()方法:分页设置,将单页源码传给parse_list_page()
- parse_list_page()方法:获取单页所有公司职位信息的url,将值依次传给request_detail_page()方法
- request_detail_page()方法:打开相应的url页面,获取其中的源码,将其传给parse_detail_page()方法后关闭
- parse_detail_page()方法:详细解析单个公司的职位信息
Selenium拉勾五步骤
1.导入相应模块
设置驱动浏览器,设置初始url,这里设置的初始url是"https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput="
2.run():分页设置
这里需要注意:
1.Selenium自动登录拉勾网时会出现一个"给也不要"的窗口,这里我们设置自动点击
2.设置页面等待,确保没有数据时出现阻塞现象,确保在网页加载过程中没有数据而抛出异常
3.Parse_list_page():
4.Request_detail_page():
这里需要注意的是:打开页面的方式应该用execute_script(),并且通过switch_to.window()方法跳转到新页面,而不是用get()方法,get()方法会重置页面,进而实现不了对多个页面的爬取。
5.parse_detail_page():
得到request_detail_page()传递的源码,解析职位信息
以上代码就能实现Selenium爬取拉勾网的功能,看看爬取效果:
这些,就是我爬取拉勾网的心得体会,若是觉得有值得改进的地方,欢迎下方评论。
最后,声明一点,此爬虫的目的仅供学术研究,万不可做一些违法乱纪的事情哦。