Можно ли обойтись без кнопки «Загрузить больше» на веб-страницах при просмотре в c#? - PullRequest
0 голосов
/ 08 апреля 2020

Я использую HtmlAgilityPack, чтобы найти теги, которые мне нужны, чтобы очистить и получить все текстовые данные, но я не могу найти способ обойти кнопку «Загрузить еще». Вот что я пробовал далеко от Учебник любые идеи будут оценены.

    var httpClient = new HttpClient();

    var html = await httpClient.GetStringAsync(url);

    var htmlDocument = new HtmlDocument();
    htmlDocument.LoadHtml(html);

    var Review = htmlDocument.DocumentNode.Descendants("div")
        .Where(node => node.GetAttributeValue("class", "notfound").Equals("content")).ToList();

    foreach (var item in Review)
    {
            Console.WriteLine(item.Descendants("div").FirstOrDefault().InnerText.Trim().ToString());
    }

1 Ответ

0 голосов
/ 26 апреля 2020

кнопка «Загрузить еще» делала XHR-запросы к серверу, к этому запросу каждый раз при совершении нового вызова был прикреплен динамический c ключ разбиения на страницы, поэтому я собирал все URL-адреса (запросы ) который содержал расширенную часть обзоров. затем по отдельности очистите каждый URL-адрес, чтобы получить то, что я хотел.

функция принимает URL-адрес страницы отзывов пользователей в качестве аргумента. Первые 3 строки внутри функции должны сформировать URL-адрес запроса XHR, затем ключ пагинации. со страницы html и URL для следующей страницы формируется рекурсивно, пока не будут найдены все URL.

public async void GetUrls(string u)
{
    string toappend = "/_ajax?ref_=undefined&paginationKey=";
    string aurl = u.Substring(0, 44) + toappend;
    var init_url = u;

    var httpCli = new HttpClient();
    var html = await httpCli.GetStringAsync(init_url);
    var htmldoc = new HtmlDocument();
    htmldoc.LoadHtml(html);


    var nxt_url = htmldoc.DocumentNode.Descendants("div")
    .Where(node => node.GetAttributeValue("class", "").Equals("loadmoredata")).ToList();

    if (nxt_url.Count!=0)
    {
        foreach (var item in nxt_url)
        {
            string url = item.GetAttributeValue("data-key", "").ToString();
            urllist.Add(url);
            string succ_url = aurl + url;
            //Console.WriteLine(succ_url);
            GetUrls(succ_url);
            Console.WriteLine("----Saving URLs..-----");
        }
    }
    else if(nxt_url.Count==0)
    {
        Console.WriteLine(" Crawl Successful ");
        ScrapenSave(u);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...