gpt4 book ai didi

javascript - 如何完整下载页面源代码,而不是部分下载?

转载 作者:行者123 更新时间:2023-12-03 05:48:50 25 4
gpt4 key购买 nike

我正在从网站上抓取动态数据。由于某种原因,我 get() 的 PageSource 是部分的。然而,当我直接从 Chrome 或 Firefox 浏览器查看页面源代码时,它并不偏颇。我想知道一个答案,使我能够完全从页面中抓取数据。

对于我的应用程序,我想使用 .Net Web 浏览器或类似浏览器以编程方式进行抓取。我尝试过将 Selenium WebDriver 2.48.2 与 ChromeDriver 一起使用;我也尝试过 PhantomJSDriver;我也尝试过WebClient;还有 HttpWebRequest。全部使用 .Net 4.6.1。

网址:http://contests.covers.com/KingOfCovers/Contestant/PendingPicks/ARTDB

以下内容均无效...

尝试#1:HttpWebRequest

    var urlContent = "";

try
{
var request = (HttpWebRequest) WebRequest.Create(url);
request.CookieContainer = new CookieContainer();
if (cookies != null)
{
foreach (Cookie cookie in cookies)
{
request.CookieContainer.Add(cookie);
}
}

var responseTask = Task.Factory.FromAsync<WebResponse>(request.BeginGetResponse,request.EndGetResponse,null);

using (var response = (HttpWebResponse)await responseTask)
{

if (response.Cookies != null)
{
foreach (Cookie cookie in response.Cookies)
{
cookies.Add(cookie);
}
}

using (var sr = new StreamReader(response.GetResponseStream()))
{
urlContent = sr.ReadToEnd();
}
}

尝试#2:WebClient

// requires async method signature
using (WebClient client = new WebClient())
{
var task = await client.DownloadStringTaskAsync(url);

return task;
}

尝试#3:PhantomJSDriver

   var driverService = PhantomJSDriverService.CreateDefaultService();
driverService.HideCommandPromptWindow = true;
using (var driver = new PhantomJSDriver(driverService))
{
driver.Navigate().GoToUrl(url);

WaitForAjax(driver);

string source = driver.PageSource;

return source;
}

public static void WaitForAjax(PhantomJSDriver driver)
{
while (true) // Handle timeout somewhere
{
var ajaxIsComplete = (bool)(driver as IJavaScriptExecutor).ExecuteScript("return jQuery.active == 0");
if (ajaxIsComplete)
break;
Thread.Sleep(100);
}
}

我还尝试使用页面对象模型的 ChromeDriver。该代码太长,无法粘贴到此处;尽管如此:它与其他 3 次尝试的结果完全相同。

预期结果

该url的数据表完整,没有任何缺失的数据。例如,以下是与下面的屏幕截图进行比较的屏幕截图。需要注意的是,没有“...”。相反,有数据。这可以通过在 Firefox 或 Chrome 中打开 URL、右键单击并查看页面源代码来重现。

enter image description here

实际结果

观察“...”是一个大间隙的地方,如屏幕截图中箭头所示。应该有很多行内容来代替“...”。这可以使用上述任何尝试来重现。

enter image description here

请注意,该网址是动态数据。您可能不会看到与屏幕截图完全相同的结果。尽管如此,可以重复该练习,它看起来与屏幕截图不同。要了解是否存在缺失数据,可以通过比较页面源行数进行快速测试:“完整”数据集的 html 行数几乎是该数据集的两倍。

最佳答案

好的,按照要求。很高兴能提供帮助。 :)

但是在你的 C# 中,你是从哪里复制的?在你的代码中,你有 -> urlContent = sr.ReadToEnd(); 你怎么看,从中复制结果?您是否从调试器复制?如果是,则可能是调试器的对象检查器正在 trim 。您是否尝试过从 urlContent 获取结果并保存到文件?例如。 System.IO.File.WriteAllText(@"temp.txt",urlContent);

关于javascript - 如何完整下载页面源代码,而不是部分下载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40229209/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com