2015-04-09 3 views
-3

У меня есть список ссылок Википедии на альбомы и синглы. Я хотел бы добавить релиз/дату каждого опубликовать после альбома, так что линия, такие как:Wikipedia ссылки с альбомов/песен на дату выхода

«http://en.wikipedia.org/wiki/Divenire»

становится

«http://en.wikipedia.org/wiki/Divenire» 7 ноября 2006

Это вопрос открытия каждой ссылки и нахождения значения (если он выходит) опубликованного или опубликованного поля в инфобоксах альбома/одной страницы. Я посмотрел на многочисленные скребки, но не нашел подходящего. Редактировать: Я также хотел бы сделать то же самое с другим длинным списком ссылок itunes.apple.com на альбомы/синглы

+1

Вы можете посмотреть, используя [WikiData] (https://www.wikidata.org/wiki/Wikidata:Main_Page), который предоставляет правильный API для доступа к данным. –

+0

'' Я посмотрел на многочисленные скребки, но не нашел подходящего. '' Это кажется довольно простой задачей, что любой скребок мог бы сделать для вас. Как вы потерпели неудачу? Кроме того, +1 для WikiData – leo

+0

У меня фактически не было никакого опыта со скребками. Ни один из скребков не получил дату альбома для меня, поэтому я закончил тем, что решил выйти, но спасибо. –

ответ

0

Я предполагаю, что ссылки указаны в массиве, содержащем все ссылки. Кроме того, я предполагаю, что вам все равно, какое программное обеспечение использовать. Таким образом, я предлагаю вам скачать Wiki.java. С помощью этой библиотеки легко получить текст страницы для каждой страницы. После этого, это просто куча регулярных выражений для применения:

Wiki enwiki = new Wiki("en.wikipedia.org"); 
    String[] links = { "http://en.wikipedia.org/wiki/Divenire" }; 
    String regex = "\\|\\s*Released\\s*=\\s*"; 
    for (String link : links) { 
     // extract the portion after the last "/" 
     String title = link.replaceAll(".*\\/(.*)", "$1"); 
     String pageText = enwiki.getPageText(title); 

     // extract the date 
     String[] splits = pageText.split(regex, 2); 
     if (splits.length == 2) { 
      // Assume the date is terminated by a new line 
      String[] released = splits[1].split("\\n", 2); 
      System.out.println(title + ": " + released[0]); 
     } else { 
      // Just hope this does not happen 
     } 
    } 

Этот код не тестировался, но должен дать вам представление о том, как подойти к этой проблеме!

Смежные вопросы