51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1416|回复: 0
打印 上一主题 下一主题

最新selenium爬取某知名招聘网站职位

[复制链接]
  • TA的每日心情
    无聊
    4 天前
  • 签到天数: 1050 天

    连续签到: 1 天

    [LV.10]测试总司令

    跳转到指定楼层
    1#
    发表于 2022-12-27 14:28:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    一.某勾网职位爬取
      众所周知,现在反爬机制特别严重,我们想要爬取一些职位数据是难上加难,所以我们现在使用selenium模拟真人操作网页爬取这个某勾网的职位。
      我选用selenium模拟真人操作网页,使用谷歌和火狐游览器的插件,进行动态的对目标网站进行爬取。
      将目标网页存入一个列表中,每个url爬取30页(使用一个30次的循环操作)将里面当前页面的数据提取出来。然后分别调用getData函数(提取目标值存入对应的列表内),得到目标值datalist,然后使用pandas转化完成,存入csv文件里。最终得到如下数据:

      爬虫结构图:

      1.1 selenium的使用
     1、爬虫开始,先将需要的模块包导入:
      from selenium import webdriver  # 模拟真人操作网页
      import pyquery as pq  # 解析网页
      import time  # 时间模块
      import os  # 文件模块
      import pandas as pd
      from selenium.webdriver.chrome.service import Service  # 新增
      from selenium.webdriver.common.by import By


      2.避免乱码,在py文件的最上面,加入utf-8编码,显示中文。
      # coding = utf-8

      3.将谷歌的chromedriver的路径写一下,如果没有chromedriver的话,去官网下载一下,下载解压,将chromedriver拖拽到谷歌游览器的目录即可。
      service = Service(executable_path='/home/yan/Python/chromeselenium/chromeselenium/chromedriver')

      4.官方下载地址:
      registry.npmmirror.com/binary.html…

      5.其实如果的最新版的selenium。不用下载chromedriver就可以用,模块里会自动下载配置好的。
      driver = webdriver.Chrome()

      6.来一端测试代码,测试一下:
      from selenium import webdriver
      driver = webdriver.Chrome()
      url = 'https://www.baidu.net/'
      driver.get(url)
      driver.maximize_window()


      7.如果出现以下报错:

      8.去外面刚刚下载好的chromedriver里,双击脚本,启动服务:

      出现以下界面,说明启动成功:

      9.重新运行刚刚那段测试代码,如果还是无法启动,更换火狐游览器即可解决问题,火狐游览器测试代码:
      import time
      from selenium.webdriver import Firefox
      from selenium import webdriver
      driver = webdriver.Firefox()
      driver.get("https://www.toutiao.com/a6969138023774667264/")
      time.sleep(2)
      html = driver.page_source
      print(html)
      driver.quit()


      效果图:

      1,2 开始爬取
      1.使用selenium模拟真人操作网页(谷歌为例)。目标url
      lagou_http = "https://www.lagou.com/jobs/list_go%E5%BC%80%E5%8F%91%E5%B7%A5%E7%A8%8B%E5%B8%88/p-city_0?&cl=false&fromSearch=true&labelWords=&suginput="
      driver.get(lagou_http)
      data = []


      2.每个url爬取30页:以下一页按钮的class为准:.pager_next ,然后进行调用函数,data处理数据:
      index = 0
      while index < 31:
          if index<1:
              time.sleep(30)
          index += 1
          next_button = driver.find_element(By.CSS_SELECTOR, ".pager_next ").get_attribute('class')
          print(next_button)
          if next_button == "pager_next ":
              # 获取当前页面的数据
              items = pq.PyQuery(driver.page_source).find(".con_list_item")
              # print('items',items)
              data += getData(items)
              time.sleep(2)
              # driver.find_element_by_xpath("")
              element = driver.find_element(By.XPATH, "//span[@action='next']").click()
              time.sleep(2)
          else:
              print("爬取结束")
              break


      3.getData 函数的作用,将上面拿到的前页面的数据里将我们需要的目标数据拿到,放到list列表里返回。
      def getData(items):

      4.我们抓取这些关键字:职位名,薪资,公司名,行业,公司融资/上市情况,人数规模,工作年限,学历,城市
      x.append(item.attr("data-positionname"))
      x.append(item.attr("data-salary"))
      x.append(item.attr('data-company'))
      x.append(pq.PyQuery(item).find(".industry").text())
      x.append(pq.PyQuery(item).find(".p_bot>.li_b_l").remove(".money").text())
      x.append((pq.PyQuery(item).find(".add").text()))


      5.最后将获取到的数据保存到csv文件中
      f = open('D-3-Go岗.csv','w',encoding='utf-8')
      name=["职位名","薪资",'公司名','公司描述','工作经验',"地点"]
      test=pd.DataFrame(columns=name,data=data)
      # csv_writer = csv.writer(test)
      print(test)
      test.to_csv('D-3-Go岗.csv',encoding='utf-8')
      print('写入文件成功')
      复制代码
      6.爬取部分结果如下:

      7,可以看到如下的数据还是比较规整的:
      (成都)[url=]Java[/url]工程师-周末双休-专科民教网勿扰,11k-18k,联龙博通,科技金融 , 不需要融资 , 2000人以上,经验3-5年,本科,成都
      (杭州)Java工程师-周末双休,13k-21k,联龙博通,科技金融 , 不需要融资 , 2000人以上,经验5-10年,本科,杭州
      .net开发工程师-HK,11k-16k,普华永道成都SDC,专业服务|咨询 , 不需要融资 , 2000人以上,经验3-5年,本科,成都
      .net开发工程师(转Java),18k-35k,红途科技,信息安全 , A轮 , 50-150人,经验3-5年,本科,深圳
      .NET开发架构师,15k-20k,欧派,居住服务 , 上市公司 , 2000人以上,经验5-10年,本科,广州
      .NET开发架构师,15k-20k,欧派,居住服务 , 上市公司 , 2000人以上,经验5-10年,本科,杭州
      .net高级开发工程师,25k-35k,上海元聚,工具类产品 , 不需要融资 , 150-500人,经验5-10年,本科,上海


      8.一共爬取的数据类型有:


    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-25 05:04 , Processed in 0.061855 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表