mdk-arbat

Collecting data about books from mdk-arbat.

To select a book we can browse the categories. Clicking on the selected book from the list of books we get its description.

We expect a stable structure of the files - they are generated by software.

Book numbers

http://mdk-arbat.ru/catalog/?subj_id=2145

We can use the lists to get the book numbers.

> library(XML)
> url2 <- "http://mdk-arbat.ru/catalog/?subj_id="
> subj <- 1118; pid <- 5
> Subj <- as.character(subj); Pid <- as.character(pid)
> cata <- paste(url2,Subj,"&pid=",Pid,sep='')
> Cata <- readLines(con<-url(cata)); close(con)
> P <- Cata[nchar(Cata)>0]
> length(P)
[1] 1404
> Encoding(P) <- "UTF-8"
> P[450:550]
...
 [469] "                <i class=\"fa fa-shopping-basket\"></i>"                                                                                                                                                                                                                                                 
 [470] "                <em>В корзину</em>"                                                                                                                                                                                                                                                                      
 [471] "            </a>"                                                                                                                                                                                                                                                                                        
 [472] "                    </div>"                                                                                                                                                                                                                                                                              
 [473] "        </div>"                                                                                                                                                                                                                                                                                          
 [474] "      </div>"                                                                                                                                                                                                                                                                                            
 [475] "            <div class=\"col-xs-6 col-sm-6 col-md-4 col-lg-3\">"                                                                                                                                                                                                                                                                                 
 [476] "        <div class=\"tg-postbook\">"                                                                                                                                                                                                                                                                     
 [477] "          <figure class=\"tg-featureimg\">"                                                                                                                                                                                                                                                              
 [478] "            <a class=\"tg-bookimg\"  title=\"Google BigQuery. Все о хранилищах данных, аналитике и машинном обучении\" href=\"/book/77607\">"                                                                                                                                                            
 [479] "                            <div class=\"tg-frontcover\"><img src=\"http://img.mdk-arbat.ru/main/77/60/77607.jpg\"></div>"                                                                                                                                                                               
 [480] "                <div class=\"tg-backcover\"><img src=\"http://img.mdk-arbat.ru/main/77/60/77607.jpg\"></div>"                                                                                                                                                                                            
 [481] "                        </a>"                                                                                                                                                                                                                                                                            
 [482] "                        <a class=\"mdk-btnaddtowishlist\"  rel=\"nofollow\" href=\"/wishlist/add/77607\">"                                                                                                                                                                                               
 [483] "              <i class=\"icon-heart\"></i>"                                                                                                                                                                                                                                                              
 [484] "              <span>в список желаний</span>"                                                                                                                                                                                                                                                             
 [485] "            </a>"                                                                                                                                                                                                                                                                                        
 [486] "          </figure>"                                                                                                                                                                                                                                                                                     
 [487] "          <div class=\"tg-postbookcontent\">"                                                                                                                                                                                                                                                            
 [488] "            <ul class=\"tg-bookscategories\">"                                                                                                                                                                                                                                                           
 [489] "              <li><a href=\"/catalog?subj_id=3072\">Базы данных</a></li>"                                                                                                                                                                                                                                
 [490] "            </ul>"                                                                                                                                                                                                                                                                                       
 [491] "            <div class=\"tg-booktitle\">"                                                                                                                                                                                                                                                                
 [492] "              <h3><a href=\"/book/77607\" title=\"Google BigQuery. Все о хранилищах данных, аналитике и машинном обучении\">Google BigQuery. Все о хранилищах данных, аналитике и машинном обучении</a></h3>"                                                                                            
 [493] "            </div>"                                                                                                                                                                                                                                                                                      
 [494] "            <span class=\"tg-bookwriter\">"                                                                                                                                                                                                                                                              
 [495] "                <a href=\"/book/77607\">Лакшманан, В.</a>"                                                                                                                                                                                                                                               
 [496] "            </span>"                                                                                                                                                                                                                                                                                     
 [497] "                        <span class=\"tg-bookprice\">"                                                                                                                                                                                                                                                   
 [498] "                2570 &#8381;"                                                                                                                                                                                                                                                                            
 [499] "\t\t\t</span>"                                                                                                                                                                                                                                                                                              
 [500] "                                <a class=\"mdk-btn mdk-btnstyletwo quick--add-basket\" href=\"javascript:void(0);\" data-id=\"77607\" data-cnt=\"1\"  onmousedown=\"try { rrApi.addToBasket(77607) } catch(e) {};\" "                                                                                    
 [501] ">"                                                                                                                                                                                                                                                                                                       
 [502] "                <i class=\"fa fa-shopping-basket\"></i>"                                                                                                                                                                                                                                                 
 [503] "                <em>В корзину</em>"                                                                                                                                                                                                                                                                      
 [504] "            </a>"                                                                                                                                                                                                                                                                                        
 [505] "                    </div>"                                                                                                                                                                                                                                                                              
 [506] "        </div>"                                                                                                                                                                                                                                                                                          
 [507] "      </div>"                                                                                                                                                                                                                                                                                            
 [508] "            <div class=\"col-xs-6 col-sm-6 col-md-4 col-lg-3\">"                                                                                                                                                                                                                                         
 [509] "        <div class=\"tg-postbook\">"
 [510] "          <figure class=\"tg-featureimg\">"                                                                                                                                                                                                                                                              
 [511] "            <a class=\"tg-bookimg\"  title=\"Чистый код : создание, анализ и рефакторинг\" href=\"/book/77606\">"                                                                                                                                                                                        
 [512] "                            <div class=\"tg-frontcover\"><img src=\"http://img.mdk-arbat.ru/main/77/60/77606.jpg\"></div>"                                                                                                                                                                               
 [513] "                <div class=\"tg-backcover\"><img src=\"http://img.mdk-arbat.ru/main/77/60/77606.jpg\"></div>"  
