selenium+lxml爬取(查询)拉勾网职位信息

拉勾网: 是一家专为拥有3至10年工作经验的资深互联网从业者,提供工作机会的招聘网站。拉勾网专注于在为求职者提供更人性化、专业化服务的同时,降低企业端寻觅良才的时间和成本。拉勾网致力于帮助互联网人士做出更好的职业选择,让求职者每一次职业选择变的更加明智。
官网: https://www.lagou.com/

技术难度: 爬取拉勾网的技术难点主要是在它的反反爬虫机制,很容易就会触发它。我曾经看网上的视频教程,拉勾网的反爬虫做了很多的更新,所有直接就连网页的源码也获取不了就被反爬虫了。后来尝试了headers,cookie,代理IP,但是都失败了。每次拉勾网的网页加载后,它的cookie值都是变化的,并且只能使用一次。

数据加载方式: 拉勾网的数据加载方式和很多的网站一样,使用json文件加载,随便搜索一个职位看看
在这里插入图片描述
从图中可以看出就是通过它加载这些数据信息的,复制它的路径在该浏览器打开试试
在这里插入图片描述
“操作频繁”,这不可能,我只是把它复制到浏览器打开而已,等了一段时间后,它还是这样。其实这就是遇到它的反爬虫了,就在当前浏览器打开也不行,因为它的cookie值就只能用一次。

解决方法: 使用selenium库,它可以模拟人做自动化测试,对付这个反爬虫虽说有点杀鸡用牛刀的嫌疑,但是效果的确非常棒。它可以获取网页源码,却不能解析网页源码,所以还导入lxml来提取HTML的信息。

实现思路

1、获取拉勾网URL

selenium可以从拉勾网的官网一步一步的自动进行,为了简便,就直接从选好工作后的链接进行了。在官网搜索职位,选择一个城市,就得到了URL。
在这里插入图片描述
现在就可以直接构造一个链接,把它的职位和城市传进去,为了模拟搜索,我就只是传了城市进去。

city = input("请输入您要查询的城市:")
url = 'https://www.lagou.com/jobs/list_python?px=default&city='+str(city)+'#filterBox'

模拟浏览器清空搜索框的职位后,重新输入职位信息

major = input("请输入您要查询的工作:")
driver = webdriver.Chrome()#控制浏览器,自动化
url = 'https://www.lagou.com/jobs/list_python?px=default&city='+str(city)+'#filterBox'
driver.get(url)#打开网页
inputJob = driver.find_element_by_xpath('//*[@id="keyword"]')#找到输入框
inputJob.clear()#清空输入框
inputJob.send_keys(major)#获得并输入刚才输入的工作
inputJob.send_keys(Keys.ENTER)#按回车键
2、自动获取网页中职位信息的页数

在这里插入图片描述
2.1、获取最大页数
从中可以看出最大的页数值就在倒数的第二个标签中,从倒数第二个span就可以获得它,并把它的类型转化成int型,作为循环的次数。

last_page = driver.find_element_by_xpath("//div[@class='pager_container']/span[last()-1]")
last_page = int(last_page.get_attribute("page"))#取到页数的数字
for i in range(1,last_page+1,1):#判断页面并限制循环次数,每个页面爬取一次
    print ("正在爬取第%s页......\n"% i)

2.2、点击下一页
拉勾网加载下一页后,该页面的URL并不会发生变化,所以就不能从URL入手了,只能通过点击下一页来完成获取下一个页面的信息。但是第一个页面的信息要完全获取完后才能点击下一页,在点击前必须要进行判断。

    while i>1:#第一次不执行,停止由最大页数循环控制
        next_page = driver.find_element_by_xpath("//div[@class='pager_container']/span[last()]")#获取下一页按钮
        next_page.click()#点击下一页
        break #跳出while循环,每次只做一次循环
3、获取网页源码

在获取网页或加载数据的地方,最好停5秒钟以上,防止被识破是爬虫程序

    time.sleep(5) #暂停五秒,注意反爬虫
    source = driver.page_source#获取该网页源码
4、解析并提取信息
html =
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值