我們一般用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
運行結果: