屏幕抓取PDF链接下载

我正在通过创建一个小程序来学习C#,并且找不到类似的帖子(如果这个答案在其他地方发布,则道歉)。 我怎样才能在屏幕上抓取PDF链接(我可以将其下载到指定位置)?有时页面会链接到另一个具有实际PDF链接的HTML页面,因此如果在第一页上找不到实际的PDF,我希望它能自动查找包含“PDF”的链接。链接的文本,然后搜索生成的PDF链接的结果HTML页面。 我知道我可能通过谷歌搜索文件类型来实现类似的东西,但这似乎是“欺骗”我:)我宁愿学习如何在代码中做到这一点,但我不知道从哪里开始。我对使用XElement等进行XML解析有点熟悉,但是我不知道如何从HTML页面(或其他格式?)获取链接。 有人能指出我正确的方向吗?谢谢!     
已邀请:
HtmlAgilityPack非常适合这种东西。 实施示例:
string pdfLinksUrl = "http://www.google.com/search?q=filetype%3Apdf";

// Load HTML content    
var webGet = new HtmlAgilityPack.HtmlWeb();
var doc = webGet.Load(pdfLinksUrl);

// select all <A> nodes from the document using XPath
// (unfortunately we can't select attribute nodes directly as
// it is not yet supported by HAP)
var linkNodes = doc.DocumentNode.SelectNodes("//a[@href]");

// select all href attribute values ending with '.pdf' (case-insensitive)
var pdfUrls = from linkNode in linkNodes
    let href = linkNode.Attributes["href"].Value
    where href.ToLower().EndsWith(".pdf")
    select href;

// write all PDF links to file
System.IO.File.WriteAllLines(@"c:pdflinks.txt", pdfUrls.ToArray());
作为旁注,我不会过多依赖HAP中的XPath表达式。缺少一些XPath函数,并且将所有提取逻辑放在XPath中将使您的代码不易维护。我会使用XPath表达式提取最小值,然后通过迭代节点集合来完成所有必需的提取(Linq方法有很多帮助)。 HAP的真正强大之处在于能够解析SGML文档,即从XHTML的角度来看可能无效的东西(未封闭的标签,缺少引号等)。     
您最好的选择可能是使用HTML Agility来屏幕抓取页面,然后选择href属性以查看它是否看起来像PDF下载。如果没有,您可以查看节点中的文本以查找PDF等关键字,以决定是否遵循该链接。     
要解析任何HTML页面,请使用HtmlAgilityPack。这是最好的。 从那里你将任何HTMl页面转换为XML,你可以比HTML更容易搜索。 如果您需要抓取网站以获取信息,请查看NCrawler。     

要回复问题请先登录注册