Python爬虫之XML
一、请求参数形式为xml
举例说明。
现在有这样一个网址:https://www.runff.com/html/live/s1484.html;想要查询图片列表,打开F12,观察到请求如下:

这里的请求参数形式为xml,使用python模仿请求的代码这样写
import requests fid = 3748813
bib = 25001 url = "https://www.runff.com/html/live/s1484.html"
params = {
"isbxapimode": "true",
"_xmltime": "1543561724351.0.3817698648690635"
}
headers = {
"cookie": "ASP.NET_SessionId=hb30jkbmqnfwyhjo0iqrrkdi",
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36",
}
payload = '<?xml version="1.0" encoding="utf-8"?><BxMessage><AppId>BxAPI</AppId><Type>1</Type>' \
'<Action>getPhotoList</Action><Data><fid>{}</fid>' \
'<number>{}</number><minpid>0</minpid>' \
'<time>Wed Nov 21 2018 14:21:42 GMT+0800 (中国标准时间)</time><sign>false</sign>' \
'<pagesize>100</pagesize></Data></BxMessage>'.format(fid, bib)
payload = payload.encode('utf-8')
r = requests.post(url, headers=headers, params=params, data=payload, timeout=3)
print(r.content.decode('utf-8'))
这里主要使用了post方法,将xml的参数直接以字符串的形式传给post的‘data’参数。

