2016-01-08 2 views
1

Я пытаюсь очистить сайт, используя библиотеку clojure. Соответствующий селектор CSS:Как написать следующий clojure recive селектор?

body > table:nth-child(2) > tbody > tr > td:nth-child(3) > table > tbody > tr > td > table > tbody > tr:nth-child(n+3) 

Я тестировал вышеуказанный селектор с помощью jquery, и он работает. Но я не знаю, как перевести вышеприведенный синтаксис синтаксиса. Я попытался написать что-то по строкам:

(ns vimindex.core 
    (:gen-class) 
    (:require [net.cgrand.enlive-html :as html])) 

(def ^:dynamic *vim-org-url* "http://www.vim.org/scripts/script_search_results.php?order_by=creation_date&direction=descending") 
(defn fetch-url [url] 
    (html/html-resource (java.net.URL. url))) 

(defn scrape-vimorg [] 
    (println "Scraping vimorg") 
    (println 
    (html/select (fetch-url *vim-org-url*) 
       [:body :> [:table (html/nth-child 2)] :> :tbody :> :tr :> [:td (html/nth-child 3)] :> :table :> :tbody :> :tr :> :td :> :table :> :tbody :> [:tr (html/nth-child 1 3)]]))) 
;     body > table:nth-child(2)   > tbody > tr > td:nth-child(3)   > table > tbody > tr > td > table > tbody > tr:nth-child(n + 3) 
; Above selector works with jquery 

(defn -main 
    [& args] 
    (scrape-vimorg)) 

Но я получаю пустой ответ. Не могли бы вы рассказать мне, как перевести указанный выше CSS-селектор в синтаксисе призыва.

Большое спасибо.

Отредактировано: Включить полный код.

ответ

0

Синтаксис, который вам не хватает, представляет собой дополнительный набор скобок вокруг элементов, которые используют псевдоселекторы. Так что вы хотите что-то вроде этого:

[:body :> [:table (html/nth-child 2)] :> :tbody :> :tr 
[:td (html/nth-child 3)] :> :table :> :tbody :> :tr :> :td :> 
:table :tbody :> [:tr (html/nth-child 1 3)]]) 
+0

благодарит за быстрый ответ. Я внес изменения, предложенные вами, но это все еще не сработало. Я все еще получаю пустой ответ. Я редактировал свой вопрос, чтобы включить полный код. – Rohit

+0

Здесь есть много способов заблудиться. Сначала я предложил бы работать с более простым выбором. Тройная вложенная таблица - это пример грубого способа обучения Enlive. Расширение селектора по одному - это хороший способ найти, где он ломается. Кроме того, код, который вы предоставили, не очень полезен. Как насчет размещения узлов Enlive? – jmargolisvt

0

Это выглядит как браузеры (по крайней мере моя версия Firefox) добавить TBODY тег в их DOM представления, даже если это не в самом источнике.

Enlive этого не делает. Поэтому ваш код должен работать, когда вы опускаете части тела.

Смежные вопросы