Есть одна мысля. Хочу сграббить много музыки с сервиса zaycev.net. Начал писать парсер на питоне и встал на одном месте... Короче там у них интеграция с mail.ru. Точнее поиск от mail.ru. Ну так вот я например шлю такой запрос "
go.mail.ru/zaycev?q=Hilary+Duff", а в ответ мне приходит не полный контент. Т.е. буквально нет 300+ строк кода. Я просто попытался засниффить этот запрос фиддлером. В нем все нормально. Тогда я взял из фиддлера на всякий случай еще все заголовки запроса и постманом сделал запрос с ними - та же фигня что и в питоне - нету части контента. Вот как так может быть? Была мысль что может этот контент генерируется жабаскриптом, но фиддлер же получил весь контент, а он не стал бы думаю выполнять никакие скрипты. Значит отпадает. Прямо магия какая-то...
П.С. Ошибка не в питоне точно, т.к. постман тоже контент недополучает.
Впрочем мне не жалко, кода то 5 копеек:
import sys
from pyquery import PyQuery as pq
import urllib
import json
SEARCH_URL = 'http://go.mail.ru/zaycev'
def get_search_results(query):
q = urllib.urlencode({'q': query})
url = '%s?%s' % (SEARCH_URL, q)
d = pq(url = url)
print([ a.text() for a in d('.page-navig a').items()])
for e in d('li.result__li').items():
a = e('.result__title a')
yield {
'track': a.text(),
'link': a.attr('href')
}
def main(args):
r = list(get_search_results('Hillary Duff'))
with open('output.json', 'wb') as o:
json.dump(r, o, sort_keys = True, indent = 4)
if __name__ == '__main__':
main(sys.argv)
Когда скачиваю отсутствует блок page-navig (кнопки вперед / назад, мне нужны чтобы определить есть ли еще страницы), а также часть результатов (блоков result__li), например в запросе который я тестил (в коде) их 6, а в браузере намного больше (плюс там еще не одна страница их).