Красивый суп xml тегов (<>) при преобразовании в текст с .text, становится очень неструктурированным текстом - PullRequest
0 голосов
/ 31 января 2020
from bs4 import BeautifulSoup
import requests

source = requests.get('http://www.mocky.io/v2/5e34780e3000008c00d964dd').text  
soup = BeautifulSoup(source)
print(soup)

вывод:

 <textarea cols="100" name="olidata" readonly="" rows="40">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;EVENT spec="IDL:o2bcs/automator/common/tasklistEvents:1.0#tasklistupdateevent"&gt;
  <?xml version="1.0" encoding="UTF-8"?>
<event spec="IDL:o2bcs/automator/common/tasklistEvents:1.0#tasklistupdateevent">
  <tasklistoli>
    <bpid>
      <oid>B32028040:M11</oid>
      <type>MIGOPT1</type>
    </bpid>
    <oli>
      <tolicontrol>
        <oliid>1</oliid>
        <externalid1></externalid1>
        <externalid2></externalid2>
        <highlevelstatus>1</highlevelstatus>
        <status>550</status>
        <catalogue>14</catalogue>
        <errorcode>500220</errorcode>
        <errorstring>Unable to select the given SI COMP for deletion.</errorstring>
        <subscriptionid></subscriptionid>
        <activityid></activityid>
        <activityaccesscode></activityaccesscode>
        <dateofnetworkexecution></dateofnetworkexecution>
      </tolicontrol>
      <toli_1>
        <discriminator>29</discriminator>
        <tmigopt>

это дает мне хорошо структурированное XML (type = bs4.BeautifulSoup)

теперь, если я добавлю свой код с

    print(soup.text)

вывод:

<?xml version="1.0" encoding="UTF-8"?>\r\n<EVENT spec="IDL:o2bcs/automator/common/tasklistEvents:1.0#tasklistupdateevent">\r\n  \r\n\r\n  \r\n    \r\n      B32028040:M11\r\n      MIGOPT1\r\n    \r\n    \r\n      \r\n        1\r\n        \r\n        \r\n        1\r\n        550\r\n        14\r\n        500220\r\n        Unable to select the given SI COMP for deletion.\r\n        \r\n        \r\n        \r\n        \r\n      \r\n      \r\n        29\r\n        \r\n          \r\n            \r\n              524742\r\n              40193375\r\n              \r\n              \r\n              40003859\r\n              MOB\r\n              o2UniteBasicService\r\n              O2P0058\r\n              2018-05-08 00:00:00\r\n              \r\n              \r\n              \r\n              N\r\n              \r\n              \r\n              \r\n              2014-07-09 00:00:00\r\n              0\r\n              \r\n              \r\n                O2O0014\r\n                \r\n                524742\r\n                SIM

это дает мне очень плохие и неструктурированные данные, (type = str)

Я планирую использовать регулярные выражения в тексте, но мне нужны правильные данные, пожалуйста помогите

1 Ответ

0 голосов
/ 02 февраля 2020

Я до сих пор не понимаю ваших точных потребностей. Позвольте мне привести пример, чтобы увидеть, поможет ли это вам

from simplified_scrapy.request import req
from simplified_scrapy.simplified_doc import SimplifiedDoc
html = req.get('http://www.mocky.io/v2/5e34780e3000008c00d964dd') 
doc = SimplifiedDoc(html)
print (doc.event.text) # Output the text in the event tag
print ('-'*50)
# Traverse all nodes
def test(ele):
    if isinstance(ele,list):
        for e in ele:
            test(e)
        return
    children = ele.children
    if children:
        for e in children:
            test(e)
    else:
        print (ele.tag,ele.text)

test(doc.event.children)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...