CrawlSpider和XMLFeedSpider

一、CrawlSpider

    CrawlSpider除了从Spider继承过来的属性外,还提供了新的rules属性,提供跟进链接功能,

    rules属性是一个包含一个或多个Rule对象的集合,

    每个Rule对爬取网站的动作定义了特定的规则,

    对于多个Rule匹配相同的链接,根据它们在rules属性中被定义的顺序,第一个被使用。

    可以复写parse_start_url(response)方法,当start_url的请求返回时,该方法被调用。

    Rule类:       

  1. class scrapy.contrib.spiders.Rule (  
  2. link_extractor, callback=None,cb_kwargs=None,follow=None,process_links=None,process_request=None )

        构造参数说明:

            link_extractor是一个LinkExtractor对象,定义了如何从爬取到的页面提取链接

       callback从link_extractor中获取的链接将会调用改函数,避免使用parse作为回调函数

       cb_kwargs传递给回调函数的参数的字典

       follow一个布尔值,指定提取的链接是否需要跟进

       process_linkslink_extractor中获取的链接将会调用改函数,用来过滤链接

       process_request提取到的每个Request都会调用该函数,用来过滤Request

class CnblogsSpider(CrawlSpider):
    name = "blogs"
    allowed_domains = ["blogs.com"]
    start_urls = [
        "http://www.blogs.com/boy/default.html"
    ]
    rules = (
        Rule(LinkExtractor(allow=("/boy/default.html")),
                follow=True,
                callback="parse_item"
            ),
        )
    def parse_item(self, response):
        pass

rules属性中只有一个Rule实例,也要在后面用逗号“,”分隔

    关于LinkExtractor对象的构造参数:

        allow:提取满足正则表达式的链接

        deny:排除满足正则表达式的链接

        allow_domains:允许的域名

        deny_domains:排除的域名

        restrict_xpaths:提取满足XPath选择条件的链接

        restrict_css:提取满足css选择条件的链接

        unique:链接是否去重,布尔类型

二、XMLFeedSpider

        通过迭代各个节点来分析XML源,

        迭代器可以选择:Iternodes、XML、HTML,默认是Iternodes

        属性:

            iterator:选择迭代器

            itertag:开始迭代的节点名

            namespaces:命名空间

        可被重写方法:

            adapt_response(response):Spider分析Response前被调用,返回一个Response

            parse_node(response,selector):当节点符合提供的itertag时,被调用

            process_results(response,results):当Spider返回Item或Request时,被调用,在结果返回给框架核心前做最后的修改处理如修改Item的内容。返回一个结果列表。

class XMLSpider(XMLFeedSpider):
    name = "xmlspider"
    allowed_domains = ["blogs.com"]
    start_urls = [
        "http://www.blogs.com/boy/default.html"
    ]
    iterator = "html"
    itertag = "entry"

    def adapt_response(self, response):
        return response

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值