如何用Scrapy拆分td标签中span前后文本存入from和to字段?
解决方案
你可以通过精准定位文本节点的方式,直接提取<span>前后的内容,无需手动拆分字符串。具体修改如下:
修改后的爬虫代码
import scrapy from ..items import TestItem from scrapy.loader import ItemLoader class TestSpider(scrapy.Spider): name = 'test' def parse(self, response): items = response.xpath('//*[@id="12"]/div/div/div[2]/table/tbody/tr') for l in items: il = ItemLoader(item=TestItem(), selector=l) # 提取<span>前的文本,用normalize-space去除多余空白 il.add_xpath('from', 'td[2]/text()[1]/normalize-space()') # 提取<span>后的文本 il.add_xpath('to', 'td[2]/text()[2]/normalize-space()') yield il.load_item()
原理说明
td[2]/text()[1]:定位到第二个<td>下的第一个文本节点(即<span>前面的"London")td[2]/text()[2]:定位到第二个<td>下的第二个文本节点(即<span>后面的"Prague")normalize-space():自动去除文本前后的空格、换行等空白字符,避免提取到无效内容
如果遇到页面中文本节点顺序特殊的情况,也可以用更精准的XPath写法适配:
# 提取<span>之前的所有文本 il.add_xpath('from', 'td[2]/span/preceding-sibling::text()/normalize-space()') # 提取<span>之后的所有文本 il.add_xpath('to', 'td[2]/span/following-sibling::text()/normalize-space()')
内容的提问来源于stack exchange,提问作者AP 2022
相关产品推荐
相关产品推荐

