所以,我正在编写一个C#WinForms应用程序来从4chan抓取图像
最近,图像已经托管在另一个域上,所以我一直在尝试使用RegEx扫描来自boards.4chan.org
域的线程的html代码,并使用它来查找{{1}上的相应图像现在存储它们的域。我这样做是为了让我可以下载单个线程而不是整个电路板。
i.4cdn.org
现在,我暂时没有使用过RegEx,过去也没用过C#,所以我不确定我做错了是不是完全错了。我尝试将private void DownloadImages(string saveDir, string board, string threadNum, string fileType)
{
string htmlString;
int imageNum = 0;
WebClient wc = new WebClient();
try
{
htmlString = wc.DownloadString("http://boards.4chan.org/" + board + "/res/" + threadNum);
}
catch(Exception ex)
{
txtOutput.Text = ex.ToString();
return;
}
txtOutput.Text = "Found thread!";
MatchCollection allMatchResults;
Regex regexObj = new Regex("//i.4cdn.org/" + board + "/src/*." + fileType,RegexOptions.Singleline);
allMatchResults = regexObj.Matches(htmlString);
foreach(Match match in allMatchResults)
{
txtOutput.Text = match.ToString();
try
{
//txtOutput.Text = "Downloading file ";
wc.DownloadFile("http:" + match.Value.ToString() + "." + fileType, saveDir + imageNum + "." + fileType);
Thread.Sleep(1000);
imageNum++;
}
catch (Exception x)
{
txtOutput.Text = x.ToString();
return;
}
}
}
解析为htmlString
url的任何匹配,并且传递了board和filetype(它们来自表单上的checkedListBoxes,以获得特异性)。
我把它的网页源抓取到一个字符串中,以便我可以解析它并查找图像网址,这样我就可以在4cdn域上找到相应的图像。
我的问题是,虽然我收到了消息" Found Thread"正如我所希望的那样,程序似乎永远不会超越这一点 - 它似乎永远不会进入//i.4cdn.org
循环。
如果有更好的方法可以做到这一点,我愿意接受建议。我已经读过不尝试使用RegEx解析html ..但我认为我会很好,因为它不是我正在寻找的html本身。
答案 0 :(得分:1)
实际正则表达式意味着:
所以请改用此正则表达式:
new Regex("//i.4cdn.org/" + board + "/src/[^.]+\\." + fileType, RegexOptions.Singleline);
表示