Парсинг информации, подгружаемой через AJAX

Пресет Подгрузка ссылок через js 1.0

Available for license holders
Данная задача очень часто встречается в обращениях в тех поддержку, поэтому на данном примере покажу как она решается. Здесь необходим комплексный подход.
1) По данной ссылке, как указано выше, контент действительно подгружается JS скриптом. Но в конце-концов он тоже откуда-то получает данные, а значит делает куда-то запрос. Нам нужно только этот запрос найти, и потом воспользоваться им. Для этого воспользуемся Инструментами разработчика (Ctrl+Shift+I, вкладка Network), которые доступны в браузере Chrome. Откроем вышеуказанную ссылку и проанализируем ее. Мы увидим много различных запросов и ответов. Просмотрев все ответы на предмет нужной нам информации (к примеру здесь можно искать по первому названию: "Cengage Advantage Books..."), находим нужный нам запрос.
VcTxG.png

2) Проверяем и анализируем найденный запрос. Для начала откроем его в новой вкладке браузера и посмотрим, действительно ли он выдает то, что нам нужно.
VDxj9.png

Как видим - да, есть название книги и ссылка на нее (выделены зеленым), а также много другой информации. Если внимательно приглядеться - можно увидеть, что это данные в формате JSON. Убедиться в этом можно, подставив в полученные данные в Template tester в A-parser'е и нажав кнопку Pretiffy JSON (выделена зеленым квадратом).
UM27D.png

На рисунке, кстати, отображен пример вывода авторов через переменные из масива JSON.
3) Но вернемся к нашей начальной ссылке. Как видим это была только первая страница, на которой только 10 результатов. А как быть если нужны все остальные? Анализируем найденный ранее запрос:
http://www.chegg.com/_ajax/book/search/books/1?trackid=2aed0035&strackid=1514181a

Если вместо выделенной жирным 1 поставить 2, и открыть эту ссылку в браузере - то увидим, что выдаваемые данные и есть то что нам нужно (2-я страница) в уже знакомом нам JSON. Отлично, теперь осталось все это загрузить в A-parser.
4) Для парсинга будем использовать Net::HTTP Net::HTTP. Для получения необходимых нам данных из всего контента используем Parse custom result и регулярные выражения. Кстати, регулярное выражение в данном примере необходимо очень внимательно составлять, т.к. в этой выдаче есть еще "relatedItems" (что-то вроде похожих книг) и вместе с ними на первой странице можно получить 18 результатов вместо 10.
u5aRe.png

Пояснения:
  • На вход подается найденный ранее запрос, но вместо цифры подставляем макрос перебора цифр. В данном примере будут пройдены все страницы с 1-й по 1000-ю.
  • В результате мы получим в файле следующую информацию: Автор - Название книги: Ссылка на страницу. По желанию формат результата можно менять как угодно, изменяя регулярное выражение и собираемые им данные, а также меняя сам Result format. Обратите внимание, здесь еще с помощью Конструктора результатов заменяется "\/" на "/", т.к. в JSON символ "/" экранируется.
Результирующий файл будет иметь следующий вид:

Gilbar, Steven - Good Books: http://www.chegg.com/textbooks/good-books-1st-edition-9780899191270-0899191274?trackid=2aed0035&strackid=1514181a&ii=342
Singer, A. - Atrocious Books: http://www.chegg.com/textbooks/atrocious-books-1st-edition-9780952753797-0952753790?trackid=2aed0035&strackid=1514181a&ii=343
Lear, Edward - Nonsense Books: http://www.chegg.com/textbooks/nonsense-books-1st-edition-9781406741186-1406741183?trackid=2aed0035&strackid=1514181a&ii=344
Van Dyke, Henry - Companionable Books: http://www.chegg.com/textbooks/companionable-books-1st-edition-9781434489807-1434489809?trackid=2aed0035&strackid=1514181a&ii=345
Van Dyke, Henry - Companionable Books: http://www.chegg.com/textbooks/companionable-books-1st-edition-9781434489814-1434489817?trackid=2aed0035&strackid=1514181a&ii=346
Rodgers, Paul - Mind Books: http://www.chegg.com/textbooks/mind-books-1st-edition-9781596820258-159682025x?trackid=2aed0035&strackid=1514181a&ii=347
- Board Books: http://www.chegg.com/textbooks/board-books-1st-edition-9781858301129-1858301122?trackid=2aed0035&strackid=1514181a&ii=348
Ash, Russell - Bizarre Books: http://www.chegg.com/textbooks/bizarre-books-1st-edition-9781862051027-186205102x?trackid=2aed0035&strackid=1514181a&ii=349
Desantis, Christopher - Wicked Books: http://www.chegg.com/textbooks/wicked-books-1st-edition-9780615154800-0615154808?trackid=2aed0035&strackid=1514181a&ii=350
Sherman, William H. - Used Books: http://www.chegg.com/textbooks/used-books-1st-edition-9780812220841-0812220846?trackid=2aed0035&strackid=1514181a&ii=251
Larue, Monique - Between Books: http://www.chegg.com/textbooks/between-books-1st-edition-9780864925343-0864925344?trackid=2aed0035&strackid=1514181a&ii=252
Doyle, Robert P. - Banned Books: http://www.chegg.com/textbooks/banned-books-1st-edition-9780838985472-0838985475?trackid=2aed0035&strackid=1514181a&ii=253
Bierman, Larry - Two Books: http://www.chegg.com/textbooks/two-books-1st-edition-9781453715291-1453715290?trackid=2aed0035&strackid=1514181a&ii=254
Thackeray, William Makepeace - Sketch Books: http://www.chegg.com/textbooks/sketch-books-1st-edition-9781434414373-143441437x?trackid=2aed0035&strackid=1514181a&ii=255
Thackeray, William Makepeace - Sketch Books: http://www.chegg.com/textbooks/sketch-books-1st-edition-9781434414380-1434414388?trackid=2aed0035&strackid=1514181a&ii=256
...
На этом все - задача решена)))
Код:
eyJwcmVzZXQiOiJodHRwOi8vYS1wYXJzZXIuY29tL3RocmVhZHMvMTY5OSIsInZh
bHVlIjp7InByZXNldCI6Imh0dHA6Ly9hLXBhcnNlci5jb20vdGhyZWFkcy8xNjk5
IiwicGFyc2VycyI6W1siTmV0OjpIVFRQIiwiZGVmYXVsdCIseyJ0eXBlIjoib3Zl
cnJpZGUiLCJpZCI6ImZvcm1hdHJlc3VsdCIsInZhbHVlIjoiJGJvb2tzLmZvcm1h
dCgnJGF1dGhvciAtICR0aXRsZTogaHR0cDovL3d3dy5jaGVnZy5jb20vJGxpbmtc
XG4nKSJ9LHsidHlwZSI6ImN1c3RvbVJlc3VsdCIsInJlc3VsdCI6ImRhdGEiLCJy
ZWdleCI6IlssfFxcW117XCJ0eXBlXCI6Lis/XCJwcmltYXJ5QXV0aG9yXCI6XCIo
Lio/KVwiLis/XCJ0aXRsZVwiOlwiKC4rPylcIi4rP1wicGRwXCI6XCIoLis/KVwi
IiwicmVnZXhUeXBlIjoiZyIsInJlc3VsdFR5cGUiOiJhcnJheSIsImFycmF5TmFt
ZSI6ImJvb2tzIiwicmVzdWx0cyI6WyJhdXRob3IiLCJ0aXRsZSIsImxpbmsiXX1d
XSwicmVzdWx0c0Zvcm1hdCI6IiRwMS5wcmVzZXQiLCJyZXN1bHRzU2F2ZVRvIjoi
ZmlsZSIsInJlc3VsdHNGaWxlTmFtZSI6IiRkYXRlZmlsZS5mb3JtYXQoKS50eHQi
LCJhZGRpdGlvbmFsRm9ybWF0cyI6W10sInJlc3VsdHNVbmlxdWUiOiJubyIsInF1
ZXJ5Rm9ybWF0IjpbIiRxdWVyeSJdLCJ1bmlxdWVRdWVyaWVzIjpmYWxzZSwic2F2
ZUZhaWxlZFF1ZXJpZXMiOmZhbHNlLCJpdGVyYXRvck9wdGlvbnMiOnsib25BbGxM
ZXZlbHMiOmZhbHNlLCJxdWVyeUJ1aWxkZXJzQWZ0ZXJJdGVyYXRvciI6ZmFsc2V9
LCJyZXN1bHRzT3B0aW9ucyI6eyJvdmVyd3JpdGUiOmZhbHNlfSwiZG9Mb2ciOiJu
byIsImtlZXBVbmlxdWUiOiJObyIsIm1vcmVPcHRpb25zIjpmYWxzZSwicmVzdWx0
c1ByZXBlbmQiOiIiLCJyZXN1bHRzQXBwZW5kIjoiIiwicXVlcnlCdWlsZGVycyI6
W10sInJlc3VsdHNCdWlsZGVycyI6W3sic291cmNlIjpbMCxbImJvb2tzIiwibGlu
ayJdXSwidHlwZSI6InN0cmluZ1JlcGxhY2UiLCJhcnJheSI6ImJvb2tzIiwic2Vh
cmNoIjoiXFwvIiwicmVwbGFjZSI6Ii8iLCJ0byI6ImxpbmsifV0sImNvbmZpZ092
ZXJyaWRlcyI6W119fQ==
 
Назад
Верх