...   
> parse <- htmlParse(P)
> books <- xpathSApply(parse,'//div[@class="tg-postbook"]')
> length(books)
[1] 20
> books[[2]]

To make the obtained value more readable we make some formating

<div class="tg-postbook">
 <figure class="tg-featureimg">
  <a class="tg-bookimg" title="Мифический человеко-месяц, или Как создаются программные системы" href="/book/77614">
   <div class="tg-frontcover"><img src="http://img.mdk-arbat.ru/main/77/61/77614.jpg"/></div>
   <div class="tg-backcover"><img src="http://img.mdk-arbat.ru/main/77/61/77614.jpg"/></div>
  </a>
  <a class="mdk-btnaddtowishlist" rel="nofollow" href="/wishlist/add/77614">
   <i class="icon-heart"/>
   <span>в список желаний</span>
  </a>
 </figure>
 <div class="tg-postbookcontent">
  <ul class="tg-bookscategories">
   <li><a href="/catalog?subj_id=3007">Теория и технология программирования</a></li>
  </ul>
  <div class="tg-booktitle">
   <h3><a href="/book/77614" title="Мифический человеко-месяц, или Как создаются программные системы">Мифический человеко-месяц, или Как создаются программные системы</a></h3>
  </div>
  <span class="tg-bookwriter"><a href="/book/77614">Брукс, Ф.</a></span>
  <span class="tg-bookprice">1650 ₽</span>
  <a class="mdk-btn mdk-btnstyletwo quick--add-basket" href="javascript:void(0);" data-id="77614" data-cnt="1" onmousedown="try { rrApi.addToBasket(77614) } catch(e) {};">
   <i class="fa fa-shopping-basket"/>
   <em>В корзину</em>
  </a>
 </div>
</div> 
> bks <- xpathSApply(parse,'//h3//a',xmlAttrs)["href",]
> bks
 [1] "/book/2458709" "/book/77614"   "/book/77607"   "/book/77606"   "/book/77546"  
 [6] "/book/2458661" "/book/7620614" "/book/77053"   "/book/76628"   "/book/76292"  
[11] "/book/3374253" "/book/3374250" "/book/2563170" "/book/76215"   "/book/76213"  
[16] "/book/76210"   "/book/2458298" "/book/2458301" "/book/2458295" "/book/2458291"
> bks <- substr(xpathSApply(parse,'//h3//a',xmlAttrs)["href",],7,15)
> bks
 [1] "2458709" "77614"   "77607"   "77606"   "77546"   "2458661" "7620614" "77053"   "76628"  
[10] "76292"   "3374253" "3374250" "2563170" "76215"   "76213"   "76210"   "2458298" "2458301"
[19] "2458295" "2458291"
> 
> tis <- xpathSApply(parse,'//h3//a',xmlAttrs)["title",]
> Encoding(tis) <- "UTF-8"
> tis
 [1] "Гибкая разработка на Java и C++ : принципы, паттерны и методики"                                                     
 [2] "Мифический человеко-месяц, или Как создаются программные системы"                                                    
 [3] "Google BigQuery. Все о хранилищах данных, аналитике и машинном обучении"                                             
 [4] "Чистый код : создание, анализ и рефакторинг"                                                                         
 [5] "Все секреты Minecraft. Моды"                                                                                         
 [6] "Программирование на С в примерах и задачах"                                                                          
 [7] "Не заставляйте меня думать. Веб-юзабилити и здравый смысл"                                                           
 [8] "Паттерны проектирования на платформе .NET"                                                                           
 [9] "Microsoft Excel 2016 : новейший самоучитель"                                                                         
