任务
我应该创建一个从Amazon.com网页中提取项目名称的应用程序。
动作
我以为我会使用Html Agility Pack来完成这项工作,我想我已经有了一个解决方案,但是有一个问题仍然存在。
结果
让我们说我试图从n个不同的站点中提取html源代码,应用程序总是使用第一个站点的来源为站点1 - n,我不知道为什么。当且仅当我重新启动计算机时,我才能从其他网站中提取HTML。
代码
private void extractHTML()
{
//retreive URL
string address = txtURL.Text;
string itemId = "result_0";
//create document
HtmlWeb webGet = new HtmlAgilityPack.HtmlWeb();
HtmlAgilityPack.HtmlDocument document = webGet.Load(address);
//look for name of result
HtmlNode node = document.GetElementbyId(itemId);
if(node != null)
{
IEnumerable<HtmlNode> allH3 = node.Descendants("h3");
foreach (HtmlNode h3 in allH3)
{
if (h3.ChildNodes[1].InnerHtml == null)
{
continue;
}
else
{
lblId.Text = itemId;
//dig down to lowest subnode to get correct InnerHtml
HtmlNode subNode = h3.ChildNodes[1];
if (subNode.ChildNodes.Count > 0)
{
lblName.Text = subNode.ChildNodes[subNode.ChildNodes.Count - 1].InnerHtml;
break;
}
else
{
lblName.Text = h3.ChildNodes[1].InnerHtml;
break;
}
}
}
}
}
非常感谢帮助!提前谢谢。
答案 0 :(得分:0)
您是否考虑过使用Amazon Product API而不是屏幕抓取?这里有大量样本http://aws.amazon.com/code/Product-Advertising-API
答案 1 :(得分:0)
如评论中所述,如果您要定位http://www.amazon.com/s/ref=nb_sb_ss_i_0_5?url=search-alias%3Daps&field-keywords=radio&sprefix=radio%2Caps%2C182之类的网页以尝试获取所有商品名称,请使用以下代码:
HtmlDocument doc = new HtmlDocument();
doc.Load(myHtmlFile);
foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//span[@class='lrg bold']"))
{
Console.WriteLine(node.InnerHtml);
}
将输出:
Sony ICF-S10MK2 Pocket AM/FM Radio, Silver
Ambient Weather WR-111A Emergency Solar Hand Crank AM/FM/NOAA Digital Radio, Flashlight, Cell Phone Charger with NOAA Certified Weather Alert & Cables
Sony ICF38 Portable AM/FM Radio (Black)
Coby CX39 World Band AM/FM/Shortwave Radio with Digital Display, Silver
Radio
Sony ICF-C318 Clock Radio with Dual Alarm (Black)
Sony Icf38 Portable Am Fm Radio Led Tuning Indicator Lg Spkr
TuneIn Radio
Sangean WR-2 Digital AM/FM Tabletop Radio, Walnut
SANGEAN WR-11 AM/FM Table Top Radio
Crosley Solo Radio CR221 Black
Sony ICF-C218 Automatic Time Set Clock Radio (Black)
Coby CXCD251BLK Portable CD Player with AM/FM Radio, Black
Sony ICFC414 Clock Radio
Radio
Panasonic RF-P50 Pocket AM/FM Radio, Silver
XPATH表达式将获得CLASS属性设置为'lrg bold'的所有SPAN元素。为了找到这个,我只看了HTML的保存版本,并确定了项目名称的良好判别。
我建议你学习一点XPATH,因为它非常强大。这里有一个很好的教程:XPATH Tutorial