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

運行結果:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章