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

如何用Scrapy匹配预定义列表字符串并提取HTML对应元素完整文本

原代码核心问题
  • allowed_domains配置错误:该配置仅可填写纯域名,不能包含协议、路径前缀,否则会触发跨域拦截,导致请求被丢弃
  • XPath变量引用错误:XPath查询字符串无法直接识别Python侧的bacteria变量,需要通过Scrapy内置的参数注入能力传递变量
  • 无结果输出逻辑:原代码执行查询后没有对返回的匹配结果做存储、输出处理,运行后无可见产出
  • 匹配逻辑偏差:原写法仅选中包含关键词的文本节点片段,无法获取所属元素的完整文本内容
可运行实现代码
import scrapy

class BacteriaSpider(scrapy.Spider):
    name = 'bacteria'
    # 仅填写纯域名即可
    allowed_domains = ['microbiologyresearch.org']
    start_urls = ['http://www.microbiologyresearch.org/content/journal/ijsem/']

    def parse(self, response):
        bacteria_species = ['Abditibacterium utsteinense',
                            'Abiotrophia defectiva',
                            'Abyssibacter profundi',
                            'Abyssicoccus albus',
                            'Abyssivirga alkaniphila',
                            'Acanthopleuribacter pedis',
                            'Acaricomes phytoseiuli',
                            'Acetanaerobacterium elongatum',
                            'Acetanaerobacterium sp.',
                            'Acetatifactor muris']

        for bacteria in bacteria_species:
            # 注入Python变量到XPath,查询包含关键词的完整元素文本,normalize-space用于去除多余空白字符
            matched_texts = response.xpath(
                "//*[text()[contains(., $bacteria)]]/normalize-space(.)",
                bacteria=bacteria
            ).getall()
            # 过滤空结果后返回
            if matched_texts:
                yield {
                    "target_species": bacteria,
                    "matched_content": matched_texts
                }
运行说明

执行命令 scrapy crawl bacteria -o result.json 即可启动爬虫,匹配到的结果会自动导出到result.json文件中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 05:45:06