Scrapy-爬虫模板的使用

本文详细介绍了Scrapy框架中XMLFeedSpider、CSVFeedSpider和CrawlSpider的使用方法。通过实例演示如何处理XML和CSV数据源,以及CrawlSpider的链接提取和自动爬行工作流程。对于XML数据,讲解了XMLFeedSpider的属性和方法,如`itertag`、`root`和`parse_node`。对于CSV数据,阐述了CSVFeedSpider如何处理字段和间隔符,并展示了处理中文乱码的方法。最后,介绍了CrawlSpider的工作流程和链接提取器的运用,展示了如何自动爬取博客信息。
摘要由CSDN通过智能技术生成

Scrapy,Python开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。

Scrapy吸引人的地方在于它是一个框架,任何人都可以根据需求方便的修改。它也提供了多种类型爬虫的基类,如BaseSpider、sitemap爬虫等,最新版本又提供了web2.0爬虫的支持。

在之前的博文Scrapy常用工具命令中讲到,可以使用scrapy genspider -l来查看Scrapy当前可用的爬虫模板,并且已知现在可用的爬虫模板有basicxmlfeedcsvfeedcrawl。在之前的博文中,所有有关爬虫的例子都使用basic模板,这里将不再作介绍,下面将着重介绍其他三种爬虫模板的使用。

使用XMLFeedSpider来分析XML源

如果想用Scrapy爬虫来处理XML文件,我们可以用XMLFeedSpider来实现。现在有这样一个XML的数据源:http://www.people.com.cn/rss/politics.xml,假如,我们想提取XML文件中的各文章的标题,作者以及发布日期等信息,首先我们在原来的项目上创建一个xmlfeed为模板的爬虫:

scrapy genspider peoplespider -t xmlfeed www.people.com.cn

执行完上面的命令,会发现在原来的spiders目录下多了一个peoplespider.py的爬虫文件。用编辑器打开该爬虫文件,有如下内容:

# -*- coding: utf-8 -*-
from scrapy.spiders import XMLFeedSpider


class PeoplespiderSpider(XMLFeedSpider):
    name = 'peoplespider'
    allowed_domains = ['www.people.com.cn']
    start_urls = ['http://www.people.com.cn/feed.xml']
    iterator = 'iternodes' # you can change this; see the docs
    itertag = 'item' # change it accordingly

    def parse_node(self, response, selector):
        i = {
   }
        #i['url'] = selector.select('url').extract()
        #i['name'] = selector.select('name').extract()
        #i['description'] = selector.select('description').extract()
        return i

首先我们需要理解一下上述代码,关于nameallowed_domainsstart_urls属性在之前的博文中已有讲到,具体作用情况请查看上一篇博文。下面主要讲讲iteratoritertagparse_node()属性或方法的使用:

  • iterator: 该属性设置的是使用哪个迭代器,默认值为iternodes,这是一个基于正则表达式的高性能迭代器,除了这个默认值以外,还可以设置为htmlxml
  • itertag: 该属性主要用来设置开始迭代的节点
  • parse_node(): 该方法在节点与所提供的标签名相符合的时候会被调用,在该方法中,可以进行一些信息的提取和处理的操作

除此之外,XMLFeedSpider还有一些常见的属性和方法,如下所示:

名称 属性或方法 含义
namespaces 属性 以列表的形式存在,主要定义在文档中会被爬虫处理的可用命名空间
adpt_response(response) 方法 该方法主要在spider分析响应前被调用
process_results(response, results) 方法 该方法主要在spider返回结果时被调用,主要对结果在返回前进行最后处理

随后,我们再创建一个属于peoplespider爬虫的items文件people_items.py,定义要存储的结构化数据,具体代码如下:

import scrapy

class PeopleItems(scrapy.Item):
    title = scrapy
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值