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

网页爬取二进制转换异常:含yes类元素却全返回0

爬取元素转二进制值全输出0的解决办法

问题描述

我尝试将网页爬取的数据转换为二进制值,规则为:元素类名包含yes则对应1,包含no则对应0。但打印binary_value时,即使存在含yes的元素,结果仍全为0,求解决。

原代码

import cfscrape
from bs4 import BeautifulSoup

scraper = cfscrape.create_scraper()
response = scraper.get('https://www.hipflat.co.th/projects/ruam-rudee-penthouse-lvukdc')
soup = BeautifulSoup(response.text, 'html.parser')

divs = soup.find_all('div', class_=lambda x: x and ("amenities__icon amenities__icon--yes" in x or "amenities__icon amenities__icon--no" in x))

# Convert the elements to binary numbers
for div in divs:
  if "amenities__icon amenities__icon--yes" in div['class']:
    binary_value = 1
  else:
    binary_value = 0
    
  print(binary_value)

爬取到的div元素

<div class="amenities__icon amenities__icon--yes"></div>
<div class="amenities__icon amenities__icon--no"></div>
<div class="amenities__icon amenities__icon--yes"></div>
<div class="amenities__icon amenities__icon--no"></div>
<div class="amenities__icon amenities__icon--yes"></div>
<div class="amenities__icon amenities__icon--no"></div>
<div class="amenities__icon amenities__icon--yes"></div>
<div class="amenities__icon amenities__icon--no"></div>
<div class="amenities__icon amenities__icon--yes"></div>
<div class="amenities__icon amenities__icon--no"></div>
<div class="amenities__icon amenities__icon--no"></div>
<div class="amenities__icon amenities__icon--no"></div>

错误原因

核心问题在于div['class']返回的是类名列表(比如['amenities__icon', 'amenities__icon--yes']),而你用完整字符串"amenities__icon amenities__icon--yes"去匹配列表,永远无法命中,导致所有判断都进入else分支,输出全0。

修正方案

直接检查类名列表中是否包含'amenities__icon--yes'或'amenities__icon--no'即可,同时可以简化元素筛选逻辑:

修正后的代码

import cfscrape
from bs4 import BeautifulSoup

scraper = cfscrape.create_scraper()
response = scraper.get('https://www.hipflat.co.th/projects/ruam-rudee-penthouse-lvukdc')
soup = BeautifulSoup(response.text, 'html.parser')

# 简化筛选:直接匹配包含目标后缀的类
divs = soup.find_all('div', class_=lambda x: x and ('amenities__icon--yes' in x or 'amenities__icon--no' in x))

# 转换为二进制值
for div in divs:
    binary_value = 1 if 'amenities__icon--yes' in div['class'] else 0
    print(binary_value)

更简洁的筛选方式

还可以用BeautifulSoup的多类名匹配直接筛选:

divs = soup.find_all('div', class_=['amenities__icon--yes', 'amenities__icon--no'])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 11:31:01