[10] "Секреты безопасности и анонимности в Интернете"                                                                      
[11] "PHP и MySQL : 25 уроков для начинающих"                                                                              
[12] "Совершенный код : мастер-класс"                                                                                      
[13] "Карьера программиста : прохождение собеседования, разработка программного обеспечения, структуры данных и алгоритмы" 
[14] "Site Reliability Workbook : практическое применение"                                                                 
[15] "Высоконагруженные приложения : программирование, масштабирование, поддержка"                                         
[16] "Программирование квантовых компьютеров. Базовые алгоритмы и примеры кода"                                            
[17] "Разработка информационного контента : учебник для студентов учреждений среднего профессионального образования (ФГОС)"
[18] "Проектная графика : учебник для студентов учреждений среднего профессионального образования"                         
[19] "Ловушка для багов. Полевое руководство по веб-хакингу"                                                               
[20] "BPF для мониторинга Linux" 
> pr <- xpathSApply(parse,'//span[@class="tg-bookprice"]',xmlValue)
> pr[1:2]
[1] "\n                2370 \u20bd\n\t\t\t" "\n                1650 \u20bd\n\t\t\t"
> trimws(pr)
 [1] "2370 \u20bd" "1650 \u20bd" "2570 \u20bd" "890 \u20bd"  "440 \u20bd"  "1080 \u20bd"
 [7] "840 \u20bd"  "910 \u20bd"  "300 \u20bd"  "740 \u20bd"  "1180 \u20bd" "1880 \u20bd"
[13] "1670 \u20bd" "2570 \u20bd" "2800 \u20bd" "1660 \u20bd" "1230 \u20bd" "1180 \u20bd"
[19] "1640 \u20bd" "1410 \u20bd"
> price <- as.integer(gsub(" \u20bd","",trimws(pr)))
> price
 [1] 2370 1650 2570  890  440 1080  840  910  300  740 1180 1880 1670 2570 2800 1660 1230 1180
[19] 1640 1410                                                                                           

Book data

Structure of the book file

http://mdk-arbat.ru/book/80969 ; http://mdk-arbat.ru/book/2563016

