刮擦子页面并在Scrapy中连接结果

时间:2013-08-21 19:50:15

标签: python scrapy

我有以下蜘蛛用于Scrapy。我不仅需要抓取站点地图中的顶级页面,还需要抓取这些页面的第一级子页面。然后我需要将子项scrape的结果与我的父解析方法中的body项连接起来。任何人都可以帮我用代码做这样的事情吗?

from scrapy.contrib.spiders import SitemapSpider
from scrapy.selector import HtmlXPathSelector
from cvorgs.items import CvorgSite

class CvorgSpider(SitemapSpider):
  name = 'cvorg_spider'
  sitemap_urls = ["http://www.urbanministry.org/cvorg_urls.xml"]

  def parse(self, response):
   hxs = HtmlXPathSelector(response)
   item = CvorgSite()
   item['url'] = response.url
   item['title'] = hxs.select('//title/text()').extract()
   item['meta'] = hxs.select('/html/head/meta[@name="description"]/@content').extract()
   body = ' '.join(hxs.select('//body//p//text()').extract())
   item['body'] = body.replace('"', '\'');
   return item

1 个答案:

答案 0 :(得分:1)

好的,所以你需要像网址一样抓取数据并再次刮掉它。 在这里你需要使用 yield 函数。 就像我取一个郊区并重定向给一个新的网址。这里以示例为例 callback = self.parse_category_tilte 定义输出来自的函数 (complete_url(link)功能将会:

sites1 = hxs.select('//div[@class="left-column"]/div[@class="resultContainer"]/span/h2/a/@href')
        items=[]
        for sit in sites2:
            link=sit.extract()
            yield Request(complete_url(link), callback=self.parse_category_tilte)

现在,complete_url返回一个新网址:

def complete_url(string):
    """Return complete url"""
    return "http://www.timeoutdelhi.net" + string

现在重新学习parse_category_tilte函数:

sites = hxs.select('//div[@class="box-header"]/h3/text()')       
        items=[]   
        for site in sites:
            item=OnthegoItem()
            item['ename']=site.extract()
            items.append(item)
        return items

希望这会有所帮助和支持。:)