提问人:Okashi 提问时间:4/12/2020 最后编辑:Oguz OzgulOkashi 更新时间:4/12/2020 访问量:545
HtmlAgilityPack 整页加载
HtmlAgilityPack full page loading
问:
因此,我有从解析链接下载图片的代码。下载/解析效果很好,但我在加载此页面的完整内容时遇到了问题。
/*
* https://shikimori.org/animes/38256-magia-record-mahou-shoujo-madoka-magica-gaiden-tv
* For testing
*/
class Program
{
static string root = @"C:\Shikimori\";
static List<string> sources = new List<string>();
[STAThread]
static void Main(string[] args)
{
Console.Write("Enter link: ");
var link = Console.ReadLine(); // enter there link from above
link += "/art";
var web = new HtmlWeb();
web.BrowserTimeout = TimeSpan.FromTicks(0);
var htmlDocument = new HtmlDocument();
Thread.Sleep(3000);
try
{
htmlDocument = web.LoadFromBrowser(link); //ones per, like, 30m loading almost all page with whole pictures
}
catch
{
Console.WriteLine("an error has occured.");
}
Thread.Sleep(3000);
var name = htmlDocument.DocumentNode.Descendants("div")
.Where(node => node.GetAttributeValue("class", "")
.Equals("b-options-floated mobile-phone_portrait r-edit")).ToList();
//var divlink = htmlDocument.DocumentNode.Descendants("div")
// .Where(node => node.GetAttributeValue("class", "")
// .Equals("container packery")).ToList();
var alink = htmlDocument.DocumentNode.Descendants("a")
.Where(node => node.GetAttributeValue("class", "")
.Equals("b-image")).ToList();
foreach(var a in alink)
{
sources.Add(a.GetAttributeValue("href", string.Empty));
}
var tmp = Regex.Replace(name[0].GetDirectInnerText(), "[^a-zA-Z0-9._]", string.Empty);
root += (tmp+"\\");
if (!Directory.Exists(root))
{
Directory.CreateDirectory(root);
}
for (int i = 0; i < sources.Count; i++)
{
using (WebClient client = new WebClient())
{
var test = sources[i].Split(';').Last().Replace("url=", string.Empty);
try
{
client.DownloadFile(new Uri(test), root + test.Split('/').Last().Replace("&", string.Empty).Replace("?", string.Empty));
Console.WriteLine($"Image #{i + 1} download successfully!");
}
catch
{
Console.WriteLine($"Image #{i + 1} download unsuccessfully...");
}
}
}
Thread.Sleep(3000);
Console.WriteLine("Done!");
Console.ReadKey();
}
}
问题是:我猜它可能每 30 分钟工作一次?而且工作并不那么好,正如我所期望的那样。Html 解析器未完全加载内容。如果链接有 100+ 张图片,状况良好,我会从 5 到 15 张。如果链接(例如:https://shikimori.one/animes/1577-taiho-shichau-zo)有大约 30 张图片,它可能会解析所有图片。(其他选项未测试。还尝试解析谷歌图片,它的加载就像一页的链接,没有到达“更多结果”按钮)
我假设该站点受到机器人保护,因此它并不总是响应来自我的程序或类似内容的请求。据我所知,这家伙也有同样的问题,但仍然没有答案。 如何解决这个问题?
答: 暂无答案
评论
catch(Exception downloadError) { Console.WriteLine(downloadError); }