【发布时间】:2017-12-27 19:45:22
【问题描述】:
我正在尝试从网站上抓取产品名称。奇怪的是,我似乎只随机抓取 12 个项目。我已经尝试了 HtmlAgilityPack 和 HTTPClient 并且得到了相同的随机结果。这是我的 HtmlAgilityPack 代码:
using HtmlAgilityPack;
using System.Net.Http;
var url = @"http://www.roots.com/ca/en/men/tops/shirts-and-polos/";
HtmlWeb web = new HtmlWeb();
var doc = web.Load(url, "GET", proxy, new NetworkCredential(PROXY_UID, PROXY_PWD, PROXY_DMN));
var nodes = doc.DocumentNode.Descendants("div")
.Where(div => div.GetAttributeValue("class", string.Empty) == "product-name")
.Select(div => div.InnerText.Trim())
;
[更新 1] @CodingKuma 建议我尝试 Selenium Webdriver。这是我使用 Selenium Webdriver 的代码:
IWebDriver chromeDriver = new ChromeDriver(@"C:\TEMP\Projects\Chrome\chromedriver_win32");
chromeDriver.Url = "http://www.roots.com/ca/en/men/tops/shirts-and-polos/";
var items = chromeDriver.FindElements(By.ClassName("product-name"));
items.Count().Dump();
chromeDriver.Quit();
我尝试了这段代码,但仍然没有运气。该页面上有 20 多个项目,但我似乎只能随机获得 12 个。我怎样才能抓取该网站上的所有项目?
【问题讨论】:
-
尝试不同的用户代理?其他人是否加载了ajax?
-
因为页面在滚动时加载,所以爬虫不是人类。
-
@DanielA.White 你还有什么推荐的代理?
-
我不知道。实验和尝试。这取决于那个网站。我们无法合理地为您回答。
-
@AlexK。有没有办法强制 HAP 先加载整个页面?
标签: c# selenium-webdriver web-scraping web-crawler html-agility-pack