首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理python请求中的XML数据

处理python请求中的XML数据
EN

Stack Overflow用户
提问于 2015-08-05 05:50:39
回答 1查看 1K关注 0票数 0

我正在创建一个简单的网络刮刀。但是,我有一个正确处理XML数据的问题,具体来说,在创建xml元素之后,我发现我的元素不包含任何子节点(我预期会有)。我是不是漏掉了什么明显的东西?

我的代码:

代码语言:javascript
复制
import xml.etree.ElementTree as ET
import requests

with requests.session() as s:
    s.post(Urllog, data=payload)
    x = s.post(Urlcourses, data= formdata)
    root = ET.fromstring(x.content)
    print(x.content)

有几个元素没有子元素的例子:

代码语言:javascript
复制
>>> root.tag
'contents'
>>>
>>> for child in root:
...     print(child.tag) #does not return anything
...
>>>

>>> root[0]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: child index out of range
>>>

x.content如出一辙,如下所示:

代码语言:javascript
复制
    <?xml version="1.0"?>
<contents><![CDATA[ 
<!-- Display system announcements -->
  <div class="noItems divider">No Institution Announcements have been posted in the last 7 days.</div>
      <!-- Display course/org announcements -->
  <h3>xxx (S2 2015)</h3>
          <div class="courseDataBlock">
        <ul>
          <li><a
              href=xxx
            > Lecture Recordings + Tutorial Sheet</a></li>
          </ul>
        </div>
        <h3>xxx (S2 2015)</h3>
          <div class="courseDataBlock">
        <ul>
          <li><a
              href=xxx
            > Tutorials / consultation hours</a></li>
          <li><a
              href=xxx
            > 2014 lectures uploaded</a></li>
          </ul>
        </div>
        <h3>xxx(S2 2015)</h3>
          <div class="courseDataBlock">
        <ul>
          <li><a
              href=xxx
            > PASS - Peer Assisted Study Sessions</a></li>
          </ul>
        </div>
        <h3>xxxx</h3>
          <div class="courseDataBlock">
        <ul>
          <li><a
              href=xxxx2_1"
            > xxx!</a></li>
          <li><a
              href=xxx
            > Careers for Engineers: A session from Engineers Australia</a></li>
          </ul>
        </div>
        <div class="moduleControlWrapper u_reverseAlign">
    <a class="button-6"
        href=xxxx
      >more announcements...</a>
    </div>



                 ]]></contents>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-05 06:09:09

你在root中得到的xml实际上是正确的,因为如果你检查你的xml,它有-

代码语言:javascript
复制
<contents><![CDATA[ 

它只有一个节点,即contents,其余的实际上是它内部的CDATA文本。

您可以使用root.text访问它们。而且,它们似乎不是实际的xml,因为它有一个未关闭的<div>标记,您可能需要考虑使用一些html解析库来解析该文本,而不是xml.etree.ElementTree,可能是BeautifulSoup

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31824345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档