Я пытаюсь получить все гиперссылки из массива, соответствующие слову «контакты», в текстовый файл .csv. Проблема в том, что если он найдет другую контактную гиперссылку на том же веб-сайте, он снова распечатает ее. Как это исправить? Также, как очистить несколько веб-сайтов для определенного c div, содержащего ключевые слова: («Номер телефона», «Адрес», «Электронная почта» и т. Д. c.)?
private void contactbutton_Click(object sender, EventArgs e)
{
ArrayList domainlist = new ArrayList();
const Int32 BufferSize = 128;
// -- Location of domain list file --
using (var fileStream = File.OpenRead("C:/Users/Username/Desktop/domains.txt"))
using (var streamReader = new StreamReader(fileStream, Encoding.UTF8, true, BufferSize))
{
String line;
while ((line = streamReader.ReadLine()) != null)
domainlist.Add(line);
}
foreach (string s in domainlist)
{
SearchHyperlinks("https://" + s);
}
}
public static void SearchHyperlinks(string address4)
{
HtmlWeb hw = new HtmlWeb();
HtmlAgilityPack.HtmlDocument doc = hw.Load(address4);
String GetAbsoluteUrlString(string baseUrl, string url)
{
var uri = new Uri(url, UriKind.RelativeOrAbsolute);
if (!uri.IsAbsoluteUri)
uri = new Uri(new Uri(baseUrl), uri);
return uri.ToString();
}
try
{
using (var w = new StreamWriter("C:/Users/Username/Desktop/hyperlink.csv"))
foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//a[starts-with(., 'Contacts') or starts-with(., 'contacts') or starts-with(., 'CONTACTS') or starts-with (., 'Shop Contacts')]"))
{
String hrefValue = link.Attributes["href"].Value;
if (hrefValue != null)
{
String fullhref = GetAbsoluteUrlString(address4, hrefValue);
Console.WriteLine(fullhref);
using (var textWriter = new StreamWriter("C:/Users/Username/Desktop/hyperlinks.csv", true))
{
var writer = new CsvWriter(textWriter, CultureInfo.InvariantCulture);
writer.Configuration.Delimiter = ",";
writer.WriteField(fullhref);
writer.NextRecord();
}
}
}
}
catch (System.NullReferenceException)
{
Console.WriteLine("Hyperlinks not found");
}