目录
前言
1.需求分析
1.1该要什么
1.2分析招聘信息
1.2.1查看一级页面信息
1.2.2查看二级页面信息
1.2.3查看下一页信息(涉及AJAX反爬)
1.3爬取思路
1.4(附)selenium使用教程
2.项目实施
2.1环境准备
2.2设计工程
2.2.1创建爬虫文件
2.2.2构建driver对象
2.2.3构建访问入口函数
2.2.4构建爬取一级页面信息函数
检查个屁不用检查了,现在拉勾网更新了,我要重写了
等我回来
前言
为提升我们获取信息的综合能力,我们以反爬机制较强的拉勾网为例,讲解如何使用反反爬技术获取招聘网站的全面信息。如若侵权,请联系本人删除。
1.需求分析
为了能获取拉勾网的招聘信息,我们首先应该做的就是需求分析。
1.1该要什么
对于即将步入社会的我们,当然要知道未来就业公司状况,对于我来说首先呢就是查看岗位要求,学历要求确定自己是否符合条件,其次就是薪水范围再者就是工作地址等等。
1.2分析招聘信息
1.2.1查看一级页面信息
开始访问拉勾网https://www.lagou.com/,可以看到首页提供的职位还是蛮多的。
点击搜索框搜索java,选中一个岗位名称后点击右键->检查,岗位名称可在右侧找到。同理我们选中月薪,经验要求,公司名称等都能在右侧相应位置找到。
经过匹对后岗位名称,公司名称,月薪等也都在li节点下存有信息,而且分布有规律,即每一条招聘岗位的很多信息都分布在同级的li节点下,所以我们等会用xpath路径时候可以直接从li节点的属性值获取信息。
获取首页信息是不够的,比如没有岗位的具体要求和地址,所以我们要进入招聘信息的二级页面。在这之前我们要先找一下这里的源码有无二级页面的网址,这对接下来的步骤起很关键的作用。
在li节点的下的子节点大概的找了一下发现二级页面的网址还是存在的。
1.2.2查看二级页面信息
进入二级页面,有职位诱惑,职位描述,和工作地址。职位诱惑在一级页面可以获取我就不再多述。
老规矩,分别选中职位描述和工作地址查看可以发现源码都是存在的,可以直接获取。
1.2.3查看下一页信息(涉及AJAX反爬)
我们回到一级页面,滑到底部选择下一页右击检查,发现这里没有下一页的地址!
因为招聘网采用了AJAX技术,实现了前后端分离,并且请求参数以POST表单的形式提交。如果使用scrapy的话需要进一步分析招聘列表获取动态加载招聘列表的数据接口之后才能获取下一页数据。过程较为复杂,不容易理解,因此我选择了selenium。用selenium的话直接发生点击下一页的动作即可。
但如果直接在拉勾网首页进入一个岗位的话,会有下一页网址,比较简单,但没必要。
因为selenium,点击,输入那些动作都是轻而易举的,既然用了它,那么搞的华丽一点又何妨呢。
1.3爬取思路
我们知道了如何获取每一部分的招聘信息,现在就把思路串联起来。
使用selenium访问拉勾网首页,在搜索框搜索自己心仪的岗位,等跳转到一级页面后使用selenium的find_elements的方法获取职位名称,月薪,公司名称,以及二级页面的网址信息等,然后访问二级页面,继续用find_elements方法获取岗位需求和工作地址。爬取完成后点击下一页重复上面的步骤进行爬取。至于selenium的使用,可以看一下这篇文档。
1.4(附)selenium使用教程
对于selenium还不太了解的同学可以看一下这篇文章,可以让你基本入门。
selenium的配置与使用_lishuaigell的博客-CSDN博客来,看了你就会https://blog.csdn.net/lishuaigell/article/details/121451195
2.项目实施
2.1环境准备
PyCharm Community Edition 2021.2.1,selenium4.0.+
2.2设计工程
2.2.1创建爬虫文件
进入pycharm,找到右上角file,点击new project,创建LagouEmployment_CSDN文件。
之后就进入到了我们熟悉的界面。
2.2.2构建driver对象
构建driver对象我们必须有要访问的目标网址,和EdgeDriver的路径,使用webdriver时要导入webdriver包。因为实现后续每一步操作都要使用driver,所以在主函数上面定义。前面说过,我们爬取招聘信息是要在搜索框输入岗位实现自定义访问,所以我们要用input接收想要爬取的字符串。
kw = input('请输入您要想查找的岗位:')
这个交互要放在哪里好呢?适宜放在driver启动前。因为driver启动后会弹出一个浏览器,影响操作,所以要在他弹出前对kw赋值。这里的代码就是:
# 用这个路径导包可以正常使用,用pycharm推荐路径导包可能会执行出错
from selenium import webdriver
if __name__ == '__main__':
url = 'https://www.lagou.com/'
driver_path = 'C:edgedriver_win64msedgedriver.exe'
# 自定义查询岗位
kw = input('请输入您要想查找的岗位:')
# 启动driver
driver = webdriver.Edge(driver_path)
2.2.3构建访问入口函数
构建一个名为entrance的访问入口函数,用来进入拉勾网和搜索岗位。注意:拉勾网有严格的反爬机制,为模拟人访问,我们每执行一些代码时应停止操作一段时间。所以要引进time.sleep函数。现在看一下用selenium拉勾网跟平时我们访问的有什么不同。
# url = 'https://www.lagou.com/' 在主函数上创建的url driver.get(url)
发现会弹出切换城市的浮窗。因为selenium开启的是一个全新纯净的浏览器,所以弹出的是初次访问拉勾的页面。
为此我们要关闭浮窗才能进行下一步操作。
选择一个心仪的城市,我的话要么选广州,要么选深圳。因为深圳岗位多一点,工资高一点所以我选择深圳。对深圳右击检查,确定源码中位置
复制xpath路径
然后使用find_element_xpath()的方法查找元素,并click()点击元素
driver.find_element_by_xpath('//*[@id="changeCityBox"]/ul/li[6]/a').click() # 切换至深圳站,因为深圳IT岗位较多
之后进入到首页,为了能输入自定义字符串,我们右击检查搜索框
发现有‘input’字段,那就说明我们找对了,
现在我们就要定位这个元素位置,用send_keys方法向其传入字符串。这次不用xpath查找,换另外一种方法。
ipt = driver.find_element_by_id("search_input")
ipt.send_keys(kws)
传入字符串后接着就是点击搜索了。我们右击检查搜索
确定元素位置后click()一下,就能搜索了。完整代码如下:
import time
def entrance(urls, kws):
driver.get(urls)
time.sleep(2)
# 注意elements 与 element的区别 elements返回的是列表,无法点击
driver.find_element_by_xpath('//*[@id="changeCityBox"]/ul/li[6]/a').click() # 切换至深圳站,因为深圳IT岗位较多
ipt = driver.find_element_by_id("search_input")
ipt.send_keys(kws)
time.sleep(2)
driver.find_element_by_id("search_button").click()
time.sleep(2)
注意:entrancce的两个参数由主函数传递进来。每执行一段程序建议休眠一段时间,休眠时长根据自身网络配置自行调整。
主函数添加这行代码:
运行后就能对进行拉勾初步访问了
2.2.4构建爬取一级页面信息函数
构建名为get_information的函数,用于爬取一级页面的招聘信息。现在,我要爬取这些数据
岗位名称, 月薪,公司名称,公司福利四项数据。
首先选中岗位名称右键检查
检查个屁不用检查了,现在拉勾网更新了,我要重写了
早上写博客还好好的,现在就不行了



