@onsubmit 向方法传递参数_Scrapy中传入自定义参数

5b09b2b5bc8732f116eee788e6b9436a.png

简介

在爬虫程序中,有时候我们想要获取整个网站的信息,所以我们写了一个整站爬虫的程序,但是有时候这样也不是很方便,因为采集时间比较长,而有时候我们又只想采集该网站下的某一个板块的内容。例如下面的网站中:

c6ba70d1982de84fa7eb5944e8a7ccb1.png

如果指定美食街等板块,就能自动采集该板块的内容会比较方便。Scrapy中是允许我们这样做的!!

通常我们执行Scrapy的时候是类似这样的:scrapy crawl spiderName

在加入参数后我们可以这样执行:

scrapy crawl spiderName -a parameter1=value1 -a parameter2=value2

我们可以增加分类或者其他参数来命令爬虫。爬虫文件中可以获取这些参数:

class MySpider(Spider):
    name = 'myspider'
    ...
    def parse(self, response):
        ...
        if self.parameter1 == value1:
            # this is True
​
        # or also
        if getattr(self, parameter2) == value2:
            # this is also True

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

Scrapy的源码是这样写的:

class Spider(object_ref):
    """Base class for scrapy spiders. All spiders must inherit from this
    class.
    """
    # 爬虫名字
    name = None
    # 常用设置
    custom_settings = None
​
    def __init__(self, name=None, **kwargs):
        if name is not None:
            self.name = name
        elif not getattr(self, 'name', None):
            raise ValueError("%s must have a name" % type(self).__name__)
        self.__dict__.update(kwargs)
        # hasattr() 用于判断对象是否包含某属性
        if not hasattr(self, 'start_urls'):
            self.start_urls = []

通过-a参数传递的变量其实就是通过初始化方法传递进来的,当然也可以自定义这样的方法:

import scrapy
​
​
class QuotesSpider(scrapy.Spider):
    name = 'quotes'
    allowed_domains = ['quotes.com']
​
    def __init__(self,num='', *args,**kwargs):
        super().__init__(*args, **kwargs)
        self.num = num
        self.start_urls = [f'http://quotes.com/{self.num}']

当然还可以通过getattr来获取对象的属性:

import scrapy
​
​
class QuotesSpider(scrapy.Spider):
    name = 'quotes'
    allowed_domains = ['quotes.com']
​
    def start_requests(self):
        
        num = getattr(self, num, False)
        if num:
            url = f'hppt://quotes.com/{num}'
            yield scrapy.Request(url)

通过命令:scrapy crawl quotes -a num=7来执行

关于作者:

****************************************

  • 姓名:麦艳涛
  • 网名:挖掘机小王子
  • Q群:581465069

****************************************

转载请注明出处:https://zhuanlan.zhihu.com/p/62584367

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值