Spider和CrawlSpider

Spider和CrawlSpider

spider

它的基类为scrapy.Spider,所有编写的爬虫必须继承这个类。

主要用到的函数及调用顺序为:

__init__() : 初始化爬虫名字和start_urls列表

parse() : 解析response,并返回Item或Requests(需指定回调函数)。Item传给Item pipline持久化 , 而Requests交由Scrapy下载,并由指定的回调函数处理(默认parse()),一直进行循环,直到处理完所有的数据为止。在spider里面这个方法是默认的callback函数。

start_urls 当没有指定特定网址时,爬虫将开始抓取的网址列表。

start_requests() 调用make_requests_from url():生成Requests对象交给Scrapy下载并返回response,此方法必须返回一个可迭代的第一个请求来抓取这个爬虫。

 

start_urls = [
    'http://www.example.com/1.html',
    'http://www.example.com/2.html',
    'http://www.example.com/3.html',
]
​
​
def start_requests(self):
return  [scrapy.FormRequest("http://www.example.com/login",
formdata={'user': 'john', 'pass': 'secret'},
callback=self.logged_in)]

scrapy框架里面schedular维护了一个spider队列。

crawlSpider

Spider类的设计原则是只爬取start_url列表中的网页,而CrawlSpider类定义了一些规则(rule)来提供跟进link的方便的机制,从爬取的网页中获取link并继续爬取的工作更适合。

  • 是一个类,继承自Spider,Spider是scrapy里面爬虫的一个基类,CrawlSpider是scrapy封装的另外一个爬虫类,由于CrawlSpider是Spider的子类,所以功能要比Spider要多

  • 多了一个功能:提取链接的功能,根据一定的规则直接在该网页中提取符合这个规则的所有链接

  • Spider里面在爬取到内容之后自动调用parse函数为callBack函数进行解析。而在crawlSpider里面,callBack需要自己制定对应的回调函数。

     

scrapy.spider.Rule使用:

class scrapy.spiders.Rule(link_extractor, callback=None, cb_kwargs=None, follow=None, process_links=None, process_request=None)
  • LinkExtr actor :链接提取器,定义从当前网页获取新的链接的规则。

     allow = (),            # 正则表达式
     allow_domains = (),    # 允许的域名(了解)
     deny_domains = (),     # 不允许的域名(了解)
     restrict_xpaths = (),  # 根据xpath提取链接
     retrict_css = ()       # 根据选择器提取链接
     tags()                 # 它是一个字符串或字符串序列,定义了网页链接的标签来源。默认为('a', 'area')。
     attrs()                # 它是一个字符串或字符串序列,定义了网页链接的属性来源(必须是满足tags参数规定的标签的属性)。默认为('href',)。
  • callback:它接收一个回调函数(定义当前类中)的名称(注意,是函数的名称而不是引用),之后用于处理按照link_extractor提取到的链接的Response。该回调函数接收response作为其第一个参数,返回ItemRequest或它们的子类。需要注意的是,parse方法不能作为回调函数。(这和Spider类中的情况不一样!)

  • cb_kwargs:它是一个参数字典,传递给回调函数。

  • follow:它是一个bool类型,用于指定是否要继续从当前规则解析出的Response中提取链接。如果callbackNone,则follow默认为True,否则默认为False

  • process_links:它接收一个回调函数(定义当前类中)的名称(注意,是函数的名称而不是引用),用于进一步处理那些用规则提取出的链接。

  • process_request:它接收一个回调函数(定义当前类中)的名称(注意,是函数的名称而不是引用),用于处理使用当前规则的request。

 

 

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值