You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python Selenium抓取网页中含职位信息的指定div元素?

嘿,这个需求太常见了,我来给你拆解几种靠谱的实现方法,不管你是用入门级工具还是专业框架都能搞定~

核心思路

你要找的是同时带有row、result、clickcard三个class的div元素,每个这样的div对应一个职位。只要精准定位到所有这类元素,就能通过循环逐个提取数据了。下面分几种常用技术栈来讲:

方法1:Python + BeautifulSoup(入门首选)

这是最适合新手的组合,步骤清晰易上手:

  1. 先请求网页获取HTML内容
  2. 用BeautifulSoup解析HTML
  3. 定位所有目标div

代码示例:

import requests
from bs4 import BeautifulSoup

# 1. 请求目标网页(记得加请求头避免被反爬)
url = "你的目标招聘网页URL"
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
}
response = requests.get(url, headers=headers)
html_content = response.text

# 2. 解析HTML
soup = BeautifulSoup(html_content, 'lxml')  # lxml比默认的html.parser解析更快

# 3. 抓取所有目标div:同时匹配三个class
job_divs = soup.find_all('div', class_='row result clickcard')

# 4. 循环处理每个职位div
for index, job_div in enumerate(job_divs):
    print(f"===== 第{index+1}个职位 =====")
    # 示例:提取职位名称(根据网页实际结构调整选择器)
    job_title = job_div.find('h2', class_='title').get_text(strip=True)
    # 示例:提取公司名称
    company_name = job_div.find('span', class_='company').get_text(strip=True)
    print(f"职位:{job_title}")
    print(f"公司:{company_name}")

注意:因为class是Python的关键字,所以BeautifulSoup里用class_来指定元素class。

方法2:Python + Scrapy(大规模爬虫首选)

如果你的爬虫需求比较复杂(比如要爬多页、处理动态内容),Scrapy框架会更高效:

import scrapy

class JobSpider(scrapy.Spider):
    name = "job_crawler"
    start_urls = ["你的目标招聘网页URL"]
    
    # 自定义请求头
    custom_settings = {
        "USER_AGENT": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
    }

    def parse(self, response):
        # 用CSS选择器定位所有目标div(多个class用点连接)
        job_divs = response.css("div.row.result.clickcard")
        
        for job_div in job_divs:
            # 提取数据并输出(CSS选择器用::text获取文本)
            yield {
                "job_title": job_div.css("h2.title::text").get(strip=True),
                "company": job_div.css("span.company::text").get(strip=True)
            }
        
        # 如果有下一页,这里可以添加翻页逻辑
        # next_page = response.css("a.next::attr(href)").get()
        # if next_page:
        #     yield response.follow(next_page, self.parse)

特殊情况处理:动态加载的职位

如果网页是滚动加载更多职位(数据通过JS动态渲染),直接请求静态HTML拿不到全部数据,这时候可以用Selenium/Playwright模拟浏览器:

from selenium import webdriver
from bs4 import BeautifulSoup
import time

driver = webdriver.Chrome()
driver.get("你的目标招聘网页URL")

# 模拟滚动加载(比如滚动3次,每次停2秒)
for _ in range(3):
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    time.sleep(2)

# 获取渲染后的HTML
html_content = driver.page_source
soup = BeautifulSoup(html_content, 'lxml')
job_divs = soup.find_all('div', class_='row result clickcard')

# 后续处理和之前一致
driver.quit()
小技巧
  • 验证定位是否正确:可以先打印len(job_divs),看看数量和页面上显示的职位数是否一致,避免抓错或漏抓。
  • 反爬应对:如果遇到403/验证码,记得加请求头、使用代理,或者放慢请求速度。

内容的提问来源于stack exchange,提问作者Pabasara Ranathunga

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:18:59