XMLFeedSpider 主要用于 解析 xml格式的数据
创建一个scrapy 项目文件
scrapy startproject xxx
创建一个spider
scrapy genspider -t xmlfeed xxx(名字) xxx.com(网站名)
解析的例子为招远市人民政府的数据
代码如下
"""
招远市人民政府
"""
import re
import scrapy
from scrapy.spiders import XMLFeedSpider
class Zhaoyuancity2GovproSpider(XMLFeedSpider):
name = 'ZhaoYuanCity_2_GovPro'
# allowed_domains = ['xxx.com']
start_urls = ['http://www.zhaoyuan.gov.cn/module/web/jpage/dataproxy.jsp?page=1&webid=155&path=http://www.zhaoyuan.gov.cn/&columnid=48655&unitid=180549&webname=%25E6%258B%259B%25E8%25BF%259C%25E5%25B8%2582%25E6%2594%25BF%25E5%25BA%259C&permiss']
iterator = 'iternodes' # you can change this; see the docs
itertag = 'datastore' # change it accordingly
def parse_node(self, response, selector):
# 用css 获取 一个列表
source_list = selector.css('recordset record::text').extract()
for li in source_list:
# 用正则解析url 我们去里面获取时间标题和内容
url= re.search(r'href=\"(.*\.html)\"',li).group(1)
yield scrapy.Request(
url=url,
callback=self.parse
)
def parse(self,response):
# 调用item
item = {}
# 写入链接提取器中获取到的url
item['title_url'] = response.url
# 标题名
item['title_name'] = response.css('meta[name="ArticleTitle"]::attr(content)').get()
# 标题时间
item['title_date'] = response.css('meta[name="pubdate"]::attr(content)').get()
# 内容提取 含源码
item['content_html'] = response.css('.main').get()
# 目录地址为
item['site_path_url'] = "http://www.zhaoyuan.gov.cn/col/col48655/index.html?number=ZYC120106"
# 交给item处理
yield item
运行项目
scrapy crawl xxxx--nolog
解释——总结:
-
iterator属性:设置使用的迭代器,默认为“iternodes”(一个基于正则表达式的高性能迭代器),除此之外还有“html”和“xml”迭代器;
-
itertag:设置开始迭代的节点;
-
parse_node方法:在节点与所提供的标签名相符合时被调用,在其中定义信息提取和处理的操作;
-
namespaces属性:以列表形式存在,主要定义在文档中会被蜘蛛处理的可用命令空间;
-
parse方法: 解析数据 发起正常请求
-
adapt_response(response)方法:在spider分析响应前被调用;
-
process_results(response, results)方法:在spider返回结果时被调用,主要对结果在返回前进行最后的处理。