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

如何使用Selenium与Scrapy抓取网页img标签的alt文本?

解决Scrapy抓取img标签alt属性中邮箱的问题

问题背景

我用Scrapy实现从CSV读取姓名,批量在UCLA目录搜索页搜索并抓取邮箱,但目标邮箱存储在img标签的alt属性里,现有代码无法获取该内容,求解决办法。

现有代码

import scrapy
import csv

class UCLADirectorySpider(scrapy.Spider):
    name = 'ucla_directory'
    start_urls = ['https://directory.ucla.edu/']

    def start_requests(self):
        # 读取CSV中的姓名
        with open('names.csv', 'r') as f:
            reader = csv.DictReader(f)
            for row in reader:
                name = row['name']
                # 构造搜索请求
                yield scrapy.FormRequest(
                    url=self.start_urls[0],
                    formdata={'q': name},
                    callback=self.parse_search_results
                )

    def parse_search_results(self, response):
        # 现有无法获取邮箱的提取逻辑
        for person in response.css('.person-result'):
            email = person.css('img.email-icon::text').get()  # 错误写法:试图提取文本而非属性
            yield {
                'name': person.css('.name::text').get().strip(),
                'email': email
            }

CSV示例

name
John Doe
Jane Smith

目标HTML结构

<div class="person-result">
    <span class="name">John Doe</span>
    <img class="email-icon" src="/icons/email.png" alt="john.doe@ucla.edu">
</div>

解决方案

核心问题是你之前用了提取文本的语法::text去获取标签属性,Scrapy需要专门的语法提取属性值,两种可行写法:

1. CSS选择器提取alt属性

使用::attr(属性名)语法直接获取目标属性值:

email = person.css('img.email-icon::attr(alt)').get()

2. XPath选择器提取alt属性

如果偏好XPath,通过@属性名语法获取:

email = person.xpath('.//img[@class="email-icon"]/@alt').get()

修改后的完整解析方法

def parse_search_results(self, response):
    for person in response.css('.person-result'):
        name = person.css('.name::text').get().strip()
        email = person.css('img.email-icon::attr(alt)').get()
        # 处理可能的空值
        email = email.strip() if email else None
        yield {
            'name': name,
            'email': email
        }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 09:15:36