【问题标题】:How to get item using XPath in scrapy如何在scrapy中使用XPath获取项目
【发布时间】:2016-04-10 14:34:08
【问题描述】:

我正在更新本教程,因为它已过时:
http://mherman.org/blog/2012/11/05/scraping-web-pages-with-scrapy/#.VwpeOfl96Ul

它应该获取 Craigslist for NPO 上每个职位列表的链接和标题。链接被获取,但标题没有。

这是该元素的页面代码:

<span class="pl"> 
  <time datetime="2016-04-09 14:10" title="Sat 09 Apr 02:10:57 PM">Apr 9</time> 
  <a href="/nby/npo/5531527495.html" data-id="5531527495" class="hdrlnk">
  <span id="titletextonly">Therapist</span>

这是爬虫的代码:

    def parse(self, response):
    hxs = HtmlXPathSelector(response)
    titles = hxs.xpath("//span[@class='pl']")
    items = []
    for titles in titles:
        item = CraigslistSampleItem()
        item["title"] = titles.select("a/text()").extract()
        item["link"] = titles.select("a/@href").extract()
        items.append(item)
    return items

如果我在 Chrome 中检查元素并获取 XPath,我会得到以下标题: //*[@id='titletextonly'],但这给了我完整的标题列表,而不仅仅是链接的标题(在这种情况下,我应该得到'/nby/npo/5531527495.html'作为链接,和“治疗师”作为标题)

我知道这条线

item["title"] = titles.select("a/text()").extract()

需要更新,但如果我输入 //*[@id='titletextonly'] 我会得到每个标题,所以我很接近,但我不知道如何在“href”元素中获取“titletextonly”的 XPath。

我是 Scrapy 和 Xpath 的新手,所以请善待您的 cmets。

谢谢。

【问题讨论】:

    标签: xpath scrapy web-crawler


    【解决方案1】:

    如下更改 Xpath 以遍历到 'span' 标签。

    item["title"] = titles.select("a/span/text()").extract()
    

    【讨论】:

      【解决方案2】:

      a/text() 只会选择作为a 元素的直接子元素的文本元素。您想要的文本不是a 元素的子元素;它在span 内。

      我没用过scrapy,但我建议试试这个:

      item["title"] = titles.select("a").extract()
      

      这应该得到a 元素的字符串值,这将包括其中的所有文本。

      如果还是不行,你也可以试试:

      item["title"] = titles.select("a//text()").extract()
      

      【讨论】:

      • 感谢您提供答案。
      猜你喜欢
      • 2014-10-04
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      • 2020-05-14
      • 2016-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多