> wdir <- "C:/Users/batagelj/Documents/papers/2020/moskva/october/EDA/test"
> setwd(wdir)
> url1 <- "http://mdk-arbat.ru/book/"
> book <- "80969"; bookN <- 80969 
> page <- paste(url1,book,sep='')
> html <- readLines(con<-url(page)); close(con)
> S <- html[nchar(html)>0] 
> length(S)
[1] 759
> Encoding(S) <- "UTF-8"
> S[500:520]
> S[431:533]
  [1] "  <!--************************************"                                                                                                                                                                                                                                                                                           
  [2] "          BOOK Start"                                                                                                                                                                                                                                                                                                                 
  [3] "  *************************************-->"                                                                                                                                                                                                                                                                                           
  [4] "  <div class=\"tg-sectionspace tg-haslayout\">"                                                                                                                                                                                                                                                                                       
  [5] "    <div class=\"container\">"                                                                                                                                                                                                                                                                                                        
  [6] "      <div class=\"row\">"                                                                                                                                                                                                                                                                                                            
  [7] "        <div id=\"tg-twocolumns\" class=\"tg-twocolumns\">"                                                                                                                                                                                                                                                                           
  [8] "          <div class=\"col-xs-12 col-sm-8 col-md-8 col-lg-9 pull-right\">"                                                                                                                                                                                                                                                            
  [9] "            <div id=\"tg-content\" class=\"tg-content\">"                                                                                                                                                                                                                                                                             
 [10] "              "                                                                                                                                                                                                                                                                                                                       
 [11] "              <div class=\"tg-productdetail\" itemscope itemtype=\"http://schema.org/Book\">"                                                                                                                                                                                                                                         
 [12] "                <link itemprop=\"additionalType\" href=\"http://schema.org/Product\"/>"                                                                                                                                                                                                                                               
 [13] "                <div class=\"row\">"                                                                                                                                                                                                                                                                                                  
 [14] "                  <div class=\"col-xs-12 col-sm-12 col-md-4 col-lg-4\">"                                                                                                                                                                                                                                                              
 [15] "                    <div class=\"tg-postbook\">"                                                                                                                                                                                                                                                                                      
 [16] "                      <figure class=\"tg-featureimg\">"                                                                                                                                                                                                                                                                               
 [17] "                                                        <img src=\"http://img.mdk-arbat.ru/main/80/96/80969.jpg\" alt=\"Грокаем алгоритмы : иллюстрированное пособие для программистов и любопытствующих\" itemprop=\"image\">"                                                                                                       
 [18] "                                                                          </figure>"                                                                                                                                                                                                                                                  
 [19] "                      <div class=\"tg-postbookcontent\" >"                                                                                                                                                                                                                                                                            
 [20] "                                                <span class=\"tg-bookprice\" itemprop=\"offers\" itemscope itemtype=\"http://schema.org/Offer\">"                                                                                                                                                                                     
 [21] "                                <meta itemprop=\"price\" content=\"1000\">"                                                                                                                                                                                                                                                           
 [22] "                                <meta itemprop=\"priceCurrency\" content=\"RUB\">"                                                                                                                                                                                                                                                    
 [23] "                                                                    <meta itemprop=\"availability\" href=\"http://schema.org/InStock\" content=\"in_stock\">"                                                                                                                                                                         
 [24] "                                                                <link itemprop=\"url\" href=\"http://mdk-arbat.ru/book/80969\" />"                                                                                                                                                                                                    
 [25] "                                                            <ins style=\"color: #000;\">1000 &#8381;</ins>"                                                                                                                                                                                                                           
 [26] "                                                    </span>"                                                                                                                                                                                                                                                                          
 [27] "                            <p  class=\"inet-shop-price\"><small>ЦЕНА ИНТЕРНЕТ-МАГАЗИНА!</small></p>"                                                                                                                                                                                                                                 
 [28] "                                                <ul class=\"tg-delevrystock\">"                                                                                                                                                                                                                                                       
 [29] "                          <li><i class=\"icon-store\"></i><span>Наличие:"                                                                                                                                                                                                                                                             
 [30] "                                                                    <em style=\"color:#00A000\">есть</em>"                                                                                                                                                                                                                            
 [31] "                                                              </span></li>"                                                                                                                                                                                                                                                           
 [32] "                        </ul>"                                                                                                                                                                                                                                                                                                        
 [33] "                                                <div class=\"tg-quantityholder\" data-maxqty=\"14\">"                                                                                                                                                                                                                                 
 [34] "                          <em class=\"minus\">-</em>"                                                                                                                                                                                                                                                                                 
 [35] "                          <em class=\"plus\">+</em>"                                                                                                                                                                                                                                                                                  
 [36] "                            <div>"                                                                                                                                                                                                                                                                                                    
 [37] "                                <input type=\"text\" class=\"result\" value=\"1\" id=\"quantity\" name=\"quantity\">"                                                                                                                                                                                                                 
 [38] "                            </div>"                                                                                                                                                                                                                                                                                                   
 [39] "                        </div>"                                                                                                                                                                                                                                                                                                       
 [40] "                                                            <a class=\"mdk-btn mdk-active mdk-btn-lg quick--add-basket\" href=\"javascript:void(0);\" data-id=\"80969\" data-cnt=\"1\"  onmousedown=\"try { rrApi.addToBasket(80969) } catch(e) {};\" "                                                                               
 [41] ">Добавить в корзину</a>"                                                                                                                                                                                                                                                                                                              
 [42] "                                                                            <a class=\"mdk-btnaddtowishlist\" href=\"javascript:void(0);\">"                                                                                                                                                                                          
 [43] "                          <span>В список желаний</span>"                                                                                                                                                                                                                                                                              
 [44] "                        </a>"                                                                                                                                                                                                                                                                                                         
 [45] "                      </div>"                                                                                                                                                                                                                                                                                                         
 [46] "                      <div class=\"tg-postbookcontent\">"                                                                                                                                                                                                                                                                             
 [47] "                        <span>Поделиться:</span>"                                                                                                                                                                                                                                                                                     
 [48] "                                                <script src=\"https://yastatic.net/es5-shims/0.0.2/es5-shims.min.js\"></script>"                                                                                                                                                                                                      
 [49] "                        <script src=\"https://yastatic.net/share2/share.js\"></script>"                                                                                                                                                                                                                                               
 [50] "                                                <div class=\"ya-share2\" data-services=\"vkontakte,facebook,odnoklassniki,moimir,twitter,tumblr,whatsapp,skype,telegram\"></div>"                                                                                                                                                     
 [51] "                      </div>"                                                                                                                                                                                                                                                                                                         
 [52] "                    </div>"                                                                                                                                                                                                                                                                                                           
 [53] "                  </div>"                                                                                                                                                                                                                                                                                                             
 [54] "                  <div class=\"col-xs-12 col-sm-12 col-md-8 col-lg-8\">"                                                                                                                                                                                                                                                              
 [55] "                    <div class=\"tg-productcontent\">"                                                                                                                                                                                                                                                                                
 [56] "                      <ul class=\"tg-bookscategories\">"                                                                                                                                                                                                                                                                              
 [57] "                        <li><a href=\"/catalog?subj_id=3007\">Теория и технология программирования</a></li>"                                                                                                                                                                                                                          
 [58] "                      </ul>"                                                                                                                                                                                                                                                                                                          
 [59] "                      <div class=\"tg-booktitlefull\">"                                                                                                                                                                                                                                                                               
 [60] "                        <h2 itemprop=\"name\">Грокаем алгоритмы : иллюстрированное пособие для программистов и любопытствующих</h2>"                                                                                                                                                                                                  
 [61] "                      </div>"                                                                                                                                                                                                                                                                                                         
 [62] "                      <span class=\"tg-bookwriter\" itemprop=\"author\"><a href=\"/catalog?q=%D0%91%D1%85%D0%B0%D1%80%D0%B3%D0%B0%D0%B2%D0%B0%2C+%D0%90.\">Бхаргава, А.</a></span>"                                                                                                                                                   
 [63] "                  <div class=\"tg-description\" itemprop=\"description\">"                                                                                                                                                                                                                                                            
 [64] "                        <p>Алгоритмы - это всего лишь пошаговые алгоритмы решения задач, и большинство таких задач уже были кем-то решены, протестированы и проверены. Откройте великолепно иллюстрированную книгу и вы сразу поймете, что алгоритмы - это просто. А грокать алгоритмы - это веселое и увлекательное занятие.</p>"    
 [65] "                      </div>"                                                                                                                                                                                                                                                                                                         
 [66] "                      <div class=\"tg-sectionhead\">"                                                                                                                                                                                                                                                                                 
 [67] "                        <h2>Полная информация о книге</h2>"                                                                                                                                                                                                                                                                           
 [68] "                      </div>"                                                                                                                                                                                                                                                                                                         
 [69] "                      <ul class=\"tg-productinfo\">"                                                                                                                                                                                                                                                                                  
 [70] "                        <li><span><b>Код товара</b>:</span><span><b>80969</b></span></li>                        <li><span>Вид товара:</span><span>Книги</span></li>                                                <li><span>Целевое назначение:</span><span>Производств.-практич.изд.,практич.рук-во</span></li>"                   
 [71] "                                                    <li><span>ISBN:</span><span>978-5-4461-0923-4<meta itemprop=\"isbn\" content=\"978-5-4461-0923-4\"></span></li>"                                                                                                                                                                  
 [72] "                        "                                                                                                                                                                                                                                                                                                             
 [73] "                                                    <li><span>Серия:</span><span><a href=\"/catalog?ser_id=265\"><u>Библиотека программиста.</u></a></span></li>"                                                                                                                                                                     
 [74] "                        "                                                                                                                                                                                                                                                                                                             
 [75] "                                                    <li><span>Издательство:</span>"                                                                                                                                                                                                                                                   
 [76] "                                <span>Питер<meta itemprop=\"publisher\" content=\"Питер\"></span>"                                                                                                                                                                                                                                    
 [77] "                            </li>"                                                                                                                                                                                                                                                                                                    
 [78] "                                                <li><span>Год издания:</span><span>2021</span></li>                                                    <li><span>Количество страниц:</span><span>288<meta itemprop=\"numberOfPages\" content=\"288\"></span></li>"                                                                    
 [79] "                                                                        <li><span>Формат:</span><span>70х100/16</span></li>                                                <li><span>Переплет:</span><span>обл.</span></li>                      </ul>"                                                                               
 [80] "                    </div>"                                                                                                                                                                                                                                                                                                           
 [81] "                  </div>"                                                                                                                                                                                                                                                                                                             
 [82] "                  <div class=\"tg-productdescription\">"                                                                                                                                                                                                                                                                              
 [83] "                    <div class=\"col-xs-12 col-sm-12 col-md-12 col-lg-12\">"                                                                                                                                                                                                                                                          
 [84] "                      <div class=\"tg-sectionhead\">"                                                                                                                                                                                                                                                                                 
 [85] "                        <h2>Описание товара</h2>"                                                                                                                                                                                                                                                                                     
 [86] "                      </div>"                                                                                                                                                                                                                                                                                                         
 [87] "                      <ul class=\"tg-themetabs\" role=\"tablist\">"                                                                                                                                                                                                                                                                   
 [88] "                        <li role=\"presentation\"  class=\"active\"><a href=\"#instock\" data-toggle=\"tab\">Наличие в магазинах</a></li>"                                                                                                                                                                                            
 [89] "                          <li role=\"presentation\"><a href=\"#description\" data-toggle=\"tab\">Аннотация</a></li>"                                                                                                                                                                                                                  
 [90] "                      </ul>"                                                                                                                                                                                                                                                                                                          
 [91] "                      <div class=\"tg-tab-content tab-content\">"                                                                                                                                                                                                                                                                     
 [92] "                        <div role=\"tabpanel\" class=\"tg-tab-pane tab-pane\" id=\"description\">"                                                                                                                                                                                                                                    
 [93] "                          <div class=\"tg-description\">"                                                                                                                                                                                                                                                                             
 [94] "                            <p>Алгоритмы - это всего лишь пошаговые алгоритмы решения задач, и большинство таких задач уже были кем-то решены, протестированы и проверены. Откройте великолепно иллюстрированную книгу и вы сразу поймете, что алгоритмы - это просто. А грокать алгоритмы - это веселое и увлекательное занятие.</p>"
 [95] "                          </div>"                                                                                                                                                                                                                                                                                                     
 [96] "                        </div>"                                                                                                                                                                                                                                                                                                       
 [97] "                        <div role=\"tabpanel\" class=\"tg-tab-pane tab-pane active\" id=\"instock\">"                                                                                                                                                                                                                                 
 [98] "                          <div class=\"tg-description\">"                                                                                                                                                                                                                                                                             
 [99] "                            <div class=\"instock\">"                                                                                                                                                                                                                                                                                  
