我没有测试过这个!
我必须承认,我没有尝试在Scrapy中使用Django模型,但是我们开始吧:
我想象中最简单的方法是通过扩展XMLFeedSpider创建一个新的爬虫来处理deleted.rss
文件(从Scrapy文档中复制,然后修改)。我建议您创建一个新的爬虫,因为以下逻辑与用于抓取网站的逻辑非常不相关:
from scrapy import log
from scrapy.contrib.spiders import XMLFeedSpider
from myproject.items import DeletedUrlItem
class MySpider(XMLFeedSpider):
domain_name = 'example.com'
start_urls = ['http://www.example.com/deleted.rss']
iterator = 'iternodes'
itertag = 'item'
def parse_node(self, response, url):
url['url'] = node.select('#path/to/url').extract()
return url
SPIDER = MySpider()
这不是一个可供使用的工作蜘蛛,但是我记得RSS文件是纯XML格式的。我不确定
deleted.rss
的样子,但我相信你可以从XML中提取URL。现在,这个示例导入了
myproject.items.DeletedUrlItem
,在这个示例中它只是一个字符串,但是你需要使用类似下面的代码创建DeletedUrlItem:
你需要创建DeletedUrlItem:
class DeletedUrlItem(Item):
url = Field()
不要保存,使用Django的Model API 删除项目,在Scrapy的ItemPipeline中 - 我假设你正在使用DjangoItem:
from scrapy.core.exceptions import DropItem
import django.Model.yourModel
class DeleteUrlPipeline(item):
def process_item(self, spider, item):
if item['url']:
delete_item = yourModel.objects.get(url=item['url'])
delete_item.delete()
raise DropItem("Deleted: %s" % item)
注意
delete_item.delete()
。
我知道这个答案可能有错误,它是根据我的记忆写的 :-) 但如果您有评论或无法理解,请放心我会更新。