با تشکر از همه دوستان از روش زیر رفتم ( هرچند برا کارهای آینده ام احتمالا به روش آقا/خانم 336699 نیاز پیدا کنم، چون همیشه اینقدر خوششانس نیستم که سایت مرجع فوق داده هارو ... )
خود سایت مکارم، یه قسمتی داره مخصوص احکام ( این لینک ) که راحت داده هاشو با کد زیر گرفتم ازش :
اینم کل رساله که با کد زیر استخراج کردم از لینک بالا : makarem resaleh.rar
using HtmlAgilityPack;using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Windows;
namespace WpfApp6
{
public partial class MainWindow : Window
{
#region Class Model
public class Model
{
public int ID;
public int IssueNumber;
public string CategoryTitle;
public string IssueTitle;
public string IssueContent;
}
public List<Model> models = new List<Model>();
#endregion
public MainWindow()
{
InitializeComponent();
DoIt();
}
private void DoIt()
{
int ID = 0;
// Read Data from web
for (int page = 1; page <= 213; page++)
{
string html = @"https://makarem.ir/ahkam/fa/treatise/index?page=" + page + "&sortby=0&sort=1&view=0";
HtmlWeb web = new HtmlWeb();
HtmlDocument htmlDoc = web.Load(html);
var node = htmlDoc.DocumentNode.SelectSingleNode("//div[@class='card-columns']");
var IssueNumbers = node.SelectNodes("//span[@class='treatise-number']");
var CategoryTitles = node.SelectNodes("//span[@class='treatise-category']/a");
var IssueTitles = node.SelectNodes("//h3/a");
var IssueContents = node.SelectNodes("//div[@class='row']/div/p/text()");
int ItemsCount = IssueNumbers.Count;
if (CategoryTitles.Count != ItemsCount ||
IssueTitles.Count != ItemsCount ||
IssueContents.Count != ItemsCount)
{
Debug.WriteLine("ItemsCount problem in page = " + page);
continue;
}
for (int i = 0; i < ItemsCount; i++)
{
var inBuff = StringToInt(IssueNumbers[i].InnerText);
int IssueNumber = inBuff.IsSuccessful == true ? inBuff.Result : -1;
models.Add(new Model
{
ID = ID,
IssueNumber = IssueNumber,
CategoryTitle = CategoryTitles[i].InnerText,
IssueTitle = IssueTitles[i].InnerText,
IssueContent = IssueContents[i].InnerText.Replace("\n", "").Replace("\r", ""),
});
ID++;
Debug.WriteLine("page = " + page.ToString("000") + ", Items = " + (i + 1).ToString("00") + "/" + ItemsCount);
}
}
// add all data to txt file
string txtPath = @"C:\Users\mahdi\Desktop\Data.txt";
using (TextWriter tw = new StreamWriter(txtPath))
{
string data = "ID,IssueNumber,CategoryTitle,IssueTitle,IssueCont ent\r\n";
foreach (Model model in models)
{
data =
model.ID + "," +
model.IssueNumber + "," +
model.CategoryTitle + "," +
model.IssueTitle + "," +
model.IssueContent;
tw.WriteLine(data);
}
}
}
private (bool IsSuccessful, int Result) StringToInt(string data)
{
string a = data;
string b = string.Empty;
for (int i = 0; i < a.Length; i++)
{
if (char.IsDigit(a[i]))
b += a[i];
}
if (b.Length > 0)
{
return (true, int.Parse(b));
}
else
{
return (false, 0);
}
}
}
}