一个小的实用程序集,用于简化编写碎片蜘蛛。
scrapy-boilerplate的Python项目详细描述
废弃的样板文件是一个小的实用程序集,可以简化Scrapy 编写低复杂度的蜘蛛,这在小型和一次性项目中非常常见。
它需要Scrapy(>;=0.16),并已使用Python2.7进行了测试。 另外,运行examples中的脚本需要PyQuery 目录。
注意
该代码是实验性的,包括一些隐藏的魔法,可能是 很难调试。如果您是Scrapy新手,请不要使用此代码,除非 您已经准备好调试以前没有人看到的错误。
使用指南
项目
标准项目定义:
fromscrapy.itemimportItem,FieldclassBaseItem(Item):url=Field()crawled=Field()classUserItem(BaseItem):name=Field()about=Field()location=Field()classStoryItem(BaseItem):title=Field()body=Field()user=Field()
变成:
fromscrapy_boilerplateimportNewItemBaseItem=NewItem('url crawled')UserItem=NewItem('name about location',base_cls=BaseItem)StoryItem=NewItem('title body user',base_cls=BaseItem)
基底蜘蛛
标准蜘蛛定义:
fromscrapy.spiderimportBaseSpiderclassMySpider(BaseSpider):name='my_spider'start_urls=['http://example.com/latest']defparse(self,response):# do stuff
变成:
fromscrapy_boilerplateimportNewSpiderMySpider=NewSpider('my_spider')@MySpider.scrape('http://example.com/latest')defparse(spider,response):# do stuff
爬行蜘蛛
标准爬网蜘蛛定义:
fromscrapy.contrib.spidersimportCrawlSpider,Rulefromscrapy.contrib.linkextractors.sgmlimportSgmlLinkExtractorclassMySpider(CrawlSpider):name='my_spider'start_urls=['http://example.com']rules=(Rule(SgmlLinkExtractor('category\.php'),follow=True),Rule(SgmlLinkExtractor('item\.php'),callback='parse_item'),)defparse_item(self,response):# do stuff
变成:
fromscrapy_boilerplateimportNewCrawlSpiderMySpider=NewCrawlSpider('my_spider')MySpider.follow('category\.php')@MySpider.rule('item\.php')defparse_item(spider,response):# do stuff
跑步助手
单蜘蛛运行脚本:
# file: my-spider.py# imports omitted ...classMySpider(BaseSpider):# spider code ...if__name__=='__main__':fromscrapy_boilerplateimportrun_spidercustom_settings={# ...}spider=MySpider()run_spider(spider,custom_settings)
带有标准爬网命令行选项的多蜘蛛脚本:
# file: my-crawler.py# imports omitted ...classMySpider(BaseSpider):name='my_spider'# spider code ...classOtherSpider(CrawlSpider):name='other_spider'# spider code ...if__name__=='__main__':fromscrapy_boilerplateimportrun_crawler,SpiderManagercustom_settings={# ...}SpiderManager.register(MySpider)SpiderManager.register(OtherSpider)run_crawler(custom_settings)
注意
有关工作代码示例,请参见examples目录。