虽然标记和语法正确,但Scrapy xpath返回一个空列表

时间:2015-07-23 10:18:55

标签: xpath scrapy

在我的解析函数中,这是我写的代码:

hs = Selector(response)
links = hs.xpath(".//*[@id='requisitionListInterface.listRequisition']")
items = []
for x in links:
        item =  CrawlsiteItem()
        item["title"] = x.xpath('.//*[contains(@title, "View this job           description")]/text()').extract()
        items.append(item)
return items    

和title返回一个空列表。

我在链接中捕获带有id标记的xpath,然后在links标记中,我想获得所有值的列表,其中包含查看此作业描述的标题。

请帮我修复代码中的错误。

1 个答案:

答案 0 :(得分:0)

如果您查询了curl "https://cognizant.taleo.net/careersection/indapac_itbpo_ext_career/moresearch.ftl?lang=en"提供的网址请求,则会返回与您在浏览器中看到的网站不同的网站。您的搜索结果位于以下<a>元素中,该元素没有任何text()属性可供选择:

<a id="requisitionListInterface.reqTitleLinkAction" 
    title="View this job description"
    href="#"
    onclick="javascript:setEvent(event);requisition_openRequisitionDescription('requisitionListInterface','actOpenRequisitionDescription',_ftl_api.lstVal('requisitionListInterface', 'requisitionListInterface.listRequisition', 'requisitionListInterface.ID5645', this),_ftl_api.intVal('requisitionListInterface', 'requisitionListInterface.ID5649', this));return ftlUtil_followLink(this);">
</a>

这是因为网站加载网站加载了XHR请求显示的信息(您可以在Chrome中查找),然后使用返回的信息动态更新网站。

对于您要提取的信息,您应该找到此XHR请求(这并不难,因为这是唯一的)并从您的scraper中调用它。然后,从结果数据集中,您可以提取所需的数据 - 您只需创建一个解析算法,该算法将通过此管道分隔格式并将其拆分为作业发布,然后提取您需要的信息,如位置,ID,日期和位置