使用一个Scrapy蜘蛛保持数据流分离

9w11ddsr  于 2022-11-09  发布在  其他
关注(0)|答案(2)|浏览(143)

我想从三个不同类别的合同中提取数据---商品、服务、建筑。
因为每种类型的合约都可以用相同的方法解析,所以我的目标是使用一个单独的蜘蛛,在三个不同的URL上启动蜘蛛,然后在三个不同的流中提取数据,这些数据可以保存到不同的地方。
我的理解是,仅仅将所有三个URL都列为start_urls,将导致一个组合的数据输出。
我的spider继承自Scrapy的CrawlSpider类。
如果您需要进一步的信息,请告诉我。

umuewwlo

umuewwlo1#

我建议你从另一个Angular 来解决这个问题。

scrapy crawl CanCrawler -a contract=goods

您只需要在类初始值设定项中包含所引用的变量

class CanCrawler(scrapy.Spider):
    name = 'CanCrawler'
    def __init__(self, contract='', *args,**kwargs):
        super(CanCrawler, self).__init__(*args,**kwargs)
        self.start_urls = ['https://buyandsell.gc.ca/procurement-data/search/site']
        # ...

你还可以考虑添加多个参数,这样你就可以从网站的主页开始,使用这些参数,你可以得到你需要的任何数据。例如,对于这个网站https://buyandsell.gc.ca/procurement-data/search/site,你可以有两个命令行参数。

scrapy crawl CanCrawler -a procure=ContractHistory -a contract=goods

这样你就能

class CanCrawler(scrapy.Spider):
    name = 'CanCrawler'
    def __init__(self, procure='', contract='', *args,**kwargs):
        super(CanCrawler, self).__init__(*args,**kwargs)
        self.start_urls = ['https://buyandsell.gc.ca/procurement-data/search/site']
        # ...

然后根据您传递的参数,您可以让您的爬行器单击网站上的这些选项来获取您要爬行的数据。Please also see here。我希望这对您有所帮助!

qrjkbowd

qrjkbowd2#

在你的蜘蛛中,像这样交出你的物品。

data = {'categories': {}, 'contracts':{}, 'goods':{}, 'services':{}, 'construction':{} }

其中每个项都包含一个Python字典。
然后创建一个管道,并在管道内执行以下操作。

if 'categories' in item:
   categories = item['categories']
   # and then process categories, save into DB maybe

if 'contracts' in item:
   categories = item['contracts']
   # and then process contracts, save into DB maybe
.
.
.

# And others

相关问题