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

Selenium-BS4爬虫问题:爬取desiopt网站企业信息及职位详情链接遇阻

解决Selenium+BeautifulSoup爬取desiopt职位信息的问题

嘿,我看了你的爬取代码和需求,发现几个容易导致爬取失败或者数据不全的问题,咱们一步步来解决:

一、先梳理你代码里的几个明显问题

  • ChromeDriver初始化方式过时:现在Selenium 4.0+已经不再推荐用executable_path参数直接传路径了,这种写法容易出现版本不匹配或者路径解析报错,建议用Service类来管理驱动
  • 未处理动态加载内容:这个网站的职位列表是滚动加载的,你只爬了页面初始加载的第一页内容,肯定拿不到所有企业和职位信息
  • 列名错误导致报错:你代码里写了df['Price'] = df['Price'].map(...),但你的DataFrame只有Company info列,这会直接抛出“列不存在”的错误
  • 遗漏职位详情链接提取:你的需求明确要爬取职位详情链接,但代码里完全没处理这部分逻辑

二、修正后的完整代码

下面是调整后的代码,我加了详细注释,解决了上面的问题,还优化了爬取逻辑:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
import pandas as pd
from bs4 import BeautifulSoup
import re
import time

# 初始化Chrome驱动(Selenium 4+标准写法)
service = Service(r"C:/Users/Chandra Sekhar/Desktop/chrome-driver/chromedriver.exe")
driver = webdriver.Chrome(service=service)

# 存储爬取数据的列表
company_info_list = []
job_links_list = []

try:
    driver.get("http://desiopt.com/search-results-jobs/")
    # 处理滚动加载:模拟滚动到底部,直到没有新内容加载
    last_page_height = driver.execute_script("return document.body.scrollHeight")
    while True:
        # 执行JS脚本滚动到页面底部
        driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
        # 等待页面加载新内容(可根据网络情况调整等待时间)
        time.sleep(3)
        # 获取新的页面高度,判断是否还有新内容
        current_page_height = driver.execute_script("return document.body.scrollHeight")
        if current_page_height == last_page_height:
            break
        last_page_height = current_page_height

    # 获取完整的页面源码
    page_content = driver.page_source
    soup = BeautifulSoup(page_content, "html.parser")

    # 遍历每个职位条目
    for listing_item in soup.find_all('div', attrs={'class':'listing-links'}):
        # 提取并清理企业信息
        user_info_block = listing_item.find('div', attrs={'class':'userInfo'})
        if user_info_block:
            raw_company_info = user_info_block.get_text(strip=True)
            # 清理非字母数字字符(对应你原来的需求)
            cleaned_company_info = re.sub(r'\W+', '', raw_company_info)
            company_info_list.append(cleaned_company_info)
        else:
            company_info_list.append("无企业信息")
        
        # 提取职位详情链接
        job_link_tag = listing_item.find('a', href=True)
        if job_link_tag:
            job_link = job_link_tag['href']
            # 处理相对链接,补全域名
            if not job_link.startswith('http'):
                job_link = f"http://desiopt.com{job_link}"
            job_links_list.append(job_link)
        else:
            job_links_list.append("无详情链接")

    # 生成DataFrame并保存到CSV
    result_df = pd.DataFrame({
        'Company Info': company_info_list,
        'Job Detail Link': job_links_list
    })
    result_df.to_csv('products1.csv', index=False)
    print("数据爬取完成!已保存到products1.csv文件中")

finally:
    # 无论爬取是否成功,都关闭浏览器
    driver.quit()

三、关键改进点说明

  • 驱动初始化优化:用Service类替代旧的executable_path写法,更符合Selenium最新规范,能有效减少版本兼容问题
  • 动态加载处理:通过模拟滚动页面+判断页面高度的方式,确保能爬取到网站上所有的职位条目
  • 容错性提升:增加了元素存在性判断,避免因为某个职位条目缺失信息导致整个程序崩溃
  • 链接补全逻辑:处理了网站内相对链接的情况,确保保存的是可以直接访问的完整职位详情链接
  • 可选优化:如果觉得time.sleep不够灵活,可以用WebDriverWait实现智能等待,比如替换滚动后的等待逻辑:
    from selenium.webdriver.support.ui import WebDriverWait
    WebDriverWait(driver, 10).until(
        lambda driver: driver.execute_script("return document.body.scrollHeight") > last_page_height
    )
    

内容的提问来源于stack exchange,提问作者ajay ai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:04:10