Scrapy中的xmlfeed爬取XML源

我们一般用xmlfeed模版爬虫去处理RSS订阅信息。RSS是一种信息聚合技术,可以让信息的发布和共享更为高效和便捷。RSS是基于XML标准的。

用xmlfeed爬取新浪博客的订阅信息。

任意选择一个新浪博客,点击订阅出现一个订阅地址:http://blog.sina.com.cn/rss/1246151574.xml

文件是.xml结尾,这就是我们要爬取的xml标准的RSS订阅信息。

一、创建项目并且以xmlfeed模版创建爬虫文件。

#在需要创建项目的目录下,打开命令行,依次运行下面命令
python -m scrapy startproject xmlpjt
cd xmlpjt
python -m scrapy genspider -t xmlfeed steve sina.com.cn

二.打开项目,编写文件

1、编写items.py

# -*- coding: utf-8 -*-
import scrapy


class XmlpjtItem(scrapy.Item):
    title = scrapy.Field()
    link = scrapy.Field()
    author = scrapy.Field()

2、编写爬虫文件steve.py

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

from xmlpjt.items import XmlpjtItem


class SteveSpider(XMLFeedSpider):
    name = 'steve'
    allowed_domains = ['sina.com.cn']
    start_urls = ['http://blog.sina.com.cn/rss/1246151574.xml']
    iterator = 'iternodes' # you can change this; see the docs
    itertag = 'rss' # change it accordingly

    def parse_node(self, response, selector):
        item = XmlpjtItem()
        item["title"] = selector.xpath("/rss/channel/item/title/text()").extract()
        item["link"] = selector.xpath("/rss/channel/item/link/text()").extract()
        item["author"] = selector.xpath("/rss/channel/item/author/text()").extract()
        for i in range(len(item["title"])):
            print("第"+str(i+1)+"篇文章")
            print("标题是:")
            print(item["title"][i])
            print("链接为:")
            print(item["link"][i])
            print("作者是:")
            print(item["author"][i])
            print("---------------------------------------")
        return item

注释:(1)iterator属性:设置使用的迭代器,默认为“iternodes”(一个基于正则表达式的高性能迭代器),除此之外还有“html”和“xml”迭代器;

(2)itertag:设置开始迭代的节点;

(3)parse_node方法:在节点与所提供的标签名相符合时被调用,在其中定义信息提取和处理的操作;

(4)namespaces属性:以列表形式存在,主要定义在文档中会被蜘蛛处理的可用命令空间;

(5)adapt_response(response)方法:在spider分析响应前被调用;

(6)process_results(response, results)方法:在spider返回结果时被调用,主要对结果在返回前进行最后的处理。

3、运行爬虫

#运行爬虫命令
python -m scrapy crawl steve --nolog

运行结果:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值