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

Python+BeautifulSoup提取网页公司名称:前三个正常后续提取失败求助

问题分析与修改方案

原代码只能提取前3个公司名称的核心问题:

  • 用s.find()只获取了第一个职位卡片(card bg-white m-0类的div),后续所有卡片都没被纳入处理范围。
  • select('p',{'class':'m-0'})的用法错误,BeautifulSoup的select()方法第二个参数不是属性筛选,应该直接用CSS选择器语法,且该选择器会匹配大量无关的p标签,导致遍历逻辑混乱。

修改后的代码方案

方案一:遍历所有职位卡片提取

这种方式逻辑更清晰,便于后续扩展提取其他字段(比如职位名称、发布时间):

import requests
from bs4 import BeautifulSoup

r = requests.get('https://remote.co/remote-jobs/developer/')
s = BeautifulSoup(r.text, 'lxml')

# 获取所有职位卡片(用find_all代替find)
all_job_cards = s.find_all('div', {'class': 'card bg-white m-0'})
company_names = []

for card in all_job_cards:
    # 直接在当前卡片内找公司名称的p标签
    company_tag = card.find('p', {'class': 'm-0 text-secondary'})
    if company_tag:
        company_name = company_tag.text.strip()
        print(company_name)
        company_names.append(company_name)

方案二:直接定位所有公司名称元素(更简洁)

利用CSS选择器直接匹配所有公司名称标签,一步到位:

import requests
from bs4 import BeautifulSoup

r = requests.get('https://remote.co/remote-jobs/developer/')
s = BeautifulSoup(r.text, 'lxml')

# 用CSS选择器直接选中所有公司名称的p标签
company_tags = s.select('div.card.bg-white.m-0 p.m-0.text-secondary')
company_names = [tag.text.strip() for tag in company_tags if tag.text.strip()]

for name in company_names:
    print(name)

关键修改点说明

  1. 用find_all()替代find():确保获取页面上所有的职位卡片,而不是仅第一个。
  2. 精准定位目标元素:每个公司名称都嵌套在对应职位卡片的p.m-0.text-secondary标签内,直接在卡片内查找或用层级CSS选择器定位,避免无关元素干扰。
  3. 简化遍历逻辑:去掉冗余的find_next_sibling判断,直接提取目标标签的文本内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:36:23