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返回结果时被调用,主要对结果在返回前进行最后的处理。

最新文章

  1. JavaWeb学习笔记——开发动态WEB资源(五)servlet身份验证
  2. Android的LinearLayout中的权重android:layout_weight
  3. shell修改文件名(一)
  4. POJ 2965 The Pilots Brothers' refrigerator 位运算枚举
  5. TVS_压敏电阻等保护类器件的布局问题
  6. javascript 阻止多次点击造成的轮播混乱
  7. 重探 DFT
  8. 新手介绍简单一下iOS开发中几种界面传值
  9. FFmpeg 结构体学习(五): AVCodec 分析
  10. 使用TPC-DS工具生成数据
  11. Redis 通过 info 查看信息和状态
  12. sublime修改侧边栏字体
  13. Windows程序设计_21_Win32文件操作
  14. postgresql模糊查询json类型字段内某一属性值
  15. Python 使用 face_recognition 人脸识别
  16. POJ 1451 T9 (字典树好题)
  17. GDI+ gif文件的显示和格式转换
  18. Github遇到Permanently added the RSA host key for IP address '52.74.223.119' to the list of known hosts.
  19. 1270: Wooden Sticks [贪心]
  20. Capture Conversion解读

热门文章

  1. kafka手动设置offset
  2. Java精进-20分钟学会mybatis使用
  3. [CF1519C] Berland Regional (数论分块)
  4. 解决:Error downloading packages: containerd.io-1.6.4-3.1.el7.x86_64: [Errno 256] No more mirrors to try.
  5. FFT/NTT 学习笔记
  6. K8S_三种Port区别总结
  7. QT学习(四)----360界面制作(1)
  8. Java SE 2、抽象类
  9. 官方文档采用Docker方式安装
  10. 8. 使用Fluentd+MongoDB采集Apache日志