还怕找不到工作吗?教你用python+selenium采集BOSS直聘招聘信息

前几期讲解了如何通过python + requests,selenium等对网站内容进行爬取,今天我们再来练练手,目标是对BOSS直聘上的招聘信息进行爬取。


首先,通过网页源代码是可以看到详细信息的。所以第一步我们先筛选信息。这里我们以python为关键词,工作经验选一年,学历就选专科(只因博主是专科学历),得到筛选条件后,我们先找到搜索框输入python并回车。接下来就是选择工作经验与学历了。这里我们会发现一个细节,那就是只有当鼠标移动到菜单元素上时,下拉菜单才会出现,这时才能点击;若是将鼠标移走,菜单就不会出现,更不能点击。所以,这里需要设置鼠标动作链。


在这里插入图片描述


在对职位信息筛选完之后,我们开始采集职位信息,首先我们对得到的网页源码进行解析,并提取我们需要的信息,并将其以json的形式写入文件,最后使用for循环 + selenium进行翻页操作,效果如下:


在这里插入图片描述


完整代码如下:

import json
import time
from pyquery import PyQuery as pq
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver import ActionChains  # 鼠标动作链

# 不加载图片
options = webdriver.ChromeOptions()
options.add_experimental_option('prefs', {'profile.managed_default_content_settings.images': 2})
browser = webdriver.Chrome(options=options)
wait = WebDriverWait(browser, 15)
url = 'https://www.zhipin.com/'
data_list = []
max_page = 3


def find_work():
    """
    筛选条件
    :return:
    """
    search = browser.find_element_by_class_name('ipt-search')
    search.send_keys('python')
    search.send_keys(Keys.ENTER)
    time.sleep(2)
    jingyan = browser.find_element_by_xpath('//*[@id="filter-box"]/div/div[4]/div[1]/span/input')
    jingyan_1 = browser.find_element_by_xpath('//*[@id="filter-box"]/div/div[4]/div[1]/span/div/ul/li[3]/a')
    ActionChains(browser).move_to_element(jingyan).click(jingyan_1).perform()
    time.sleep(2)
    xueli = browser.find_element_by_xpath('//*[@id="filter-box"]/div/div[4]/div[2]/span/input')
    xueli_1 = browser.find_element_by_xpath('//*[@id="filter-box"]/div/div[4]/div[2]/span/div/ul/li[5]/a')
    ActionChains(browser).move_to_element(xueli).click(xueli_1).perform()  # 将鼠标移动到某个元素的位置并点击


def get_info():
    """
    采集数据
    :return:
    """
    wait.until(
        EC.presence_of_all_elements_located((By.CSS_SELECTOR, "#main > div > div.job-list > ul > li"))
    )  # 等待最后一条加载完成
    time.sleep(2)
    html = browser.page_source
    html = pq(html)
    items = html('#main > div > div.job-list > ul > li').items()
    for item in items:
        info = {
            'company': item('.name a').text(),
            'post': item('.job-name a').text(),
            'salary': item('.red').text(),
            'work': item('.tags span').text(),
            'welfare': item('.info-desc').text(),
            'address': item('.job-area').text()
        }
        data_list.append(info)
    print("岗位数量:", len(data_list))
    save_next()


def save_next():
    """
    保存后翻页
    :return:
    """
    content = json.dumps(data_list, ensure_ascii=False, indent=2)
    with open("E:\python\project\selenium\BOSS直聘\info.json", "w", encoding="utf-8") as f:
        f.write(content)
    time.sleep(2)
    botton = wait.until(
        EC.element_to_be_clickable((By.CSS_SELECTOR, '#main > div > div.job-list > div.page > a.next'))
    )
    botton.click()


def main():
    browser.get(url)
    find_work()
    for i in range(1, max_page + 1):
        print("第", i, "页:")
        get_info()
    #browser.quit()


if __name__ == '__main__':
    main()

如有错误,欢迎私信纠正,谢谢支持!

猜你喜欢

转载自blog.csdn.net/qq_47183158/article/details/107787212