BOSS直聘岗位python爬取思路1(完整代码+详细介绍)

BOSS直聘岗位python爬取(完整代码+详细介绍)

  • 本文仅介绍关键思路,后续对字段的爬取文章到链接:
  • 爬取字段:详情链接、岗位名、岗位年限、岗位薪资范围、职位描述、岗位关键字、岗位地区、岗位地址
  • 爬取工具:Python
  • 所需第三方库:selenium,BeautifulSoup,json
  • !! 注意selenium必须要提前安装和浏览器版本一样的驱动器(本人在这步卡了好久,具体请看链接:)
  • 思路:(这样分段有利于中途报错不需要所有都重新跑)
    • 先利用selenium获取每个岗位的链接
    • 再遍历页面的链接获取每个岗位招聘信息的源代码
    • 再利用beautifulSoup对每个岗位的源代码进行分析获取字段。
  • 爬取内容:boss直聘对岗位最多只开放10页,所以我们最多只能爬取10页的岗位,如有其他解决办法欢迎在下方留言

需要源码的关注公众号: 一个不是小白的数据小白

后续对字段的爬取代码进入
博文:https://blog.csdn.net/weixin_52001949/article/details/135480669
在这里插入图片描述

一、 首先安装指定库文件

  1. windows按win键直接输入anaconda Prompt
  2. 然后打开直接复制以下代码,安装库文件
    在这里插入图片描述
pip install selenium
pip install BeautifulSoup
pip install json
pip install time

二、 获得cookie文件

利用selenium获取指定cookie

  1. 在进入网页之后手动扫码登录(这样最快),设置了time.sleep(15),意思是等待15s
from selenium import webdriver
import time
import json
def 获取cookie(url,cookie文件名):
    #1. 打开浏览器
    driver = webdriver.Chrome()
    #2. 进入网页
    driver.get(url)  
    #3. 进入网页之后,手动点击登录页码快速登录进去
    time.sleep(15)
    #4.在15s之内登录,获取所有cookie信息(返回是字典)
    dictCookies = driver.get_cookies()  
    #5.是将dict转化成str格式
    jsonCookies = json.dumps(dictCookies)  
    # 登录完成后,自动创建一个boss直聘.json的文件,将cookies保存到该环境根目录下
    with open(cookie文件名, "w") as fp:
        fp.write(jsonCookies)
        print('cookies保存成功!')
url='https://www.zhipin.com/web/geek/job-recommend'
获取cookie(url,cookie文件名='boss直聘.json')

三、获取每个岗位详情的链接

  1. 查看每个页面的链接
    https://www.zhipin.com/web/geek/job?query=bi&city=101210100&page=1
    https://www.zhipin.com/web/geek/job?query=bi&city=101210100&page=2
    依次类推遍历每个链接

在这里插入图片描述

  1. 获取每个岗位的链接
    1. 找到链接在源代码里的位置,看到每个链接:
      -href= “job_detail/fc617e27bdeb1f581Hd729–FlZR.html?lid=aThHvPnPLRe.search.1&securityId=qB9QmXRG637rI-C1O4eOujVwuJyQAFng5ryLPqak83VjpKskQM0S_BvMqHfwzTk3913NcAIyPJdop63oDcung_hoNkHrnZizG-3kgAvSvFHZo7MioJIkk4pCazN-oH1XO2sJXNpP29g~&sessionId=”
      在这里插入图片描述
    1. 分析链接所在位置,发现链接所在a标签下的class=‘job-card-left’,ctrl+f查找下该页面存在多少个这个class的a标签,一共有30个这种链接,说明页面一共有30个岗位信息链接,且一个标签里就有一个链接。
      在这里插入图片描述
    1. 利用beatifulsoup对源代码进行链接的爬取
soup.find_all(class_='job-card-left') 
#获取所有class=job_card_left_elements'的标签

在这里插入图片描述
-遍历每个元素,取出href链接

   for element in job_card_left_elements:
        href = element['href']
        full_link = 'https://www.zhipin.com' + href
        '将每个链接放到一个空列表里'
        详情列表.append(full_link)

