Selenium爬取拉钩数据分析工作招聘内容

发表于:2019-9-20 10:26

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:小空白丶    来源:简书

  Abstract
  本文是爬虫项目第二篇,主要介绍了使用selenium爬取拉钩数据分析职位招聘信息的过程。
  WHY
  海投简历的了无音讯让我对自己对招聘市场的认知产生了怀疑,因此,想要对招聘市场行情进行分析,这是数据分析的前置步骤——数据获取。
  HOW
  本文使用python的selenium、BeautifulSoup、pandas等包爬取了拉钩搜索“数据分析”岗位所得的职位信息,并存入csv中。具体步骤:
  response获取。
  在拉钩主页搜索“数据分析”,定位为全国,取得url,构建bronser对象,使用bronser打开url
   from selenium import webdriver
  from bs4 import BeautifulSoup
  import time
  import pandas as pd
  bronser = webdriver.Chrome()
  bronser.get('https://www.lagou.com/jobs/list_%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90?px=default&city=%E5%85%A8%E5%9B%BD#order')
  url解析。
  第一层是一个循环,用于翻页。
  对于每一页,首先使用BeautifulSoup对html解析,使用soup.find()方法找到岗位列表,并使用bronser找到下一页按钮并构建对象。
  然后对岗位列表中的每一条岗位的岗位信息进行提取,并存入job_info列表中,然后将每条岗位信息列表存入job列表中。每一页的数据爬取之后,判断下一步按钮是否可以执行,如果可以则使用button.click()点击下一步,并且未防止出现验证,停留10s后继续运行
   job = []
  while True:
  soup = BeautifulSoup(bronser.page_source)
  list_of_position = soup.find('div',class_='s_position_list').find('ul').find_all('li')
  next_button = bronser.find_element_by_class_name('pager_next ')
  for i in list_of_position:
  company = i.get('data-company')
  companyid = i.get('data-companyid')
  hrid=i.get('data-hrid')
  positionid=i.get('data-positionid')
  positionname=i.get('data-positionname')
  salary=i.get('data-salary')
  tpladword=i.get('data-tpladword')
  location = i.find('em').string
  hr_position = i.find('input',class_='hr_position').get('value')
  position_tag = i.find('div',class_='li_b_l').text.split('\n')[-2]
  experience = position_tag.split('/')[0]
  education = position_tag.split('/')[1]
  company_tag = i.find('div',class_='industry').text.strip().split('/')
  industry = company_tag[0]
  financing = company_tag[1]
  company_scale = company_tag[2]
  position_describe = i.find('div',class_='list_item_bot').find('span').text
  company_describe = i.find('div',class_='list_item_bot').find('div',class_="li_b_r").text
  job_info = [positionid,positionname,company,companyid,hrid,hr_position,salary,tpladword,
  location,experience,education,industry,financing,company_scale,position_describe,company_describe]
  job.append(job_info)
  if 'pager_next_disabled' in next_button.get_attribute('class'):
  break
  next_button.click()
  time.sleep(10)
  数据存储
  这里不同以往,在解析网页时,直接将数据存入列表中而不是写入文件,最终获得所有数据的二维列表,然后使用pandas转为DataFrame(数据表)df并使用df.rename()重命名列名后使用df.to_csv()导出为csv文件。
   df = pd.DataFrame(job)
  columns = ['positionid','positionname','company','companyid','hrid','hr_position','salary','tpladword','location','experience','education','industry','financing','company_scale','position_describe','company_describe']
  df.rename(columns=dict(enumerate(columns)),inplace=True)
  df.to_csv('拉钩招聘.csv')
  bronser.close()
  Result
  
  Summary
  本次爬取过程相对比较顺利,只是在开始时由于未设定time.sleep()导致弹出登录框,之后尝试了1s、3s、5s分别在不同页面弹出登录框,最终使用10s获得了数据。

      上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号