Скриншот для скачивания PDF ссылок для скачивания - PullRequest
1 голос
/ 12 марта 2011

Я изучаю C #, создав небольшую программу, и не смог найти похожий пост (извиняюсь, если этот ответ опубликован где-то в другом месте).

Как я могу заняться скринингом сайта дляссылки на PDF-файлы (которые я могу затем загрузить в указанное место)?Иногда страница будет иметь ссылку на другую HTML-страницу с фактической ссылкой PDF, поэтому, если фактический PDF не может быть найден на первой странице, я бы хотел, чтобы он автоматически искал ссылку с надписью «PDF» втекст ссылки, а затем найдите на этой HTML-странице настоящую ссылку PDF.

Я знаю, что мог бы достичь чего-то подобного с помощью поиска по типам файлов через Google, но мне это кажется "обманом" :) Я бы лучше научился делать это в коде, но я не уверенкогда начать.Я немного знаком с анализом XML с помощью XElement и тому подобного, но я не уверен, как это сделать для получения ссылок со страницы HTML (или другого формата?).

Может ли кто-нибудь указать мне правильное направление?Спасибо!

Ответы [ 3 ]

2 голосов
/ 12 марта 2011

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());

В качестве примечания я хотел быне слишком полагаться на выражения XPath в HAP.Отсутствуют некоторые функции XPath, и размещение всей логики извлечения в вашем XPath сделает ваш код менее обслуживаемым.Я бы извлек достаточный минимум, используя выражение XPath, а затем выполнил бы все необходимое извлечение, выполнив итерацию по всей коллекции узлов (методы Linq очень помогли).

Реальная сила HAP - это возможность разбирать документы SGML.то есть что-то, что может быть недопустимым с точки зрения XHTML (незакрытые теги, пропущенные кавычки и т. д.).

0 голосов
/ 12 марта 2011

Для анализа любой HTML-страницы используйте HtmlAgilityPack .Это лучшее из всего, что есть.

Теперь вы можете преобразовать любую страницу HTMl в XML, в которой вы можете искать намного проще, чем в HTML.

Если вам нужно сканировать сайт для получения информации, взгляните на NCrawler .

0 голосов
/ 12 марта 2011

Лучше всего, вероятно, использовать Ловкость HTML для очистки страницы, а затем выберите атрибут href, чтобы посмотреть, выглядит ли это как загрузка в формате PDF. Если нет, то вы можете просмотреть текст в узле для ключевых слов, таких как PDF, чтобы решить, следует ли переходить по ссылке.

...