6

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

キーと値のペアを安全に取得できる方法はありますか。スペースで分割してから「=」文字を使用してみましたが、引用符内の文字列にも「=」を含めることができます。

見積もりも処理できる別の種類の分割方法はありますか?

4

6 に答える 6

7

html の解析には、 lxml.htmlなどの解析ライブラリを使用します。

ライブラリには、必要なものを取得するための簡単な方法があります。おそらく、いくつかの手順しか必要ありません。

  1. パーサーを使用してページをロードする

  2. 操作するフォーム要素を選択する

  3. 必要なデータを要求する

コード例:

>>> 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'}
于 2012-11-17T17:09:44.770 に答える
2

次のような正規表現を使用できます。

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

Pythonでは、これを行うことができます:

#!/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;
于 2012-11-17T16:58:05.673 に答える
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"']
于 2012-11-17T17:01:06.233 に答える
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'}

これはあなたの問題を解決します。

于 2012-11-17T17:25:54.987 に答える
0
{i.split('="')[0]: i.split('="')[1] for i in str.split("\" ")}

元の文字列はどこstrですか

于 2012-11-17T17:11:47.213 に答える
0

HTML フォームの解析をサポートするライブラリを使用できます。

例: https://mechanize.readthedocs.io/en/latest/

Python でのステートフルなプログラムによる Web ブラウジング。簡単な HTML フォームへの入力とリンクのクリックを使用して、プログラムでページを閲覧します。

于 2021-01-06T20:29:12.487 に答える