zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    如何删除日志?
    sql lock
    生成DAL
    字符串ID替换
    精典SQL:分组合并列值
    SQL Server2005 XML数据类型基础
    Buckup
    SQL试题
    SQL处理表重复记录
    Left Join 中on与where的区别
  • 原文地址:https://www.cnblogs.com/liangmingshen/p/13598742.html
Copyright © 2011-2022 走看看