我正在使用一个电影抓取器/自动下载器,它可以对我当前的电影收藏进行迭代,找到新的推荐,然后下载新商品。
有一部分我刮了元数据的IMDb,似乎卡在了这个位置,我似乎无法弄清楚为什么...。它已经在不同的imdb页面上运行了相同的代码(这是正确的新页面的第29次迭代)
我正在使用C#!
代码:
private string Match(string regex, string html, int i = 1)
{
return new Regex(regex, RegexOptions.Multiline).Match(html).Groups[i].Value.Trim();
}
regex参数字符串的内容:
<title>.*?\\(.*?(\\d{4}).*?\\).*?</title>
html参数字符串内容:太大,无法在此处粘贴,但实际上是http://www.imdb.com/title/tt4422748/combined的html字符串表示形式
如果使用的是chrome,则可以通过以下方式轻松查看:
查看源代码:http://www.imdb.com/title/tt4422748/combined
我已经在Visual Studio中暂停执行,然后继续前进,它继续运行,但是挂起了(它不让我踩,它只是运行)。如果我再次按下暂停键,它将返回到具有相同参数值的相同位置(不,我不是在无限循环中调用它。我对Regex相当陌生,因此不胜感激!
使用.*
就像是说我要匹配所有内容,但一无所获。每次使用它都会使解析器回溯许多不同的可能性,从而使它变得无响应,并且似乎锁定了。
设计模式的人是否真的不知道标题是否要有文字?我打赌99%的时间标题都带有文字。.那为什么.*
还要用.+
呢,至少如何?
如果要在定界符之间使用文本,请使用此
title\>(?<Title>[^<]+)\</title
然后通过命名的组“标题”而不是组[0]提取匹配的文本。如果捕获了一个名为match的讨厌内容,则Group [1]也将具有实际的匹配文本。
使用HTML敏捷包。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句