【问题标题】:best approach to automatically load next/prevous page of scraped web page自动加载抓取网页的下一页/上一页的最佳方法
【发布时间】:2018-02-25 07:54:18
【问题描述】:

情况:我编写代码来抓取网页。它基于模板 10 并使用 MVVM 和 HTML Agility Pack 的 UWP 应用程序。抓取的页面是我可以向前移动的结果列表(页面),返回到源网页的结果列表中。全部被抓取,即处理此类列表的网络结果和网络命令列表。

请求:我想删除“上一页”和“下一页”按钮。如果我移动到当前加载的结果列表(网页)的顶部或底部,一个想法需要自动发送请求以加载页面或向后页面。

注意:当我位于 View 列表的顶部或底部时,我可以显示一条消息。我觉得有一种更好的方法可以在 ViewModel 中加载列表的上一页和下一页。

如果有任何建议,我将不胜感激。 条条大路通罗马,请告诉我最好的路。提前感谢您的帮助。

【问题讨论】:

  • scrap 是指scrapescrapped 是指scraped 吗?
  • 请退后一步,解释您要解决的根本问题。换句话说,为什么你要抓取网页?
  • @ mjwills 在这种情况下是显示文件列表的页面。抓取页面意味着所有文件描述、图标和链接都存储在列表中,以在应用程序界面中将其显示为 Web 内容,并且命令(下一页、上一页、排序依据,...)作为 Web 请求存储在变量中以将其发送为稍后网络请求。我正在抓取页面以显示 Web 内容并将 Web 链接用作我的应用程序中的命令。

标签: c# mvvm uwp template10


【解决方案1】:

当我位于 View 列表的顶部或底部时,我能够显示一条消息。

如果您可以在列表位于顶部或底部时收到消息,您可以定义一个全局变量作为请求的地址,并将一个变量声明为页面索引。例如像这样:http://www.test.com?page={0}

然后,当您收到“顶部”或“底部”消息时,您可以将您的 HTTP 请求发送到该地址并获取它返回的内容。

private int pageIndex = 0;
private string address = @"http://www.test.com?page={0}";

private async void GetPreviousPageContent()
{
    pageIndex--;
    Uri uri = new Uri(string.Format(address,pageIndex));
    HttpClient client = new HttpClient();
    var response = await client.GetAsync(uri);
}

private async void GetNextPageContent()
{
    pageIndex++;
    Uri uri = new Uri(string.Format(address, pageIndex));
    HttpClient client = new HttpClient();
    var response = await client.GetAsync(uri);
}

在这里,我有另一个建议给你。您可以为您的列表视图实现两个功能。 Pull to refreshISupportIncrementalLoading。当列表视图滚动到顶部并将其拉下时,它将触发特定事件,在这种情况下,您可以发送 HTTP 请求以获取上一页的内容。当列表视图滚动到底部时,会触发 ISupportIncrementalLoading 的LoadMoreItemsAsync 方法,在该方法中,您可以获得下一页的内容。对于这种方式,您仍然需要声明两个变量作为请求地址和页面索引。

【讨论】:

  • 我更喜欢使用“ISupportIncrementalLoading”接口,好像比较专业。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
  • 2018-01-18
  • 1970-01-01
  • 1970-01-01
  • 2021-06-03
相关资源
最近更新 更多