Python爬取拉勾网职位数据

哈喽大家好,我是宁一,今天我们来讲讲Python爬虫,用Python来爬取拉勾网的数据,拉勾网的反爬虫技术做的很厉害,通过普通的header请求总是返回请求频繁的信息

所以我们主要来用selenium这个插件来爬取数据,这个插件就是模拟我们真人的操作,自动点击页面,读取页面内容,就是效率要比用header去进行request请求要低好多

来看看我是怎么操作了,直接看代码吧

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插件

打开网址http://npm.taobao.org/mirrors/chromedriver/,选择对应chrome浏览器版本的插件,下载后解压文件,放在与我们现在编辑的Python文件同一个目录下面

然后再代码中引入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
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喵宁一

点赞是最好的赞赏~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值