首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用链接的` `css()`调用,以便第二个调用中的选择器使用第一个调用作为上下文?

如何使用链接的` `css()`调用,以便第二个调用中的选择器使用第一个调用作为上下文?
EN

Stack Overflow用户
提问于 2018-07-22 07:35:33
回答 1查看 30关注 0票数 0

我正在逐行处理一个表,并且需要嗅探这些行的id

代码语言:javascript
复制
<table id="tbl">
  <tr id="row_1">
    <td id="cell_1">...</td>
  </tr>
  <tr id="row_2">
    <td id="cell_2">...</td>
  </tr>
</table>

所以我的代码看起来像这样:

代码语言:javascript
复制
def parse_table(self, response):
    rows = response.css('#tbl > tr')
    for row in rows:
        rowid = row.css('::attr(id)')
        if rowid.extract_first().startswith('row'):
            ...

但是,通过这种方式,第二次调用.css()会给出row的所有后代的ID,而不仅仅是它的直接子代的ID。也就是说,对于上面的示例超文本标记语言,它返回"row_1""cell_1"。如何限定链式css()调用的作用域,使其只作用于给定行的直接子对象?

我尝试过使用Scrapy伪类,但是:scope似乎不支持,并且:root没有给我任何结果。

或者,我可以不通过CSS直接获取id属性的值吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-22 08:20:24

我可以向您展示如何使用XPath完成相同的任务:

代码语言:javascript
复制
def parse_table(self, response):
    for row in response.xpath('//*[@id="tbl"]/tr'):
        rowid = row.xpath('./@id').extract_first()
        if rowid.startswith('row'):
            ...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51460889

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档