开发者社区> 问答> 正文

Scrapy:如何使用多个搜索项的参数

我正在玩scrapy,现在我尝试搜索不同的关键字,从命令行工具传递参数。 基本上,我想定义一个关键字,爬虫应该搜索包含这个关键字的url。 这是我的命令行:

scrapy crawl myfirst -a nombre="Vermont"

这是我的履带:

class myfirstSpider(CrawlSpider):
    name = 'myfirst'
    allowed_domains= ["leroymerlin.es"]
    start_urls = ["https://www.leroymerlin.es/decoracion-navidena/arboles-navidad?index=%s" % (page_number) for page_number in range(2)]    

    def __init__(self, nombre=None, *args, **kwargs):
        super(myfirstSpider, self).__init__(*args, **kwargs)    
        rules = (
        Rule(LinkExtractor(allow= r'/fp/\*nombre*',), callback = 'parse_item'),)

    def parse_item(self, response):
        items = myfirstItem()

        product_name = response.css ('.titleTechniqueSheet::text').extract()

        items['product_name'] = product_name

        yield items

不幸的是,它不工作… 欢迎帮助,谢谢! 我找到办法了!它适合我:

class myfirstSpider(CrawlSpider):
    name = 'myfirst'
    allowed_domains= ["leroymerlin.es"]
    start_urls = ["https://www.leroymerlin.es/decoracion-navidena/arboles-navidad?index=%s" % (page_number) for page_number in range(2)]    

    def __init__(self, nombre=None, *args, **kwargs):

        self.rules = (
        Rule(LinkExtractor(allow= nombre), callback = 'parse_item'),)
        super(myfirstSpider, self).__init__(*args, **kwargs)

    def parse_item(self, response):
        items = myfirstItem()

        product_name = response.css ('.titleTechniqueSheet::text').extract()

        items['product_name'] = product_name

        yield items

和命令:

scrapy crawl myfirst -a nombre="vermont"

谢谢大家! 问题来源StackOverflow 地址:/questions/59383208/scrapy-how-to-use-arguments-for-multiple-search-terms

展开
收起
kun坤 2019-12-27 11:20:04 572 0
1 条回答
写回答
取消 提交回答
  • 如果希望spider定向爬取,就需要给spider传入参数

    首先在spider类中定义初始化函数

    def __init__(self, start_urls=None, number=5,  *args, **kwargs):
        super(DouBanMovieSituationSpider, self).__init__(*args, **kwargs)
        self.start_urls = start_urls
        self.number = int(commentNum)
    

    调用时使用

    scrapy crawl xxxSpider -a start_urls=xxxxxx -a number=number
    
    

    想传多少个参数,就在参数前加多少个 -a……

    有同学是使用pycharm里面的调用python语句来模拟执行cmd的,则将python语句改为“

    from scrapy.cmdline import execute
    
    execute(['scrapy', 'crawl', 'xxxSpider',"-a","start_urls=xxxx","-a","number=666"])
    
    2019-12-27 16:29:18
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
《开放搜索查询分析服务架构分享》 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载