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

Python:如何按关键词在网页类元素中检索?解决不规则网页定位问题

随机位置元素的信息提取解决方案

针对你遇到的相同class元素位置随机、无法通过固定选择器定位目标内容的问题,以下是几种实用的解决思路:

1. 基于文本关键词的XPath/CSS选择器定位

直接通过元素包含的文本关键词筛选目标元素,无需依赖固定索引:

  • XPath示例:匹配包含"Phone -"文本的data-123类div,normalize-space可处理文本中的换行、多余空格,避免匹配失败
    //div[@class='data-123'][contains(normalize-space(text()), 'Phone -')]
    
    若要直接提取号码,可结合XPath字符串处理:
    substring-after(normalize-space(//div[@class='data-123'][contains(text(), 'Phone -')]/text()), 'Phone - ')
    
  • CSS选择器(部分工具支持):如jQuery、BeautifulSoup扩展支持:contains语法,可写为:
    div.data-123:contains('Phone -')
    

2. 遍历元素+正则匹配

如果选择器无法直接满足需求,可先获取所有目标class的元素,再逐个检查内容提取信息,适合脚本场景:

Python(BeautifulSoup)示例

from bs4 import BeautifulSoup
import re

# 假设html_content为页面源码
soup = BeautifulSoup(html_content, 'html.parser')
all_target_divs = soup.find_all('div', class_='data-123')

phone_num = None
# 根据实际号码格式调整正则
pattern = re.compile(r'Phone - (\d{10})')
for div in all_target_divs:
    text = div.get_text(strip=True)
    match = pattern.search(text)
    if match:
        phone_num = match.group(1)
        break  # 找到后终止遍历

JavaScript(浏览器控制台/Puppeteer)示例

const targetDivs = document.querySelectorAll('div.data-123');
let phoneNum = null;
const regex = /Phone - (\d{10})/;

targetDivs.forEach(div => {
    const text = div.textContent.trim();
    const match = text.match(regex);
    if (match) {
        phoneNum = match[1];
    }
});

3. 结合元素属性关键词辅助定位

如果目标元素的属性(如data-*自定义属性)包含"telephone"这类关键词,可通过属性匹配缩小范围:

  • XPath示例:匹配data-123类且属性名包含"telephone"的div
    //div[@class='data-123' and @*[contains(local-name(), 'telephone')]]
    
    若属性值包含关键词,可写为:
    //div[@class='data-123' and contains(@data-type, 'telephone')]
    

注意事项

  • 若页面是动态渲染的单页应用,需用Selenium、Puppeteer等工具等待元素加载完成后再提取;
  • 正则表达式需根据实际电话号码格式调整(如带区号、分隔符的情况);
  • 若部分卡片无目标信息,需添加异常处理逻辑避免程序报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 18:10:28