scrapy 解析xml格式的数据
2024-10-19 07:34:20
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返回结果时被调用,主要对结果在返回前进行最后的处理。
最新文章
- JavaWeb学习笔记——开发动态WEB资源(五)servlet身份验证
- Android的LinearLayout中的权重android:layout_weight
- shell修改文件名(一)
- POJ 2965 The Pilots Brothers' refrigerator 位运算枚举
- TVS_压敏电阻等保护类器件的布局问题
- javascript 阻止多次点击造成的轮播混乱
- 重探 DFT
- 新手介绍简单一下iOS开发中几种界面传值
- FFmpeg 结构体学习(五): AVCodec 分析
- 使用TPC-DS工具生成数据
- Redis 通过 info 查看信息和状态
- sublime修改侧边栏字体
- Windows程序设计_21_Win32文件操作
- postgresql模糊查询json类型字段内某一属性值
- Python 使用 face_recognition 人脸识别
- POJ 1451 T9 (字典树好题)
- GDI+ gif文件的显示和格式转换
- Github遇到Permanently added the RSA host key for IP address '52.74.223.119' to the list of known hosts.
- 1270: Wooden Sticks [贪心]
- Capture Conversion解读
热门文章
- kafka手动设置offset
- Java精进-20分钟学会mybatis使用
- [CF1519C] Berland Regional (数论分块)
- 解决:Error downloading packages: containerd.io-1.6.4-3.1.el7.x86_64: [Errno 256] No more mirrors to try.
- FFT/NTT 学习笔记
- K8S_三种Port区别总结
- QT学习(四)----360界面制作(1)
- Java SE 2、抽象类
- 官方文档采用Docker方式安装
- 8. 使用Fluentd+MongoDB采集Apache日志