如何通过th内容编写CSS选择器获取对应td内容(Scrapy场景)
解决方案:通过属性名称定位Scrapy中的对应TD值
嘿,这事儿好办!你可以利用Scrapy支持的CSS伪类和兄弟选择器,直接通过<th>里的文本内容定位到对应的<td>元素。
直接获取目标TD元素
要获取"Institution Name"对应的<td>标签,用这个选择器就行:
institution_td = response.css('th:contains("Institution Name:") + td').extract_first()
运行后会返回你想要的结果:'<td>Harvard University</td>'
拆解一下选择器逻辑
th:contains("Institution Name:"):匹配所有文本内容包含"Institution Name:"的<th>标签+ td:这是相邻兄弟选择器,专门选取紧跟在目标<th>后面的那个<td>元素extract_first():只取第一个匹配到的结果(避免返回列表)
扩展:获取干净的文本内容
如果不需要<td>标签,只想拿到里面的纯文本,还可以进一步优化:
institution_name = response.css('th:contains("Institution Name:") + td::text').get().strip()
::text:提取元素内部的文本内容get():和extract_first()功能一致,是Scrapy推荐的更简洁写法strip():清理文本里的换行、制表符和多余空格(比如你例子里State字段的乱码空格)
其他属性的示例
同理,获取"Administration"和"State"的内容也可以用同样的逻辑:
# 获取Administration对应的文本 administration = response.css('th:contains("Administration") + td::text').get().strip() # 获取State对应的文本(自动清理空格) state = response.css('th:contains("State") + td::text').get().strip()
内容的提问来源于stack exchange,提问作者Vinicius Silva




