scrapy从数据库中获取start_urls

时间:2014-11-18 03:14:52

标签: python web-scraping scrapy

我有一个问题想问一下 如果我想从数据库中选择链接并让它成为start_urls
我该怎么办?

确保我的数据库保存这些链接和标题

1: link : 'http://test.com/id=1'  ,  title : 'math'   
2: link : 'http://test.com/id=2'  ,  title : 'english'       
3: link : 'http://test.com/id=30' ,  title : 'sports'    

如果我可以将标题作为蜘蛛中的参数获得更好。

以下是我的想法:

class MySpider(Spider):  
    name = "linktest"
    for obj in Learning.objects.all():
        print obj.link
        #result: http://test.com/id=1
                 http://test.com/id=2
                 http://test.com/id=30
    start_urls =[ 'http://test.com/id=1',  #how to do this?
                  'http://test.com/id=2',
                  'http://test.com/id=30' ]

    def parse(self, response):
        #item['title']=math     #when response.url ==  http://test.com/id=1,
        #item['title']=english  #when response.url ==  http://test.com/id=2,...

1 个答案:

答案 0 :(得分:3)

您需要覆盖start_requests()方法和yield / return Request个实例:

  

此方法必须返回带有第一个要爬网的请求的iterable   这只蜘蛛。

     

当蜘蛛被打开时,这是Scrapy调用的方法   在没有指定特定URL时进行抓取。

class MySpider(Spider):  
    name = "linktest"

    def start_requests(self):
        for obj in Learning.objects.all():
            yield Request(obj.link)

要将obj.title传递给回调,请使用meta属性:

class MySpider(Spider):  
    name = "linktest"

    def start_requests(self):
        for obj in Learning.objects.all():
            yield Request(obj.link, meta={'title': obj.title})

    def parse(self, response):
        print response.url, response.meta['title']