Привет, я первоклашка в мире c# по этому прошу помощи.
Ниже код работает в один поток, цель взять ссылку на беклинк из файла links.txt и проверить в HTML коде есть ли на этой странице ссылка(ссылки) с файла find.txt
Работает все ок, но если закинуть в файл с беклинками 20-30 тысяч страниц, можно идти спать .
Пробовал читать и делать по примеру как тут --> https://zennolab.com/discussion/threads/parallelnye-zaprosy.19609/ но из того что пробовал нечего не выходит или простыми словами (читаю и не понимаю зачем я это читаю потому понимание нет )
Подскажите как сделать параллельно работающих 5 потоков или больше
Ниже код работает в один поток, цель взять ссылку на беклинк из файла links.txt и проверить в HTML коде есть ли на этой странице ссылка(ссылки) с файла find.txt
Работает все ок, но если закинуть в файл с беклинками 20-30 тысяч страниц, можно идти спать .
Пробовал читать и делать по примеру как тут --> https://zennolab.com/discussion/threads/parallelnye-zaprosy.19609/ но из того что пробовал нечего не выходит или простыми словами (читаю и не понимаю зачем я это читаю потому понимание нет )
Проверка беклинков на наличие ссылок:
instance.ClearCookie();
instance.ClearCache();
//Привязка файла с беклинками
IZennoList SL = project.Lists["file_input"];
SL.Clear();
var filePathSL= project.Directory + @"\in\links.txt";
SL.Bind(filePathSL);
project.SendInfoToLog(SL.Count.ToString() + " ссылок в которых будем искать", true);
//Привязка файла с ссылками которые будем искать
IZennoList SSL = project.Lists["search_site_link"];
SSL.Clear();
var filePathSSL= project.Directory + @"\in\find.txt";
SSL.Bind(filePathSSL);
project.SendInfoToLog(SSL.Count.ToString() + " ссылок которые будем искать", true);
//GET запрос к сайту
List<string> SLTemp = new List<string>();
SLTemp.Clear();
SLTemp.AddRange(SL);
project.SendInfoToLog("Создали временный список для беклинков", true);
//Получаем HTML страницу для поиска
for(int i=0; i < SLTemp.Count; i++)
{
var LinkForGet = SLTemp[i].ToString();
project.SendInfoToLog(LinkForGet + " Взяли ссылку", true);
string url = LinkForGet;
string proxy = "";
string encoding = "UTF-8";
var Responce = ZennoPoster.HttpGet(url, proxy, encoding, ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.BodyOnly);
project.SendInfoToLog("GET к сайту " + project.Variables["site_link"].Value + " получен", true);
//Создаем регулярку для поиска ссылки для чистки урл
var reggg = @"(?<=https?://)[\w\W]*?(?=/)";
List<string> SSLTemp = new List<string>();
SSLTemp.Clear();
SSLTemp.AddRange(SSL);
project.SendInfoToLog("Создали временный список ссылок которые будем искать", true);
for(int j=0; j < SSLTemp.Count; j++)
{
var SSLreg = System.Text.RegularExpressions.Regex.Match(SSLTemp[j], reggg).Value;
project.SendInfoToLog(SSLreg + " Ссылка после регулярки", true);
var Result = System.Text.RegularExpressions.Regex.Match(Responce, SSLreg).Value;
if(Result != string.Empty)
{
string txtPath = project.Directory+@"\out\links_good.txt";
string txtInfo = string.Join("/n", LinkForGet);
if (File.ReadAllLines(txtPath).Where(arg => !string.IsNullOrWhiteSpace(arg)).Count() < 1) File.AppendAllText(txtPath, txtInfo);
else File.AppendAllText(txtPath, Environment.NewLine + txtInfo);
File.WriteAllLines(txtPath,File.ReadLines(txtPath).Where(arg => !string.IsNullOrWhiteSpace(arg)).Distinct().ToList());
project.SendInfoToLog(LinkForGet + " найден");
}
else
{
string txtPath = project.Directory+@"\out\links_bad.txt";
string txtInfo = string.Join("/n", LinkForGet);
if (File.ReadAllLines(txtPath).Where(arg => !string.IsNullOrWhiteSpace(arg)).Count() < 1) File.AppendAllText(txtPath, txtInfo);
else File.AppendAllText(txtPath, Environment.NewLine + txtInfo);
File.WriteAllLines(txtPath,File.ReadLines(txtPath).Where(arg => !string.IsNullOrWhiteSpace(arg)).Distinct().ToList());
project.SendInfoToLog(LinkForGet + " не найден");
}
}
}