如何用Python Selenium抓取网页中含职位信息的指定div元素?
嘿,这个需求太常见了,我来给你拆解几种靠谱的实现方法,不管你是用入门级工具还是专业框架都能搞定~
核心思路
你要找的是同时带有row、result、clickcard三个class的div元素,每个这样的div对应一个职位。只要精准定位到所有这类元素,就能通过循环逐个提取数据了。下面分几种常用技术栈来讲:
方法1:Python + BeautifulSoup(入门首选)
这是最适合新手的组合,步骤清晰易上手:
- 先请求网页获取HTML内容
- 用BeautifulSoup解析HTML
- 定位所有目标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
相关产品推荐
相关产品推荐