[100] "      <hr>"                                                                                                                                                                                                                                                                                                                           
[101] "        <div class=\"row\">"                                                                                                                                                                                                                                                                                                          
[102] "          <div class=\"col-xs-12 col-sm-12 col-md-12 col-lg-12\">"                                                                                                                                                                                                                                                                    
[103] "            <div class=\"col-md-6 col-sm-6 col-xs-6\"><strong><a href=\"/page/map/1\"><strong>Московский Дом Книги</strong></a></div>"                                                                                                                                                                                                
>

Extracting data

> parseS <- htmlParse(S)

> auth <- xpathSApply(parseS,'//span[@itemprop="author"]//a',xmlValue)
> auth
[1] "Бхаргава, А."

> titl <- trimws(xpathSApply(parseS,'//div[@class="tg-booktitlefull"]',xmlValue))
> titl
[1] "Грокаем алгоритмы : иллюстрированное пособие для программистов и любопытствующих"

> cteg <- as.vector(substr(xpathSApply(parseS,'//ul[@class="tg-bookscategories"]//li//a',xmlAttrs),18,25))
> cteg
[1] "3007"
 
> desc <- trimws(xpathSApply(parseS,'//div[@id="description"]//div[@class="tg-description"]',xmlValue))
> desc
[1] "Алгоритмы - это всего лишь пошаговые алгоритмы решения задач, и большинство таких задач уже были кем-то решены, протестированы и проверены. Откройте великолепно иллюстрированную книгу и вы сразу поймете, что алгоритмы - это просто. А грокать алгоритмы - это веселое и увлекательное занятие."
>

