我有一个问题想问一下
如果我想从数据库中选择链接并让它成为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,...
答案 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']