2

我正在用wombat写一个爬虫。不知何故,我正在使用 CSS 选择器,而不是 XPATH。而且我在这里有非常困难的选择——我无法使用 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>

但是具有“样式”属性的元素是我不需要的垃圾(广告)。

所以我的问题是,我可以获取所有具有“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 选择器的两倍,那么总是有 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] 选择器并手动遍历结果(无论您使用哪种语言) using) 并删除具有样式属性的项目。如果它支持 CSS3,那么第二个选择器将一次性完成您想要的所有操作。

于 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 回答