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

如何让Python Scrapy跳过CSS规则、HTML属性并忽略指定标签

Scrapy爬取联系方式误识别问题解决方案

清理无关标签再提取内容

在做联系方式匹配前,先从DOM中移除所有不需要的标签,从根源上避免这类标签内的内容被误识别,代码示例:

def parse(self, response):
    selector = response.selector
    # 按需求添加要排除的标签
    exclude_tags = ['script', 'svg', 'style', 'noscript', 'iframe']
    for tag in exclude_tags:
        selector.xpath(f'//{tag}').drop()
    
    # 后续使用清理后的selector操作即可
    cleaned_text = ' '.join(selector.xpath('//body//text()').getall())

仅匹配纯文本,跳过HTML标签和属性

不要直接对整份response.text做正则匹配,这种方式会扫描所有HTML标签、属性内容,很容易出现误判。改为先提取所有可见文本节点再匹配,自动忽略所有HTML结构:

# 错误写法:会扫描整份HTML源码,包含标签、属性
# phones = re.findall(r'1[3-9]\d{9}', response.text)

# 正确写法:仅提取正文纯文本后再匹配
all_text = ' '.join(response.xpath('//body//text()').getall())
phones = re.findall(r'1[3-9]\d{9}', all_text)
emails = re.findall(r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}', all_text)

增加匹配结果校验过滤误判

针对图片名误判为邮箱的场景,可以对匹配到的结果加一层后缀过滤:

# 过滤掉图片、静态资源后缀的无效邮箱
invalid_suffix = ('.jpg', '.jpeg', '.png', '.gif', '.webp', '.svg', '.css', '.js')
valid_emails = [e for e in emails if not e.lower().endswith(invalid_suffix)]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 22:09:00