2015-08-05 2 views
0

Я создаю простой скребок. Однако у меня проблема с обработкой XML-данных должным образом, в частности, после создания элемента xml, я обнаружил, что мой элемент не содержит дочерних узлов (я ожидал, что они будут). Мне что-то здесь не хватает?Обработка данных XML из запросов python

Мой код:

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) 

Несколько примеров элемента, не имеющего детей:

>>> 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 будет, как ожидается, в следующем порядке:

<?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> 

ответ

2

XML-вы получили в root на самом деле правильно, так как если вы проверите свой xml, у него есть -

<contents><![CDATA[ 

Она имеет только один узел, contents, а остальные фактически CDATA текст внутри него.

Вы можете получить к ним доступ, используя root.text. Кроме того, они не кажутся фактическими xml, поскольку у него есть не закрытый тег <div>, вы можете рассмотреть возможность использования некоторой текстовой библиотеки html для анализа этого текста, а не xml.etree.ElementTree, может быть BeautifulSoup.

+0

Спасибо Anand! Я использовал красивый суп для этого и отлично работал – user3636636

Смежные вопросы