如何用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
相关产品推荐
相关产品推荐