> price <- as.integer(xpathSApply(parseS,'//meta[@itemprop="price"]',xmlAttrs)["content",1])
> price
[1] 1000

> info <- xpathSApply(parseS,'//ul[@class="tg-productinfo"]//li//span',xmlValue)
> info
 [1] "Код товара:"                              "80969"                                   
 [3] "Вид товара:"                              "Книги"                                   
 [5] "Целевое назначение:"                      "Производств.-практич.изд.,практич.рук-во"
 [7] "ISBN:"                                    "978-5-4461-0923-4"                       
 [9] "Серия:"                                   "Библиотека программиста."                
[11] "Издательство:"                            "Питер"                                   
[13] "Год издания:"                             "2021"                                    
[15] "Количество страниц:"                      "288"                                     
[17] "Формат:"                                  "70х100/16"                               
[19] "Переплет:"                                "обл."                                    
> type <- info[6]
> ISBN <- info[8]
> series <- info[10]
> pub <- info[12]
> year <- info[14]
> pages <- info[16]
> format <- info[18]
> bind <- info[20]
> library(XML)
> url2 <- "http://mdk-arbat.ru/catalog/?subj_id="
> catid <- c(3013,3071)
> catmax <- c(4,2)
> ncat <- length(catid)
> books <- c()
> for(i in 1:ncat){
+    Subj <- as.character(catid[i])
+    for(p in 1:catmax[i]){
+       Pid <- as.character(p)
+       cata <- paste(url2,Subj,"&pid=",Pid,sep='')
+       Cata <- readLines(con<-url(cata)); close(con)
+       P <- Cata[nchar(Cata)>0]
+       parse <- htmlParse(P)
+       bks <- substr(xpathSApply(parse,'//h3//a',xmlAttrs)["href",],7,15)
+       books <- c(books,bks)
+    }
+ }
> books
  [1] "84278"   "84270"   "2459473" "79011"   "2458291" "2562896" "3373774" "7620262" "62496"  
 [10] "62396"   "62390"   "61270"   "2562696" "59770"   "55468"   "54862"   "2456037" "3372779"
 [19] "49370"   "48495"   "44561"   "43382"   "43372"   "43084"   "41345"   "41331"   "40271"  
 [28] "40268"   "37831"   "37123"   "31670"   "3371060" "30885"   "30884"   "30883"   "2561820"
 [37] "30032"   "2451862" "24875"   "24551"   "3370443" "23624"   "3369978" "18638"   "3369776"
 [46] "15264"   "13274"   "9671"    "9504"    "7919"    "7041"    "4937"    "4858"    "1566"   
 [55] "984862"  "975543"  "970159"  "970320"  "3365845" "944600"  "938078"  "916417"  "915757" 
 [64] "2557092" "2555750" "885377"  "862587"  "860804"  "854758"  "3339303" "851859"  "838618" 
 [73] "6618161" "2549867" "8414432" "2547386" "2544319" "80443"   "74979"   "62486"   "62481"  
 [82] "62142"   "2562710" "2456733" "59771"   "58301"   "8233024" "3371383" "32468"   "23110"  
 [91] "21540"   "19911"   "8232530" "7024"    "1530"    "3366203" "969060"  "947416"  "918422" 