可以看到我们返回内容也是xml。这个时候就需要解析xml。
二、xml解析
xml原文(与上文的请求返回结果无关):
<?xml version="1.0" encoding="utf-8"?>
<BxMessage>
<AppId>BxAPI</AppId>
<Type>2</Type>
<Action>getPhotoList</Action>
<StateCode>2</StateCode>
<Message index="">请先登录</Message>
<Message index="">ok</Message>
<Data></Data>
</BxMessage>
1.直接转成json处理
使用 xmltodict 库
代码:
from xmltodict import parse xml = '<?xml version="1.0" encoding="utf-8"?><BxMessage><AppId>BxAPI</AppId><Type>2</Type>' \
'<Action>getPhotoList</Action><StateCode>2</StateCode><Message index="0">请先登录</Message>' \
'<Message index="1">ok</Message><Data></Data></BxMessage>' data = parse(xml) # 解析xml为有序字典
print(data)
box = data.get('BxMessage', {}) # 获取最外层的标签
app_id = box.get('AppId') # 获取次外层的标签
print(app_id) msg = box.get('Message', []) # 多个标签名相同时,获取到的是标签列表
for m in msg:
print(m.get('@index')) # 获取属性,使用'@'前缀
print(m.get('#text')) # 获取标签文本,使用'#text'
输出:
OrderedDict([('BxMessage', OrderedDict([('AppId', 'BxAPI'), ('Type', ''), ('Action', 'getPhotoList'), ('StateCode', ''), ('Message', [OrderedDict([('@index', ''), ('#text', '请先登录')]), OrderedDict([('@index', ''), ('#text', 'ok')])]), ('Data', None)]))])
BxAPI
0
请先登录
1
ok
输出的是有序字典,取值可以和字典一样使用“get”。
假设有多个相同标签,转换成字典时,会将相同关键字的值组成一个列表。
2.直接解析xml
使用上文中的xml
简要解析代码:
from xml.etree import ElementTree xml = '<?xml version="1.0" encoding="utf-8"?><BxMessage><AppId>BxAPI</AppId><Type>2</Type>' \
'<Action>getPhotoList</Action><StateCode>2</StateCode><Message index="0">请先登录</Message>' \
'<Message index="1">ok</Message><Data></Data></BxMessage>' tree = ElementTree.fromstring(xml) # 从字符串解析得到xml结构
print(tree) # tree是一个xml 元素, BxMessage
box = tree.find('Message') # 找tree下一级的标签
print(box) # box是一个xml 元素, BxMessage
print(box.text) # 输出标签的内容
print(box.get('index')) # 获取标签属性
boxes = tree.findall('Message') # 找到所有该名字的标签,
print(boxes) # 返回一个列表
输出:
<Element 'BxMessage' at 0x00000217E207D368>
<Element 'Message' at 0x00000217E9CB0958>
请先登录
0
[<Element 'Message' at 0x00000217E9CB0958>, <Element 'Message' at 0x00000217E9CB98B8>]
Python爬虫之XML的更多相关文章
- Python爬虫入门一之综述
大家好哈,最近博主在学习Python,学习期间也遇到一些问题,获得了一些经验,在此将自己的学习系统地整理下来,如果大家有兴趣学习爬虫的话,可以将这些文章作为参考,也欢迎大家一共分享学习经验. Pyth ...
- python爬虫:一些常用的爬虫技巧
python爬虫:一些常用的爬虫技巧 1.基本抓取网页 get方法: post方法: 2.使用代理IP 在开发爬虫过程中经常会遇到IP被封掉的情况,这时就需要用到代理IP; 在urllib2包中有Pr ...
- [Python爬虫] Selenium实现自动登录163邮箱和Locating Elements介绍
前三篇文章介绍了安装过程和通过Selenium实现访问Firefox浏览器并自动搜索"Eastmount"关键字及截图的功能.而这篇文章主要简单介绍如何实现自动登录163邮箱,同时 ...
- 【Python爬虫】入门知识
爬虫基本知识 这阵子需要用爬虫做点事情,于是系统的学习了一下python爬虫,觉得还挺有意思的,比我想象中的能干更多的事情,这里记录下学习的经历. 网上有关爬虫的资料特别多,写的都挺复杂的,我这里不打 ...
- Python爬虫实战(4):豆瓣小组话题数据采集—动态网页
1, 引言 注释:上一篇<Python爬虫实战(3):安居客房产经纪人信息采集>,访问的网页是静态网页,有朋友模仿那个实战来采集动态加载豆瓣小组的网页,结果不成功.本篇是针对动态网页的数据 ...
- Python爬虫实战(3):安居客房产经纪人信息采集
1, 引言 Python开源网络爬虫项目启动之初,我们就把网络爬虫分成两类:即时爬虫和收割式网络爬虫.为了使用各种应用场景,该项目的整个网络爬虫产品线包含了四类产品,如下图所示: 本实战是上图中的“独 ...
- Python爬虫实战(2):爬取京东商品列表
1,引言 在上一篇<Python爬虫实战:爬取Drupal论坛帖子列表>,爬取了一个用Drupal做的论坛,是静态页面,抓取比较容易,即使直接解析html源文件都可以抓取到需要的内容.相反 ...
- Python爬虫之爬取慕课网课程评分
BS是什么? BeautifulSoup是一个基于标签的文本解析工具.可以根据标签提取想要的内容,很适合处理html和xml这类语言文本.如果你希望了解更多关于BS的介绍和用法,请看Beautiful ...
- python爬虫如何入门
学爬虫是循序渐进的过程,作为零基础小白,大体上可分为三个阶段,第一阶段是入门,掌握必备的基础知识,第二阶段是模仿,跟着别人的爬虫代码学,弄懂每一行代码,第三阶段是自己动手,这个阶段你开始有自己的解题思 ...
随机推荐
- 2016-2017-20155329 《Java程序设计》第6周学习总结
学号 2016-2017-20155329 <Java程序设计>第6周学习总结 教材学习内容总结 数据从来源取出:输入串流 java.io.InputStream 写入目的的:输出串流 j ...
- Core Graphics Layer Drawing
[Core Graphics Layer Drawing] CGLayer objects (CGLayerRef data type) allow your application to use l ...
- 第二届CCCC赛后感想 2017-04-15 23:56 88人阅读 评论(0) 收藏
第一次写赛后感想,也不算什么很正规的比赛,不过这次比赛的时间恰好处于思想变化的阶段,留贴纪念. 先谈谈这次比赛,弱校萌新,依靠申请进了总决赛,发现和第一届不一样,缺少了团队奖心中有点缺乏动力,比赛2个 ...
- handsontable-mobiles
适配移动端:文档不完整,现在只能适配ipad4
- (1)-使用json所要用到的jar包下载
json是个非常重要的数据结构,在web开发中应用十分广泛.我觉得每个人都应该好好的去研究一下json的底层实现,需要准备下面的六个jar包:commons-lang-1.0.4.jar common ...
- eclipse中不能找到dubbo.xsd报错”cvc-complex-type.2.4.c“的 两种解决方法
配置dubbo环境过程中的xml文件,安装官网的demo配置好后,出错: "Description Resource Path Location Type cvc-complex-type. ...
- Oracle EBS客户化程序中格式化金额
在Oracle EBS系统中,随处可见金额的显示格式,通常情况下都具有千分位符,同时有一定位数的精度,让我们先来看看一些现成的例子 上面这些列子中的金额都显示了千分位符,同时具备以2位小数,难道 ...
- Default style sheet for HTML 4
http://www.w3.org/TR/CSS21/sample.html html, address, blockquote, body, dd, div, dl, dt, fieldset, f ...
- 详解CSS float属性
CSS中的float属性是一个频繁用到的属性,对于初学者来说,如果没有理解好浮动的意义和表现出来的特性,在使用的使用很容易陷入困惑,云里雾里,搞不清楚状态.本文将从最基本的知识开始说起,谈谈关于浮动的 ...
- 转载:爬虫技术浅析(Python)
http://drops.wooyun.org/tips/3915 0x00 前言 网络爬虫(Web crawler),是一种“自动化浏览网络”的程序,或者说是一种网络机器人.它们被广泛用于互联网搜索 ...