• Scrapy命令行调用传入自定义参数


    在做爬虫服务化时,有这样一个需求:接口用命令行启动爬虫,但是数据入库时要记录此次任务的task_id。

    简单说就是,Scrapy命令行启动时要动态传参进去。

    解决方案:

    在spider中定义一个构造函数

    def __init__(self, task_id=None, *args, **kwargs):
        super(AtomicscientistSpider, self).__init__(*args, **kwargs)
        self.task_id = task_id

    通过使用-a可以向爬虫文件中定义的类传递属性,然后在该类中获取该属性即可实现传入自定义参数。

    这样,在启动scrapy时,task_id当做参数传入spider中了:

    scrapy crawl spider_name -a task_id=123
    

    解释说明:

    其他示例:

    可用来传入参数,控制爬取的页数。

    def __init__(self, pages=None, *args, **kwargs):
        super(LvideoSpider, self).__init__(*args, **kwargs)
        self.pages = pages
        
    ...
    def parse(self, response):
        pages = re.findall(r'当前:1/(d+)页', response.text, re.S)[0]
        link = response.meta['format_page']
        # 如果self.pages存在,那么就会代替正则取到的页数
        if self.pages:
            pages = self.pages
            print('' + str(pages) + '')
        for page in range(1, int(pages) + 1):
            page_link = link.format(page)
            yield Request(page_link, callback=self.parse_video_link,
                          meta={'soucre_name': response.meta['soucre_name'],
                                'domin': response.meta['domin'],
                                'page_link': page_link}, dont_filter=True)

    启动并控制爬取的页数:

    scrapy crawl spider_name -a pages=10
    

      

     参考:

    https://scrapy-chs.readthedocs.io/zh_CN/latest/

    https://zhuanlan.zhihu.com/p/62584367

    https://www.jianshu.com/p/a7d32207a5f8

  • 相关阅读:
    Django之Orm的各种操作
    python面试题---收藏的笔记
    jQuery中$.each()方法的使用
    Django 之 路由URL,视图,模板
    高级FTP服务器开发
    选课系统
    ATM
    开发一个简单的python计算器
    学习PYTHON之路, DAY 8
    学习PYTHON之路, DAY 7
  • 原文地址:https://www.cnblogs.com/liangmingshen/p/13598742.html
Copyright © 2020-2023  润新知