2013-07-13 7 views
2

Я ищу для разбора через запрос HTML, который содержит элемент:извлечения URL из тега

<img src="https://pbs.twimg.com/media/...." alt="Embedded image permalink"</a> 

Чтобы попытаться получить IMG SRC тега. Все, что я хочу, это URL.

На данный момент я, вероятно, собираюсь за борт. Используя Request и Cheerio, попытайтесь это сделать.

Из 20 различных способов, которые я пытался сделать, вот мой текущий код.

var dummy; 
request('http://t.co/....', function (error, response, body) { 
    if (!error && response.statusCode == 200) { 
    $ = cheerio.load(response.body); 
    dummy = $('img[alt=Embedded image permalink]').attr('html'); 
    console.dir(dummy); 
    } 
} 

Я получаю сообщение об ошибке:

selector = selector.substr(data[0].length); 
TypeError: Cannot read property '0' of null 

Как я уже говорил, вероятно, усложнять это. Каков самый простой (или просто функциональный) способ сделать это?

+0

Почему вы не просто использовать что-то более тривиальное, как строковые функции и регулярное выражение? –

+0

Я определенно усложняю вещи. Началось с регулярного выражения, но мои навыки регулярного выражения не соответствовали нюханию - отказались от него и вместо этого пошли в этом направлении. Джереми, попробовал это и только что получил неопределенную ошибку? – chuckjones242

ответ

1

Используйте regexp!

Что-то вроде этого следует сделать трюк:

html.match(/<img [^>]*src="([^"]*)"/g) 

Смотрите рабочий пример здесь: http://www.rubular.com/r/f89Y9fHGtN (Внимание: Ruby регулярных выражений немного иначе, чем те, JS, но я не знаю, такой крутой инструмент для . последняя)

 


Regexp объяснил:

<img - это соответствует началу тега.

[^>]* - немного сложнее. Это избавляет от вещей перед аргументом src (например, аргумент alt). Эта версия терпит неудачу, когда внутри аргумента присутствует символ >, что, вероятно, не должно произойти. Вы можете попробовать заменить эту часть .*, которая будет работать в этом случае, если с другой стороны, если значение аргумента заканчивается src=.

src=" - это находит аргумент src.

([^"]*) - захватывает URL внутри.

" - находит конец значения.

 

Некоторые люди, сталкиваясь с проблемой, думаю, «Я знаю, я буду использовать регулярные выражения.» Теперь у них есть две проблемы.

 

+0

Ближе к обоим подходам! так вот что сейчас. Возьмите этот URL, например: https://twitter.com/LindsayBaines/status/355971561175531520/photo/1/large и запустите HTML через rubular. Вы получаете все изображения на странице. Я пытаюсь уничтожить его до одного: с большим добавлением до конца. Вот почему я пытался совместить это ... data-url = "https://pbs.twimg.com/media/BPCqP7ZCQAEe1Pg.png:large" data-resolved-url-large = "https: // pbs.twimg.com/media/BPCqP7ZCQAEe1Pg.png:large "> – chuckjones242

+0

Помогает ли это? 'html.match (/ ] * src =" ([^ "] *: large)"/g) ' –

+0

Просто, чтобы быть ясным, я только добавил часть': large' в блок захвата. –

0

Итак, если я правильно понял, вы хотите немедленно вычесть url после строки src в строке текста?

Почему бы вам не поместить весь текст в переменную, а затем удвоить его?

Например:

var arrayOfElements = $("#txt").val().split("src="); 
    var replacing = arrayOfElements[1].replace(/"/g, "'"); 
    var url = replacing.split("'"); 

    //You can now access the element by using url[1] 

Вы можете увидеть рабочий пример HERE. Удачи!

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