2014-10-31 69 views
3

我试图scrapy使用scrapy this page。我可以成功地抓取页面上的数据,但我希望能够从其他页面抓取数据。 (接下来说的那些)。继承人我的代码的相关部分:使scrapy递归地移动到下一页

def parse(self, response): 
    item = TimemagItem() 
    item['title']= response.xpath('//div[@class="text"]').extract() 
    links = response.xpath('//h3/a').extract() 
    crawledLinks=[] 
    linkPattern = re.compile("^(?:ftp|http|https):\/\/(?:[\w\.\-\+]+:{0,1}[\w\.\-\+]*@)?(?:[a-z0-9\-\.]+)(?::[0-9]+)?(?:\/|\/(?:[\w#!:\.\?\+=&%@!\-\/\(\)]+)|\?(?:[\w#!:\.\?\+=&%@!\-\/\(\)]+))?$") 

    for link in links: 
     if linkPattern.match(link) and not link in crawledLinks: 
      crawledLinks.append(link) 
     yield Request(link, self.parse) 

    yield item 

我得到正确的信息:从链接页面的标题,但它根本不是“导航”。我如何告诉scrapy导航?

回答

3

看看Scrapy Link Extractors文档。他们是告诉您的蜘蛛遵循页面上链接的正确方式。

看看你想爬行的页面,我相信你应该使用2个提取规则。下面是一个简单的蜘蛛的例子,其规则适合您的TIMES网页需要:

from scrapy.contrib.spiders import CrawlSpider,Rule 
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor 

class TIMESpider(CrawlSpider): 
    name = "time_spider" 
    allowed_domains = ["time.com"] 
    start_urls = [ 
     'http://search.time.com/results.html?N=45&Ns=p_date_range|1&Ntt=&Nf=p_date_range%7cBTWN+19500101+19500130' 
    ] 

    rules = (
     Rule (SgmlLinkExtractor(restrict_xpaths=('//div[@class="tout"]/h3/a',)) 
      , callback='parse'), 
     Rule (SgmlLinkExtractor(restrict_xpaths=('//a[@title="Next"]',)) 
      , follow= True), 
     ) 

    def parse(self, response): 
     item = TimemagItem() 
     item['title']= response.xpath('.//title/text()').extract() 

     return item 
+0

嗯,那没用。继承人我的代码: – user46257 2014-10-31 20:32:49

+0

嗯,没有工作。仍然没有找到链接 – user46257 2014-10-31 20:33:38

+0

没有错误,它只是不遵循链接。仍然得到我告诉它进行def解析的任何内容。对于我的蜘蛛类,我只是定义了标题,这是我需要的信息。谢谢你的帮助 – user46257 2014-10-31 21:59:25