0

私はスクレイピークロールスパイダーを使用しており、出力ページを解析して、次のようにすべての入力タグパラメーターを選択しようとしています:

  • 入力タイプ : 必須 ( text または password または file )
  • 入力 ID : 見つからない場合は、代わりに [入力名] を選択します。

スクレイピーシェルでテスト用のサンプルコードを書きましたが、正確な結果が得られないので、助けてもらえますか?

テスト済みサイト: http://testaspnet.vulnweb.com/Signup.aspx

>>> hxs.select('//input[@id] | //input[@type="text"] | /text()').extract()

[u'<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKLTY0MzI4NjU4Mw9kFgICAQ9kFgICAQ9kFgQCAQ8WBB4EaHJlZgUKbG9naW4uYXNweB4JaW5uZXJodG1sBQVsb2dpbmQCAw8WBB8AZB4HVmlzaWJsZWhkZHEZ3VN6SP/C2xESDN/Y3p8zhfSB">',

 u'<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWWgKJ+8rsBQLStq24BwK3jsrkBALF97vxAQKozoCcCQKpzpj7DgKSnr/eCQKSnr/eCQKSntPyAgKSntPyAgKSnseJCgKSnseJCgKSnvusAwKSnvusAwKSnu/DDAKSnu/DDAKSnoPmBQKSnoPmBQKSnre9DQKSnre9DQKSnqvQBgKSnqvQBgKSnp+5AwKSnp+5AwKSnrPcDAKSnrPcDAL3pJ3FDwL3pJ3FDwL3pLGYBwL3pLGYBwL3pKU/AvekpT8C96TZ0wkC96TZ0wkC96TN9gIC96TN9gIC96ThjQoC96ThjQoC96SVoAMC96SVoAMC96SJxwwC96SJxwwC96T9rAkC96T9rAkC96SRwwIC96SRwwICyMvj6AUCyMvj6AUCyMuXjw0CyMuXjw0CyMuLogYCyMuLogYCyMu/+Q8CyMu/+Q8CyMvTnQcCyMvTnQcCyMvHMALIy8cwAsjL+9cJAsjL+9cJAsjL7+oCAsjL7+oCAsjLw9MPAsjLw9MPAsjL9/YIAsjL9/YIAq3SwZ8KAq3SwZ8KAq3S9bIDAq3S9bIDAq3S6ckMAq3S6ckMAq3SnewFAq3SnewFAq3SsYMNAq3SsYMNAq3SpaYGAq3SpaYGAq3S2foPAq3S2foPAq3SzZEHAq3SzZEHAq3SofkFAq3SofkFAq3S1Z0NAq3S1Z0NAob5pwUChvmnBQKG+dvZCQKG+dvZCaCOP7DYDQ3mNEhISrmdoTKH9Tws">',

  u'<input name="tbUsername" type="text" id="tbUsername" class="Login">',

  u'<input name="tbPassword" type="password" id="tbPassword" class="Login">',

  u'<input type="submit" name="btnSignup" value="Sign me up" id="btnSignup">']
4

2 に答える 2

2

inputタイプtextpasswordまたはのすべての要素file:

//input[@type='text' or @type='password' or @type='file']

IDまたは名前にどのような条件が必要かわかりません-これinputにより、IDまたは名前のいずれかを持つこれら3つのタイプのすべての要素が取得されます。

//input[(@type='text' or @type='password' or @type='file') and (@id or @name)]

ID または名前 (ID が存在しない場合) が何か ( XXXX) と等しいかどうかをテストする場合:

//input[(@type='text' or @type='password' or @type='file') and (@id='XXXX' or (not(@id) and @name='XXXX'))]

IDを抽出したい場合:

//input[@type='text' or @type='password' or @type='file']/@id

IDが指定されていない場合、IDまたは名前のいずれかを抽出することは、標準のXPathでは可能ではないと思います。

于 2012-06-26T13:40:06.050 に答える
1

Scrapy についてはわかりませんが、純粋に XPath の観点からすると、次の要件を満たす必要があります。

//input[(@id or @name) and (@type = 'text' or @type = 'password' or @type = 'file')]

また、選択したノードのテキスト コンテンツを取得しようとしていることがわかりました。入力は自己終了タグであり、内部コンテンツを保持しないため、これはおそらく何も返しません。

于 2012-06-26T13:36:46.220 に答える