使用Xpath获取更多相同类型的元素

时间:2015-10-11 01:33:56

标签: python xpath web-crawler scrapy scrapy-spider

我需要在此页面中获取所有答案,例如结构与作者姓名和答案文本。

https://answers.yahoo.com/question/index?qid=20151007080620AAVNtY1

如果我使用此代码

 item = YahooItem()
 text_to_gain = hxs.xpath('//a[contains(@class,"uname Clr-    b")]/text()').extract()
    if text_to_gain:
        item['author']= str(text_to_gain[0]).strip()
    else:
        item['author']= "Anonymous"

    item['type']="Answer"

    text_to_gain = hxs.xpath('//span[contains(@class,"ya-q-full-text")][@itemprop="text"]/text()').extract()
    if text_to_gain:
        item['text']= str(text_to_gain[0]).strip()
    else:
        item['text']= "NULL"
  yield item

我只拿一个元素。 我也尝试更改hxs或使用迭代器,例如:

all_answer = hxs.xpath('//li[contains(@class,"Cf Py-14 ya-other-answer Pend-14 ")]').extract()

但不起作用

1 个答案:

答案 0 :(得分:0)

您可以通过以下表达式获得所有答案和相关作者。 此表达式选择页面上的所有答案,包括最佳答案

all_answers = hxs.xpath("descendant::*[@itemtype='https://schema.org/Answer']");

现在迭代每个答案answ,并且以下xpath表达式(相对于每个answ节点执行)将分别选择文本和作者

text = hxs.xpath(answ,"descendant::*[@itemprop='text']");
author = hxs.xpath(answ,"//a[starts-with(@class,'uname')]");