从DIV或底层容器中选择文本(如果存在)

2024-03-28 19:07:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个div表,其中每行有两个单元格/列。 第二个单元格/列有时有一个明文(<div class="something">Text</div>),而有时它隐藏在“<div class="something"><a href="url">Text</a></div>”内的“a”标记中。在

现在,除了链接的文本之外,我没有任何问题。我也可以单独获取链接文本,但我不知道如何同时获取所有内容,因此我得到了三列数据: 1第一列文本, 2第二列文本,无论是否链接, 三。链接,如果存在的话

提取所有未链接且有效的代码是:

times = scrapy.Selector(response).xpath('//div[contains(concat(" ", normalize-space(@class), " "), " time ")]/text()').extract()
titles = scrapy.Selector(response).xpath('//div[contains(concat(" ", normalize-space(@class), " "), " name ")]/text()').extract()
for time, title in zip(times, titles):
    print time.strip(), title.strip()

我只能用

^{2}$

但不知道如何将“查询”组合起来,把所有的东西组合起来。在

下面是一个HTML示例:

<div class="programRow rowOdd">
  <div class="time ColorVesti">
                        22:55
  </div>
  <div class="name">

                        Dnevnik

  </div>  
</div>

<div class="programRow rowEven">
  <div class="time ColorOstalo">
                        23:15
  </div>

  <div class="name">
    <a class="recnik" href="/page/tv/sr/story/20/rts-1/2434373/kulturni-dnevnik.html" rel="/ajax/storyToolTip.jsp?id=2434373">Kulturni dnevnik</a>
  </div>

</div>

示例输出(我无法获得):

22:55, Dnevnik, []
23:15, Kulturni dnevnik, /page/tv/sr/story/20/rts-1/2434373/kulturni-dnevnik.html

我要么得到前两列(不带链接文本),要么只得到带有上面代码示例的链接文本。在


Tags: 代码textname文本div示例time链接
1条回答
网友
1楼 · 发布于 2024-03-28 19:07:49

如果我理解正确的话,那么您应该迭代程序节点,并为每个循环创建项。还有xpath快捷方式//text(),它捕获节点下的所有文本及其childrem

尝试类似于:

programs = response.xpath("//div[contains(@class,'programRow')]")
for program in programs:
    item = dict()
    item['name'] = program.xpath(".//div[contains(@class,'name')]//text()").extract_first()
    item['link'] = program.xpath(".//div[contains(@class,'name')]/a/@href").extract_first()
    item['title'] = program.xpath(".//div[contains(@class,'title')]//text()").extract_first()
    return item

相关问题 更多 >