返回顶部
首页 > 资讯 > 后端开发 > Python >基于selenium爬取拉勾网职位信息
  • 462
分享到

基于selenium爬取拉勾网职位信息

职位信息selenium 2023-01-31 00:01:16 462人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

1.selenium   Selenium 本是一个用于WEB应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。而这一特性为爬虫开发提供了一个选择及方向,由于其本身依赖于浏览器,所以使用python的s

1.selenium

  Selenium 本是一个用于WEB应用程序测试工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。而这一特性为爬虫开发提供了一个选择及方向,由于其本身依赖于浏览器,所以使用python的selenium库的前提是:需要下载相应的浏览器驱动程序,这里附上Chromedriver的下载地址:chromedriver;(64位的向下兼容,)

 

2.code:

  说明:

    1.多线程爬取(producer&consumer modal);

    2.结果集的存取文件类型为csv格式;

    3.大三党一枚,代码噪点多提出来哦,相互学习

#coding:utf-8

from selenium import webdriver
from lxml import etree
import csv
import time
import re
import threading
import queue
from selenium.webdriver.common.by import By
import random


POSITioNS_INFO = queue.Queue()
event = threading.Event()


def write_to_csv(file):
    with open(file, 'a', encoding='utf-8', newline="") as f:
        writer = csv.DictWriter(f, ['name', 'salary', 'addr', 'experience', 'degree', 'type', 'advantage', 'detail'])
        writer.writeheader()
        while True:
            if POSITIONS_INFO.empty():
                event.wait()
            writer.writerow(POSITIONS_INFO.get())



class LaGouSpider(threading.Thread):
    driver_path = r'D:\Pythonlearning\chromedriver.exe'
    options = webdriver.ChromeOptions()
    options.add_argument('--proxy-server="Http://117.63.87.177:9999"')
    def __init__(self, kw, *args, **kwargs):
        super(LagouSpider, self).__init__(*args, **kwargs)
        self.driver = webdriver.Chrome(executable_path=self.driver_path)
        self.url = r'https://www.lagou.com/jobs/list_%s?labelWords=&fromSearch=true&suginput=' % kw

    def run(self):
        self.driver.get(self.url)
        cur_page_source = self.driver.page_source
        # 总页数
        max_page_num = int(self.driver.find_element(By.XPATH, "//span[contains(@hidefocus, 'hidefocus')][last()-1]").text)
        for page in range(1, max_page_num):
            self.parse_cur_page(cur_page_source)
            # 爬取当前页, 点击下一页进行抓取
            next_page_tag = self.driver.find_element(By.CSS_SELECTOR, "div.pager_container .pager_next")
            next_page_tag.click()

            # 防止被识别, 设置随机等待秒数
            rand_seconds = random.choice([2,3])+random.random()
            time.sleep(rand_seconds)
            cur_page_source = self.driver.page_source


    def parse_cur_page(self, cur_page_source):
        """解析结果页,解析出所有的待爬取职位信息页地址"""
        html = etree.HTML(cur_page_source)
        info_links = html.xpath("//a[contains(@class, 'position_link')]")
        for link in info_links:
            # print(link.get('href'))
            link_addr = link.get('href', None)
            self.request_info_page(link_addr)


    def request_info_page(self, page_url:str):
        """获取职位详情页"""
        js_code = "window.open('%s')" % page_url
        self.driver.execute_script(js_code)
        # 解析当前信息页
        cur_handles = self.driver.window_handles
        self.driver.switch_to_window(cur_handles[-1])
        self.parse_position_page(self.driver.page_source)
        # 解析完成, 关闭当前标签卡并切换回原窗口
        self.driver.close()
        self.driver.switch_to_window(cur_handles[0])

    def parse_position_page(self, html):
        # print(html)
        """解析职位详情页"""
        list_xpath = {
            "job_name_xpath" : "//div[@class='job-name']/span[@class='name']/text()",
            "job_salary_xpath" : "//dd[contains(@class, 'job_request')]//span[@class='salary']/text()",
            "job_addr_xpath" : "//dd[contains(@class, 'job_request')]//span[2]/text()",
            "job_experience_xpath" :"//dd[contains(@class, 'job_request')]//span[3]/text()",
            "job_degree_xpath" : "//dd[contains(@class, 'job_request')]//span[4]/text()",
            "job_type_xpath" : "//dd[contains(@class, 'job_request')]//span[5]/text()",
            "job_advantage_xpath": "//dd[contains(@class, 'job-advantage')]/p/text()",
            "job_detail_xpath": "//div[@class='job-detail']/*/text()",
        }

        key_name = ['name', 'salary', 'addr', 'experience', 'degree', 'type', 'advantage', 'detail']

        cur_position_info = dict()
        cur_html = etree.HTML(html)

        for index, xpath in enumerate(list_xpath.values()):
            cur_val = cur_html.xpath(xpath)
            if len(cur_val) == 1:
                temp_value = re.sub(r'[\s/<.*?>\\]', "", cur_val[0].strip())

            else:
                temp_value = re.sub(r'[\s/<.*?>\\\]\[]', "", "".join(cur_val))
                # 去掉\xa0(&nbsp;)
                temp_value = "".join(temp_value.split())
            temp_key = key_name[index]
            cur_position_info[temp_key] = temp_value

        print(cur_position_info)
        # {'name': '高级java开发工程师', 'salary': '20k-35k', 'addr': '上海', 'experience': '经验5-10年', 'degree': '大专及以上', 'type': '全职', 'advantage': '电商微服务', 'detail': '任职资格:1、计算机或相关专业本科以上学历,具有4年以上JAVA开发经验;2、熟练掌握数据结构、多线程编程,掌握常用的设计模式;熟悉JVM,包括内存模型、类加载机制以及性能优化;3、熟练掌握Java语言,熟悉springspringMVCmybatisSpringBoot框架;4、掌握数据库设计,熟练使用数据库MysqlmongoDBRedis等;5、熟悉linux常用的shell命令;6、熟悉rpc开发,有过分布式开发经验者优先;7、具有很强的分析复杂问题和解决复杂问题的能力,有强烈的责任心和使命感,良好的沟通表达能力和团队协作能力。8、熟悉常见的中间件、分布式解决方案及其原理:分布式缓存、SOA、消息中间件,负载均衡、连接池等;9、具有一定的项目规划和决策能力,善于捕捉业务需求、架构设计中存在的问题,并给出有效的解决措施和方法;'}
        POSITIONS_INFO.put(cur_position_info)
        # GCondition.notify_all()
        event.set()

