2012-11-17 17 views
5

पार्स मैं एक html पृष्ठनिकालें प्रपत्र कुंजी मान जोड़े अजगर में html पृष्ठ फार्म या html पृष्ठ

उदाहरण

name="frmLogin" method="POST" onSubmit="javascript:return validateAndSubmit();" action="TG_cim_logon.asp?SID=^YcMunDFDQUoWV32WPUMqPxeSxD4L_slp_rhc_rNvW7Fagp7FgH3l0uJR/3_slp_rhc_dYyJ_slp_rhc_vsPW0kJl&RegType=Lite_Home" 

के लिए

में किसी न किसी रूप तत्वों की कुंजी मान जोड़े निकालना चाहते हैं, जबकि मूल लाइन है

<form name="frmLogin" method="POST" onSubmit="javascript:return validateAndSubmit();" action="TG_cim_logon.asp?SID=^YcMunDFDQUoWV32WPUMqPxeSxD4L_slp_rhc_rNvW7Fagp7FgH3l0uJR/3_slp_rhc_dYyJ_slp_rhc_vsPW0kJl&RegType=Lite_Home"> 

क्या कोई तरीका है जिसका उपयोग मैं सुरक्षित रूप से कुंजी और मूल्य जोड़े प्राप्त कर सकता हूं। मैंने रिक्त स्थान से विभाजन करने और फिर '=' वर्णों का उपयोग करने का प्रयास किया लेकिन कोट्स के अंदर स्ट्रिंग में '=' ​​भी हो सकता है।

क्या कोई अलग प्रकार की विभाजन विधि है जो उद्धरणों का भी ख्याल रख सकती है?

उत्तर

7

एक पार्स पुस्तकालय का उपयोग इस तरह के lxml.html के रूप में एचटीएमएल पार्स करने के लिए। पार्सर

  • का उपयोग कर प्रपत्र तत्व चुनें पेज

    1. लोड:

      पुस्तकालय आप क्या जरूरत है, शायद कुछ ही कदम की तुलना में अधिक नहीं ले जा पाने के लिए एक आसान तरीका होगा

    2. पर संचालित करने के लिए डेटा का अनुरोध आप चाहते हैं

    उदाहरण कोड:

    >>> import lxml.html 
    >>> doc = lxml.html.parse('http://stackoverflow.com/questions/13432626/split-a-s 
    tring-in-python-taking-care-of-quotes') 
    >>> form = doc.xpath('//form')[0] 
    >>> form 
    <Element form at 0xbb1870> 
    >>> form.attrib 
    {'action': '/search', 'autocomplete': 'off', 'id': 'search', 'method': 'get'} 
    
  • 2

    आपको यह एक रेगुलर एक्सप्रेशन का उपयोग कर सकते हैं:

    /([^=, ]+)="([^" ]+|[^," ]+)" ?"/ 
    

    अजगर में, आप यह कर सकते हैं:

    #!/usr/bin/python 
    
    import re 
    
    text = 'name="frmLogin" method="POST" onSubmit="javascript:return validateAndSubmit();" action="TG_cim_logon.asp?SID=^YcMunDFDQUoWV32WPUMqPxeSxD4L_slp_rhc_rNvW7Fagp7FgH3l0uJR/3_slp_rhc_dYyJ_slp_rhc_vsPW0kJl&RegType=Lite_Home"'; 
    
    ftext = re.split(r'([^=, ]+)="([^" ]+|[^," ]+)" ?', text) 
    
    print ftext; 
    
    +0

    बच निकले डबल कोट्स यहां एक समस्या पैदा कर सकते हैं। –

    +0

    @JanDvorak मैंने कभी भी HTML में कोई उद्धरण नहीं छोड़ा है, लेकिन वास्तव में, यह एक समस्या हो सकती है ... – rayfranco

    +0

    [Obligatory] (http://stackoverflow.com/a/1732454/566644)। –

    1
    s = r'name="frmLogin" method="POST" onSubmit="javascript:return validateAndSubmit();" action="TG_cim_logon.asp?SID=^YcMunDFDQUoWV 
    32WPUMqPxeSxD4L_slp_rhc_rNvW7Fagp7FgH3l0uJR/3_slp_rhc_dYyJ_slp_rhc_vsPW0kJl&RegType=Lite_Home"' 
    >>> lst = s.split('" ') 
    >>> for item in lst: 
    ...  print item.split('="') 
    ... 
    ['name', 'frmLogin'] 
    ['method', 'POST'] 
    ['onSubmit', 'javascript:return validateAndSubmit();'] 
    ['action', 'TG_cim_logon.asp?SID=^YcMunDFDQUoWV32WPUMqPxeSxD4L_slp_rhc_rNvW7Fagp7FgH3l0uJR/3_slp_rhc_dYyJ_slp_rhc_vsPW0kJl&RegType=Li 
    te_Home"'] 
    
    0
    {i.split('="')[0]: i.split('="')[1] for i in str.split("\" ")} 
    

    जहां str अपने मूल स्ट्रिंग

    0
    dict=eval('dict(%s)'%name.replace(' ',',')) 
    print dict 
    {'action': 'TG_cim_logon.asp?SID=^YcMunDFDQUoWV32WPUMqPxeSxD4L_slp_rhc_rNvW7Fagp7FgH3l0uJR/3_slp_rhc_dYyJ_slp_rhc_vsPW0kJl&RegType=Lite_Home', 'onSubmit': 'javascript:return,validateAndSubmit();', 'method': 'POST', 'name': 'frmLogin'} 
    

    यह आपकी समस्या का समाधान नहीं है।

    संबंधित मुद्दे