2

我正在寻找通过包含该元素的 HTML 请求进行解析:

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

尝试获取 img src 标签。我想要的只是网址。

在这一点上,我可能过火了。使用 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

正如我所说,这可能过于复杂了。最简单(或只是功能性)的方法是什么?

4

2 回答 2

1

使用正则表达式!

这样的事情应该可以解决问题:

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

请参阅此处的工作示例:http ://www.rubular.com/r/f89Y9fHGtN(注意:Ruby 正则表达式与 JS 正则表达式有点不同,但我不知道后者有这么酷的工具。)

 


正则表达式解释:

<img– 这匹配标签的开头。

[^>]*– 有点棘手。这消除了src论点(alt例如论点)前面的东西。当参数中有一个字符时,这个版本会失败>,这可能不应该发生。您可以尝试用 替换这部分.*,这在这种情况下会起作用,另一方面,当参数值以 结尾时会失败src=

src="– 这找到了 src 参数。

([^"]*)捕获里面的 URL。

"– 找到值的结尾。

 

有些人在遇到问题时会想“我知道,我会使用正则表达式”。现在他们有两个问题。

 

于 2013-07-13T19:26:42.707 回答
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]

您可以在此处查看一个工作示例。祝你好运!

于 2013-07-13T19:10:53.350 回答