def main():
    spider = LagouSpider('java')
    spider.start()
    writer = threading.Thread(target=write_to_csv, args=['lagou.csv',])
    writer.start()

if __name__ == '__main__':
    main()

 

--结束END--

本文标题: 基于selenium爬取拉勾网职位信息

本文链接: https://lsjlt.com/news/182250.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 基于selenium爬取拉勾网职位信息
    1.selenium   Selenium 本是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。而这一特性为爬虫开发提供了一个选择及方向,由于其本身依赖于浏览器,所以使用Python的s...
    99+
    2023-01-31
    职位 信息 selenium
  • node.js爬虫爬取拉勾网职位信息
    简介 用node.js写了一个简单的小爬虫,用来爬取拉勾网上的招聘信息,共爬取了北京、上海、广州、深圳、杭州、西安、成都7个城市的数据,分别以前端、PHP、java、c++、python、Android、i...
    99+
    2022-06-04
    爬虫 职位 信息
  • python爬虫之利用Selenium+Requests爬取拉勾网
    目录一、前言二、分析url三、获取所有城市和页数四、生成params参数五、获取数据六、总结一、前言 利用selenium+requests访问页面爬取拉勾网招聘信息 二、分析url...
    99+
    2024-04-02
  • python网络爬虫基于selenium爬取斗鱼直播信息
    目录一、本文使用的第三方包和工具二、selenium的介绍和浏览器驱动的安装1.selenium的介绍2.浏览器驱动的安装三、代码思路分析1.解析数据的函数2.保存数据的函数3.主函...
    99+
    2024-04-02
  • Python3获取拉勾网招聘信息
        为了了解跟python数据分析有关行业的信息,大概地了解一下对这个行业的要求以及薪资状况,我决定从网上获取信息并进行分析。既然想要分析就必须要有数据,于是我选择了拉勾,冒着危险深入内部,从他们那里得到了信息。不得不说,拉勾的反爬技...
    99+
    2023-01-31
    招聘信息 拉勾网
  • Python 基于Selenium实现动态网页信息的爬取
    目录一、Selenium介绍与配置1.Selenium简介2. Selenium+Python环境配置二、网页自动化测试1.启动浏览器并打开百度搜索2.定位元素三、爬取动态网页的名人...
    99+
    2024-04-02
  • Python基于Selenium怎么实现动态网页信息的爬取
    这篇文章主要介绍“Python基于Selenium怎么实现动态网页信息的爬取”,在日常操作中,相信很多人在Python基于Selenium怎么实现动态网页信息的爬取问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答...
    99+
    2023-06-22
  • 如何使用python网络爬虫基于selenium爬取斗鱼直播信息
    这篇文章给大家分享的是有关如何使用python网络爬虫基于selenium爬取斗鱼直播信息的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、本文使用的第三方包和工具python 3.8  谷歌...
    99+
    2023-06-29
  • Python实现爬取腾讯招聘网岗位信息
    目录介绍效果展示实现思路源码展示介绍 开发环境 Windows 10 python3.6 开发工具 pycharm 库 numpy、matplotlib、time、xlutils.c...
    99+
    2024-04-02
  • Python怎么实现爬取腾讯招聘网岗位信息
    本篇内容主要讲解“Python怎么实现爬取腾讯招聘网岗位信息”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python怎么实现爬取腾讯招聘网岗位信息”吧!介绍开发环境Windows 10pyth...
    99+
    2023-06-22
  • python通过selenium爬取网页信息,python获取浏览器请求内容,控制已经打开的浏览器
    背景:通过python中直接get或者urlopen打开一些有延迟加载数据的网页,会抓取不到部分信息。 1. 命令行打开chrome,并开启调试端口(前提,找到chrome安装目录,找到chrome....
    99+
    2023-09-03
    python selenium chrome 爬虫
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作