专栏首页菲宇selenium爬取拉勾网python职位信息

selenium爬取拉勾网python职位信息

直接上代码,主要爬取的是广州的python职位信息

from selenium import webdriver
import time
from lxml import etree
import re
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
import xlwt
import  csv

class LagouSpider(object):
    driver_path = r"H:\python\chromedriver.exe"
    chromeOptions = webdriver.ChromeOptions()
    chromeOptions.add_argument("service_args = ['–ignore - ssl - errors = true', '–ssl - protocol = TLSv1']")  # Python2/3
    chromeOptions.add_experimental_option('excludeSwitches', ['enable - automation'])
    # 设置代理
    chromeOptions.add_argument("--proxy-server=http://47.100.7.167:8989 ")
    def __init__(self):
        self.driver = webdriver.Chrome(chrome_options=LagouSpider.chromeOptions,executable_path=LagouSpider.driver_path,)
        self.url = 'https://www.lagou.com/jobs/list_python/p-city_213?px=default#filterBox'
        self.positions = []

    def run(self):
        self.driver.get(self.url)
        while True:
            source = self.driver.page_source
            self.parse_list_page(source)
            if re.search(r'action="next" class="pager_next pager_next_disabled"', self.driver.page_source):
                break
            self.next_page()  # 点击进入下一页
        self.driver.quit()  # 将浏览器退出
        self.write_to_csv()  # 将获取的数据写入文件

    def parse_list_page(self,source):
        html = etree.HTML(source)
        links = html.xpath("//a[@class='position_link']/@href")
        self.driver.execute_script("window.open()")  # 开启新的标签页
        self.driver.switch_to.window(self.driver.window_handles[1])  # 切换到新的标签页
        for url in links:  # 遍历职位的详情页
            self.driver.get(url)  # 打开职位的详情页
            html = etree.HTML(self.driver.page_source)  # 解析详情页
            title = html.xpath('//h4[@class="company"]/text()')[0]
            job_request_span = html.xpath('//dd[@class ="job_request"]/h3/span/text()')
            
            salary = job_request_span[0]
            salary = re.sub(r"[\s/]","",salary) 
            city = job_request_span[1]
            city = re.sub(r"[\s/]","",city)            
            work_year = job_request_span[2]
            work_year = re.sub(r"[\s/]", "", work_year)
            education = job_request_span[3]
            education = re.sub(r"[\s/]", "", education)
            desc = ''.join(html.xpath('//dd[@class="job_bt"]//text()')).strip()
            company = html.xpath('//em[@class="fl-cn"]/text()')[0].strip()
            positon = {
                'title': title,
                'company': company,
                'salary': salary,
                'city': city,
                'work_year': work_year,
                'education': education,
                'desc': desc,
            }
            self.positions.append(positon)
            print(positon)
            time.sleep(5)
        self.driver.close()  # 关闭标签页
        self.driver.switch_to.window(self.driver.window_handles[0])  # 切换页面


    def next_page(self):
        # 找到下一页标签
        element = WebDriverWait(self.driver, 10).until(
            EC.presence_of_element_located((By.CLASS_NAME, "pager_next")))
        element.click()  # 点击下一页标签
        time.sleep(1)

    def write_to_csv(self):  # 写入文件
        header = ['title', 'company', 'desc', 'salary', 'work_year', 'education']
        with open('positons.csv', 'w', newline='', encoding='utf-8') as fp:
            write = csv.DictWriter(fp, header)
            write.writeheader()
            write.writerows(self.positions)

if __name__ == '__main__':
    spider = LagouSpider()
    spider.run()

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

推荐阅读

  • 如何将设计思维应用到精益初创公司的软件开发

    我们所说的设计思维,是指由 IDEO 公司的 Tim Brown 提出,并且正在改变全世界组织的设计思维,简称 DT。(译者注:IDDO,当代最具影响力的设计公司之一)

    Aceyclee
    Serverless无服务器云函数
  • InnoDB 事务加锁分析

    一般大家对数据库事务的了解可能停留在事务的ACID特性以及事务4种不同的隔离级别层面上,而对于事务 4 种不同隔离级别如何实现了解相对较少。

    2020labs小助手
    MySQLSQL数据库MVCMVCC
  • FutureTask 核心源码解析

    研究源码,一般我们都从整体以及实例先入手,再研究细节,不至于一开始就“深陷其中而"当局者迷".

    JavaEdge
    HTTPJava
  • 200行代码落地人脸识别开锁应用

    2019年国庆,帮朋友实现了一个人脸识别进行开锁的功能,用在他的真人实景游戏业务中。几个月来运行稳定,体验良好,借着这个春节宅家的时间,整理一下这个应用的实现过程。

    高树磊
    人脸识别图像处理
  • 滑动验证码攻防对抗

        在业务安全领域,滑动验证码已经是国内继,传统字符型验证码之后的标配。众所周知,打码平台和机器学习这两种绕过验证码的方式,已经是攻击者很主流的思路,不再阐述。冷渗透介绍的是一个冷门的绕过思路和防御方案。这些积累,均来自于实战之中,希望有用。

    周俊辉
    HTTP网络安全安全网站
  • 程序员进阶必读,万字总结Mysql优化精华篇

    price decimal(8,2)有2位小数的定点数,定点数支持很大的数(甚至是超过int,bigint存储范围的数)

    程序员内点事
    全文检索缓存SQL数据库Python
  • 运维转型 | 运维人不再只是“救火英雄”

    各行各业都开启了数字化转型的进程,运维团队在这种时代的浪潮中又该何去何从?我在帮助一些企业落地了运维技术平台之后,开始反思这个问题,并将所思所想整理成本篇文章。

    嘉为科技
    企业运维自动化云计算
  • WEB开发常见的安全漏洞和解决思路

    SQL注入时web开发中最常见也是危害性最大的安全漏洞,SQL注入攻击可能会导致 服务器故障,数据泄漏,数据被恶意删除等等严重后果。

    windwei
    SQLHTTPhttps安全漏洞PHP
  • 详解Winograd变换矩阵生成原理

    文本首发知乎:https://zhuanlan.zhihu.com/p/87516875

    Ldpe2G
    编程算法
  • Linux网络性能优化相关策略

    1. rx-checksumming:校验接收报文的checksum。

    glinuxer
    Linux

扫码关注云+社区

领取腾讯云代金券