[100] "915260"  "3353997" "3345066" "829724" 
> 
> E <- rep("",n); Z <- rep(0,n)
> B <- data.frame(aut=E,tit=E,cat=E,des=E,pri=Z,typ=E,isbn=E,ser=E,pub=E,year=E,pag=E,fmt=E,bnd=E,row.names=books,stringsAsFactors=FALSE)
> for(b in 1:n){
>    bk <- books[b]
>    page <- paste(url1,bk,sep='')
>    html <- readLines(con<-url(page)); close(con)
>    S <- html[nchar(html)>0] 
>    Encoding(S) <- "UTF-8"
>    parseS <- htmlParse(S)
>    B[bk,"aut"] <- xpathSApply(parseS,'//span[@itemprop="author"]//a',xmlValue)
>    B[bk,"tit"] <- trimws(xpathSApply(parseS,'//div[@class="tg-booktitlefull"]',xmlValue))
>    B[bk,"cat"] <- as.vector(substr(xpathSApply(parseS,'//ul[@class="tg-bookscategories"]//li//a',xmlAttrs),18,25))
>    B[bk,"des"] <- trimws(xpathSApply(parseS,'//div[@id="description"]//div[@class="tg-description"]',xmlValue))
>    B[bk,"pri"] <- as.integer(xpathSApply(parseS,'//meta[@itemprop="price"]',xmlAttrs)["content",1])
>    info <- xpathSApply(parseS,'//ul[@class="tg-productinfo"]//li//span',xmlValue)
>    B[bk,"typ"] <- info[6]
>    B[bk,"isbn"] <- info[8]
>    B[bk,"ser"] <- info[10]
>    B[bk,"pub"] <- info[12]
>    B[bk,"year"] <- info[14]
>    B[bk,"pag"] <- info[16]
>    B[bk,"fmt"] <- info[18]
>    B[bk,"bnd"] <- info[20]
>    cat("\a-"); flush.console(); Sys.sleep(0.25)
>    if(b%%10==0) cat(" ")
>    if(b%%50==0) cat("\n")
> }
> cat("\n")
 
> bn <- B[,"bnd"]
> Encoding(bn) <- "UTF-8"
> bn
  [1] "в пер." "обл."   "обл."   "в пер." "обл."   NA       "обл."   "в пер." "в пер." "в пер."
 [11] "в пер." "в пер." "обл."   "в пер." "обл."   "в пер." "обл."   "обл."   "обл."   "обл."  
 [21] "обл."   "в пер." "в пер." "в пер." "обл."   "обл."   "в пер." "обл."   "обл."   "в пер."
 [31] "обл."   "обл."   "обл."   "обл."   "обл."   "в пер." "обл."   NA       "обл."   "в пер."
 [41] "в пер." "обл."   "обл."   "обл."   "в пер." "в пер." "в пер." "обл."   "обл."   "в пер."
 [51] "обл."   "обл."   "обл."   "обл."   "в пер." "обл."   "обл."   "обл."   "обл."   "обл."  
 [61] "в пер." "обл."   "обл."   "обл."   "обл."   "обл."   "обл."   "обл."   "обл."   "обл."  
 [71] "обл."   "обл."   "в пер." "в пер." "обл."   "обл."   "обл."   "обл."   "обл."   "обл."  
 [81] "в пер." "обл."   "обл."   "обл."   "в пер." "обл."   "в пер." "обл."   "обл."   "обл."  
 [91] "обл."   "обл."   "обл."   "в пер." "в пер." "обл."   "обл."   "обл."   "в пер." "обл."  
[101] "обл."   "обл."   "обл."  
 
> dim(B)
[1] 103  13
> write.csv(B,"Books0.csv",row.names=TRUE)

Larger dataset:

