【找工作难?】Python爬取拉勾网职位数据信息(超级详细)

243 阅读3分钟

​前言:

哈喽,哈喽,都说即将到来的金三银四是一年中传统的跳槽高峰期,很多职场人都默默的准备在春节后换一份新的工作。

正文:

今天我们用Python来爬取拉勾网的数据。

1.引入插件

首先我们先引用四个插件,分别用来模拟真人抓取网页数据、解析网页数据、时间模块、文件模块

from selenium import webdriver #模拟真人操作网页
import pyquery as pq  #解析网页
import time #时间模块
import os #文件模块

2.下载chromedriver插件

(1)查看chrome浏览器版本

在帮助-->关于Google Chrome(E)中查看浏览器的版本信息,我的版本是81.0.4044.138

(2)下载chromedriver插件

打开网址npm.taobao.org/mirrors/chr…

然后再代码中引入chromedriver插件,这个插件会帮咱们打开chrome浏览器模拟窗口

path = os.getcwd()
driver = webdriver.Chrome(executable_path=(path+"/chromedriver"))
#等待整个页面加载完成再执行下一步
driver.implicitly_wait(10)

3、定义并请求我们要爬取的网址

这个网址打开是Python岗位的页面。

#网址
lagou_http = "https://www.lagou.com/jobs/list_Python/p-city_2?px=default&gx=%E5%85%A8%E8%81%8C&gj=&isSchoolJob=1#filterBox"

#定义一个空列表保存查出来的数据
data = []
driver.get(lagou_http)

4、爬取本页数据,并循环找到每页的下一页按钮

找到下一页按钮就自动点击按钮,并获取到当前网页的数据,用getData方法解析网页数据,并将返回的数据保存到data列表中,getData方法我们后面会编写

找不到下一页按钮就打印数据,跳出循环

while True:
    # 找到下一页按钮
    next_html = driver.find_element_by_css_selector(".pager_next").get_attribute('class')
    if next_html == 'pager_next ':
        # 获取到的网页数据
        items = pq.PyQuery(driver.page_source).find(".con_list_item")
        # print(items)
        data += getData(items)
        time.sleep(2)
        # 点击下一页按钮
        driver.find_element_by_xpath("//span[@action='next']").click()
    else:
        print('数据爬取结束')
        print(data)
        break

打印获取到的网页数据(只截取了一部分),将这些数据作为参数传到getData方法中处理成我们的最终可视数据

<div>
  <div class="p_bot">
    <div class="li_b_l">
      <span class="money">10k-20k</span>
        <!--<i></i>-->经验应届毕业生 / 本科
    </div>
  </div>
</div>
<div class="company">
  <div class="industry">
    企业服务,数据服务 / C轮 / 150-500人
  </div>
</div>
<div class="list_item_bot">
  <div class="li_b_l">
    <span>服务器端</span>
    <span>Linux/Unix</span>
    <span>Hadoop</span>
    <span>Scala</span>
  </div>
  <div class="li_b_r">“快速发展,人工智能,大数据,待遇好”</div>
</div>

5、编写getData方法,获取职位名、薪资等重要数据

def getData(items):
    datalist=[]
    for item in items.items():
        temp = dict()
        temp['职位名']= item.attr('data-positionname')
        temp['薪资']= item.attr('data-salary')
        temp['公司名']= item.attr('data-company')
        temp['公司描述']=pq.PyQuery(item).find(".industry").text()
        temp['工作经验']=pq.PyQuery(item).find(".p_bot>.li_b_l").remove(".money").text()
        datalist.append(temp)
    return datalist

6、代码展示

# coding=utf-8
from selenium import webdriver #模拟真人操作网页
import pyquery as pq  #解析网页
import time #时间插件
import os #文件模块

path = os.getcwd()
driver = webdriver.Chrome(executable_path=(path+"/chromedriver"))
# 等待整个页面加载完成再执行下一步
driver.implicitly_wait(5)
print("开始爬取数据")

#网址
lagou_http = "https://www.lagou.com/jobs/list_Ruby/p-city_0?px=default&gx=%E5%85%A8%E8%81%8C&gj=&isSchoolJob=1#filterBox"

#定义一个空列表保存查出来的数据
data = []
driver.get(lagou_http)
def getData(items):
    datalist=[]
    for item in items.items():
        temp = dict()
        temp['职位名']= item.attr('data-positionname')
        temp['薪资范围']= item.attr('data-salary')
        temp['公司名']= item.attr('data-company')
        temp['公司描述']=pq.PyQuery(item).find(".industry").text()
        temp['工作经验']=pq.PyQuery(item).find(".p_bot>.li_b_l").remove(".money").text()
        datalist.append(temp)
    return datalist

while True:
    # 找到下一页按钮
    next_html = driver.find_element_by_css_selector(".pager_next").get_attribute('class')
    if next_html == 'pager_next ':
        # 获取到的网页数据
        items = pq.PyQuery(driver.page_source).find(".con_list_item")
        # print(items)
        data += getData(items)
        time.sleep(2)
        # 点击下一页按钮
        driver.find_element_by_xpath("//span[@action='next']").click()
    else:
        print('数据爬取结束')
        print(data)
        break

# 最后将获取到的数据保存到a.txt文件中
file = open(path+"/a.txt","w")
file.write(str(data))
print('写入文件成功')

7、代码运行的结果:

结尾:

**以上是文章的全部内容,**欢迎点赞支持~

最后完整代码已经打包整理好了,有需要的小伙伴,可以点击这行字体,要么私信小编!