我想从cnn的网站收集所有新闻链接。使用chrome访问它可以防止页面的不同视图,即使用某些前端框架但使用NodeJS的已编译html文件,如果我访问cnn.com,则显示未编译的html文件,该文件没有任何链接标签,但是具有JavaScript数组,其中提到的链接以“ uri”为键,链接为值。
未编译的html文件为here。
我正在解析此html文件,该文件中多次出现“ uri”一词,后跟引号中的链接:
"uri":"/2018/10/14/politics/trump-60-minutes-interview/index.html"
我想在此模式下显示页面上的所有此类链接。哪些正则表达式将返回JavaScript中的链接?
答案 0 :(得分:2)
我认为比赛将是最好的解决方案。
import akka.util.ByteString;
import play.libs.streams.Accumulator;
import play.mvc.EssentialAction;
import play.mvc.EssentialFilter;
import play.mvc.Result;
import javax.inject.Inject;
import java.util.concurrent.Executor;
public class Filters2 extends EssentialFilter {
private final Executor executor;
@Inject
public Filters2(Executor executor) {
super();
this.executor = executor;
}
@Override
public EssentialAction apply(EssentialAction next) {
return EssentialAction.of(request -> {
request.headers().put("Strict-Transport-Security", new String[]{"max-age=31536000; includeSubDomains"});
Accumulator<ByteString, Result> accumulator = next.apply(request);
return accumulator.map(result -> result, executor);
});
}
}
答案 1 :(得分:1)
如果我对您的理解正确(也就是说,所有链接均以"uri":
开头),则可能要尝试使用的正则表达式是:
(?<=\"uri\":)\"([\w\/\-.]*)\"
让我们分解一下:
(?<=\"uri\":)
-此部分确保在我们要查找的文本之前,出现"uri":
文本。它称为向后查找,并且以与^
和$
字符相同的方式工作。\"([\w\/\-.]*)\"
-匹配包含URL的引号的实际内容有关此正则表达式功能的更多详细信息,请访问下面链接的Regex101演示,并在页面右侧查找说明。
要访问提取的文本但不包含"
个字符,您需要访问存储在RegExp.exec()
产生的匹配对象中的第一个捕获组。您可以这样:
var myString = '"uri":"/2018/10/14/politics/trump-60-minutes-interview/index.html"';
var myRegexp = /(?<=\"uri\":)\"([\w\/\-.]*)\"/g;
var match = myRegexp.exec(myString);
console.log(match[1]); // prints: /2018/10/14/politics/trump-60-minutes-interview/index.html
如果您还有其他问题或在此处添加评论,请查看我在下面链接的问题。此外,请考虑@CertainPerformance提到的内容-并非所有JS版本都支持lookbehinds。
资源:
Regex101 Demo
SO - How do you access the matched groups in a JavaScript regular expression?