2

私はウォンバットでクローラーを書いています。そしてどういうわけか私はXPATHではなくCSSセレクターを使用しています。そして、私はここで非常に難しい選択をしています-cssを使用して達成することはできません。

ページから取得したいdiv要素があります:

<div class="do_cat_ads_box"> ... </div>
<div class="do_cat_ads_box2"> ... </div>
<div class="do_cat_ads_box" style=".."> ...</div>
<div class="do_cat_ads_box2" style=".."> ... </div>

しかし、「style」属性を持つ要素は、私が必要としないゴミ(広告)です。

だから私の質問は、クラス'do_cat_ads_box'と'do_cat_ads_box2'を持つすべてのdiv要素を取得できますが、'style'属性を持つdiv要素は避けますか?

私はこのようなものになってしまい、それは機能していません:

application 'css=div.do_cat_ads_box2, div.do_cat_ads_box,  div.do_cat_ads_box:not(@style)', :iterator do
  href 'css=div.do_cat_ads_image  a @href'
  name 'css=div.do_cat_ads_detail a'
end

cssセレクターで2倍にならない場合は、常にxpathの方法があります。しかし、私はcss-selectorsアプローチに非常に興味があります。

4

3 に答える 3

3

クラスが定義されているすべての要素を取得するのは非常に簡単です。

div[class]

最新のCSS3準拠のブラウザー(caniuse.com/#feat=css-sel3)にも:not()セレクターがあり、クラスはあるがスタイルはないすべてのdivにアクセスできます。

div[class]:not([style])

ブラウザまたはHTMLパーサーがCSS2のみをサポートしている場合は、jQuery(すべてのブラウザで:not()をサポート)を使用するか、div [class]セレクタを使用して、結果を手動でループする必要があります(どの言語でも)を使用して)スタイル属性を持つアイテムを削除します。CSS3をサポートしている場合、2番目のセレクターは必要なすべてを一度に実行します。

于 2012-08-17T17:31:16.427 に答える
0

CSSの属性セレクターは[attr]表記法を使用します。表記は@attr、属性ロケーター(およびXPath)に関係します。

Wombatが属性セレクターのCSS構文をサポートしていると仮定して、クラスセレクターを次のように変更:not(@style):not([style])て書き直してみてください。

application 'css=div.do_cat_ads_box:not([style]), div.do_cat_ads_box2:not([style])', :iterator do
  href 'css=div.do_cat_ads_image  a @href'
  name 'css=div.do_cat_ads_detail a'
end
于 2012-08-17T17:29:54.063 に答える
-1

IE9より前のものをサポートしたい場合、CSSでは不可能です。JSが必要です。

于 2012-08-17T17:29:34.833 に答える