在这里插入图片描述
该部分完整代码

代码解释:
```python
from selenium import webdriver
import time
import json
from bs4 import BeautifulSoup

'1. 建立一个空列表存储链接'
详情列表=[]
'2. 遍历每个页面,获取页面的源代码'
for i in range (1,11):
    print(i)
    boss = webdriver.Chrome()
    # 1.打开网页
    url =f'https://www.zhipin.com/web/geek/job?query=bi&city=101210100&page={i}'
    boss.get(url)  
    #2.注入cookie
    with open(r"E:\Anacada__\工作项目\爬虫\boss直聘.json", "r") as fp:
        jsonCookies = fp.read()
    #3. 将 JSON 格式的 Cookie 转换为字典
    cookies = json.loads(jsonCookies)
    #4.添加 Cookie 到 WebDriver 对象
    for cookie in cookies:
            boss.add_cookie(cookie)
    #5.进入网页等待6s加载,然后获取源代码
    boss.get(url)
    time.sleep(6)
    boss_text = boss.page_source
'3. 根据页面源代码,获取每个页面的岗位链接'   
    #1.将源代码加载进beatifulsoup
    soup = BeautifulSoup(boss_text, 'html.parser')
    #2.查找所有 class="job-card-left" 的元素
    job_card_left_elements = soup.find_all(class_='job-card-left')
    # 遍历每个元素,获取 <a> 标签的 href 链接
    for element in job_card_left_elements:
        href = element['href']
        full_link = 'https://www.zhipin.com' + href
        详情列表.append(full_link)
            

四、获取每个详情链接的源代码

  • 获取了每个页面的链接了之后,就可以遍历访问每个链接了
  • 这里先获取每个链接的源代码是为了避免中途出错,selenium访问浏览器速度有限,10个页面300个链接需要访问300次,源代码获取了之后再获取字段信息会很快。
  • selenium获取源代码
count=0
源代码=[]
for i in 详情列表:
    count=count+1
    boss = webdriver.Chrome()
    # 打开网页
    url =f'{i}'
    boss.get(url)  
    #2.注入cookie
    with open(r"E:\Anacada__\工作项目\爬虫\boss直聘.json", "r") as fp:
        jsonCookies = fp.read()
    '1. 将 JSON 格式的 Cookie 转换为字典'
    cookies = json.loads(jsonCookies)
    ' # 添加 Cookie 到 WebDriver 对象'
    for cookie in cookies:
            boss.add_cookie(cookie)
    boss.get(url)
    time.sleep(5)
    boss_text = boss.page_source
    源代码.append(boss_text)

五、获取网页源代码的完整代码:

from selenium import webdriver
import time
import json
import random
from bs4 import BeautifulSoup
import pandas as pd 


def 获取cookie(url,cookie文件名):
    driver = webdriver.Chrome()
    driver.get(url)  
    time.sleep(15)
    dictCookies = driver.get_cookies()  #获得所有cookie信息(返回是字典)
    jsonCookies = json.dumps(dictCookies)  #dumps是将dict转化成str格式
    # 登录完成后,将cookies保存到本地文件
    with open(cookie文件名, "w") as fp:
        fp.write(jsonCookies)
        print('cookies保存成功!')
    
获取cookie('https://www.zhipin.com/web/geek/job-recommend',cookie文件名='boss直聘.json')

详情列表=[]
for i in range (1,11):
    print(i)
    boss = webdriver.Chrome()
    # 打开网页
    url =f'https://www.zhipin.com/web/geek/job?query=bi&city=101210100&page={i}'
    boss.get(url)  
    #2.注入cookie
    with open(r"E:\Anacada__\工作项目\爬虫\boss直聘.json", "r") as fp:
        jsonCookies = fp.read()
    # 将 JSON 格式的 Cookie 转换为字典
    cookies = json.loads(jsonCookies)
    # 添加 Cookie 到 WebDriver 对象
    for cookie in cookies:
            boss.add_cookie(cookie)
    boss.get(url)
    time.sleep(6)
    boss_text = boss.page_source
    # print("2. 获取页面源代码")
    from bs4 import BeautifulSoup
    soup = BeautifulSoup(boss_text, 'html.parser')
    # 查找所有 class="job-card-left" 的元素
    job_card_left_elements = soup.find_all(class_='job-card-left')
    # 遍历每个元素,获取 <a> 标签的 href 链接
    for element in job_card_left_elements:
        href = element['href']
        full_link = 'https://www.zhipin.com' + href
        详情列表.append(full_link)
    count=0
源代码=[]
for i in 详情列表:
    count=count+1
    boss = webdriver.Chrome()
    # 打开网页
    url =f'{i}'
    boss.get(url)  
    #2.注入cookie
    with open(r"E:\Anacada__\工作项目\爬虫\boss直聘.json", "r") as fp:
        jsonCookies = fp.read()
    '1. 将 JSON 格式的 Cookie 转换为字典'
    cookies = json.loads(jsonCookies)
    ' # 添加 Cookie 到 WebDriver 对象'
    for cookie in cookies:
            boss.add_cookie(cookie)
    boss.get(url)
    time.sleep(random.uniform(5,15))
    boss_text = boss.page_source
    源代码.append(boss_text)

六、分析页面详情,获取对应字段

  • 需要获取的字段
    岗位名、岗位薪资、地区、工作地址、要求年限、学历、职位描述、岗位职责
    公司名、公司规模、公司介绍、公司成立日期、行业

后续对字段的爬取代码进入
博文:https://blog.csdn.net/weixin_52001949/article/details/135480669

在这里插入图片描述
在这里插入图片描述

代码架构说明

  • 配置好招聘的要求之后
    在这里插入图片描述
    在这里插入图片描述
  • 选定不同功能来爬取数据
    在这里插入图片描述
    在这里插入图片描述
### 使用PythonBoss抓取数据并进行数据清洗 #### 抓取工具的选择 对于从 Boss 这样的现代 Web 应用程序中提取信息的任务,Selenium 是一种强大的自动化浏览器操作工具,可以模拟人类用户的交互行为来加载动态网页内容[^1]。 ```python from selenium import webdriver import time def setup_driver(): options = webdriver.ChromeOptions() options.add_argument('headless') # 不显示浏览器窗口运行 driver = webdriver.Chrome(options=options) return driver ``` #### 数据收集流程 为了有效地收集所需的信息,在启动 Selenium 驱动器之后,应当构建一个函数用于访问目标页面,并从中抽取职位详情链接列表。这一步骤通常涉及解析 HTML 文档结构以定位到包含招信息的关键标签和属性。 ```python def fetch_job_links(driver, url): job_links = [] try: driver.get(url) elements = driver.find_elements_by_css_selector('.job-title a') for element in elements: link = element.get_attribute('href') if 'bosszhipin' in link and '/detail/' in link: job_links.append(link) except Exception as e: print(f"Error fetching links from {url}: ", str(e)) finally: return list(set(job_links))[:min(50, len(job_links))] # 取前50条不重复的结果 ``` #### 数据存储设计 考虑到后续可能需要对大量记录执行复杂查询,建议采用关系型数据库 MySQL 来保存所获得的数据集。创建相应的表结构之前,先定义好字段及其约束条件,确保能够高效支持业务逻辑需求。 ```sql CREATE TABLE IF NOT EXISTS jobs ( id INT AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255), company_name VARCHAR(255), salary_range VARCHAR(64), city VARCHAR(64), experience_required VARCHAR(64), education_requirement VARCHAR(64), description TEXT, UNIQUE (title, company_name) USING BTREE ); ``` #### 清洗与预处理 当原始HTML被转换成结构化的JSON对象后,还需要进一步清理这些半成品数据。例如去除多余的空白字符、标准化日期格式以及填补缺失值等都是常见的做法。此外,也可以利用正则表达式匹配特定模式的内容以便更精确地识别有效信息[^2]。 ```python import re def clean_salary(salary_str): pattern = r'\d+K-\d+K' match = re.search(pattern, salary_str) if match is not None: return match.group().replace('K', '') else: return '' # 更多类似的辅助方法可以根据实际遇到的情况编写... ```
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值