> url2 <- "http://mdk-arbat.ru/catalog/?subj_id="
> # catid <- c(3013,3071)
> # catmax <- c(4,2)
> catid <-  c( 2,7, 9,14,15,16,17,19,24)
> catmax <- c(24,3,10,27,12,50,13,50,50)
> ncat <- length(catid)
> books <- c()
> for(i in 1:ncat){
+    Subj <- as.character(catid[i])
+    cat(paste(Subj,":",as.character(catmax[i]),"\n")); flush.console()
+    for(p in 1:catmax[i]){
+       Pid <- as.character(p)
+       cata <- paste(url2,Subj,"&pid=",Pid,sep='')
+       Cata <- readLines(con<-url(cata)); close(con)
+       P <- Cata[nchar(Cata)>0]
+       parse <- htmlParse(P)
+       bks <- substr(xpathSApply(parse,'//h3//a',xmlAttrs)["href",],7,15)
+       books <- c(books,bks)
+    }
+ }
2 : 24 
7 : 3 
9 : 10 
14 : 27 
15 : 12 
16 : 50 
17 : 13 
19 : 50 
24 : 50 
There were 50 or more warnings (use warnings() to see the first 50)
> length(books)
[1] 4721
> save(books,file="BookList.RData",ascii=TRUE)

https://raw.githubusercontent.com/bavla/HSE/master/EDA/BookList.RData

In processing of a book some unexpected error can appear. To deal with it (skip it) we use the function tryCatch.

> url1 <- "http://mdk-arbat.ru/book/"
> n <- length(books)
> E <- rep("",n); Z <- rep(0,n)
> B <- data.frame(aut=E,tit=E,cat=E,des=E,pri=Z,typ=E,isbn=E,ser=E,pub=E,year=E,pag=E,fmt=E,bnd=E,row.names=books,stringsAsFactors=FALSE)
> for(b in 3201:3300){
>    tryCatch({
>       bk <- books[b]
>       page <- paste(url1,bk,sep='')
>       html <- readLines(con<-url(page)); close(con)
>       S <- html[nchar(html)>0] 
>       Encoding(S) <- "UTF-8"
>       parseS <- htmlParse(S)
>       B[bk,"aut"] <- xpathSApply(parseS,'//span[@itemprop="author"]//a',xmlValue)
>       B[bk,"tit"] <- trimws(xpathSApply(parseS,'//div[@class="tg-booktitlefull"]',xmlValue))
>       B[bk,"cat"] <- as.vector(substr(xpathSApply(parseS,'//ul[@class="tg-bookscategories"]//li//a',xmlAttrs),18,25))
>       B[bk,"des"] <- trimws(xpathSApply(parseS,'//div[@id="description"]//div[@class="tg-description"]',xmlValue))
>       B[bk,"pri"] <- as.integer(xpathSApply(parseS,'//meta[@itemprop="price"]',xmlAttrs)["content",1])
>       info <- xpathSApply(parseS,'//ul[@class="tg-productinfo"]//li//span',xmlValue)
>       B[bk,"typ"] <- info[6]
>       B[bk,"isbn"] <- info[8]
>       B[bk,"ser"] <- info[10]
>       B[bk,"pub"] <- info[12]
>       B[bk,"year"] <- info[14]
>       B[bk,"pag"] <- info[16]
>       B[bk,"fmt"] <- info[18]
>       B[bk,"bnd"] <- info[20]
>    }, error = function(e){ message('Caught an error!'); print(e); print(b) })
>    cat("\a-"); flush.console(); # Sys.sleep(0.25)
>    if(b%%10==0) cat(" ")
>    if(b%%50==0) cat(" ",b,"\n")
> }
> cat("\n")
 
> dim(B)
[1] 4721   13
> save(B,file="Books.RData")
> save(B,file="BooksA.RData",ascii=TRUE)
> write.csv(B,file="MDKarbat.csv")
> bi <- as.character(B[2559,])
> Encoding(bi) <- "UTF-8"
> bi
 
> library(stringi)
> UTF8 <- function(s) stri_unescape_unicode(gsub("<U\\+(....)>", "\\\\u\\1",s))
> T <- read.csv("MDKarbat.csv",stringsAsFactor=FALSE)
> au <- UTF8(T$aut)
> au[1:10]
 [1] ""                "Манько, Ю. В,"   "Филатова, О. Г." "Недель, А."      "Манн, М."       
 [6] "Шанин, Т."       "Манн, М."        "Манн, М."        "Манн, М."        "Агапов, П. В." 

https://github.com/bavla/HSE/raw/master/EDA/MDKarbat.csv

https://github.com/bavla/HSE/raw/master/EDA/Books.RData


EDA

ru/hse/eda20/arbat.txt · Last modified: 2020/10/24 05:41 by vlado
 
Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki