Ответы пользователя по тегу Beautiful Soup
  • Парсинг сайта. В какую сторону копать?

    @nirvimel
    Это 100% AJAX контент. Не пытайтесь парсить HTML - это пустой шаблон.
    Сам контент несут запросы:
    www.nowgoal.net/data/panlu_en.js?1487540944000
    www.nowgoal.net/data/bf_en2.js?1487540944000 - видимо, главный список матчей.
    Формат: Javascript/JSONP (то есть НЕ валидный JSON).
    А этот GET-параметр - метка времени в формате Javascript (миллисекунды с момента начала Эпохи).

    P.S.: Я обычно с уважением отношусь к веб-разработчикам (хорошо_ли/плохо_ли вышло, но люди делали, старались), но, глядя на этот кусок... сайта, просто не могу удержаться: ТАКОГО ГОВНОКОДА Я НЕ ВИДЕЛ ДАВНО!
    Ответ написан
    2 комментария
  • Как получить доступ к элементу через BeautifulSoup?

    @nirvimel
    CSS: div.myclass h4 a
    XPath: //div[contains(@class, 'myclass')]/h4/a
    Ответ написан
    Комментировать
  • Как осуществить логин на сайте?

    @nirvimel
    куки, может они как-то связаны с логином?

    А то!

    Смотрите что отправляет браузер в момент логина включая все заголовки, все куки, все тело POST и все параметры в нем (не что он должен отправлять исходя из структуры формы, а что в этот момент на самом деле отправляют скрипты) и сравнивайте с тем, что отправляет ваш парсер.
    Бывает, проще прочесть скрипты, понять их логику и переписать на питон. Бывает наоборот, обфусцированный скрипт на несколько тысяч строк, тогда проще анализировать сетевую активность в момент совершения действия (логина, например), пробовать разные варианты ввода, наблюдать как зависит передаваемое от введенного, выявлять закономерности и имитировать подобный алгоритм на питоне.
    Ответ написан
    2 комментария
  • Как получить доступ к Ajax контенту во время парсинга?

    @nirvimel
    В общем случае, при помощи парсинга html, не возможно получить страницу в том виде в который ее приводят ее собственные джаваскрипты при загрузке потому, что парсер - не браузер, он не исполняет джаваскрипты.
    В частных случаях можно вынуть из текста скрипта все urlы по которым идут ajax запросы, производить все эти запросы в своем коде и парсить результаты. Тут куча подводных камней - во-первых, параметры ajax запроса могут быть спрятаны в коде каким-нибудь не тривиальным образом, во-вторых нужно правильно выставить все заголовки запроса со всеми куками (которыми скрипты со страницы так же могут манипулировать), потом не забыть правильно задать referrer. В общем случае у скриптов на странице всегда остается возможность, используя какие-нибудь динамически меняющиеся параметры, запутать свою работу так, что для такой страницы создать парсер будет невозможно.
    Радикально иной вариант - использовать настоящий браузер (через Sillentium, например), который исполняет все скрипты и, с точки зрения противоположной стороны, неотличим от живого пользователя. Это решает все проблемы с хитрыми ajax-ами. Но это уже совсем другой порядок объемов потребляемых ресурсов и скорости. Если, например, на самом дешевом vps (с 128 Мб памяти) на гигабитном канале можно парсить в 50-100 потоков. Даже из расчета по несколько секунд на ожидание + обработку каждой страницы получаем 10-20 расперсенных страниц в секнду. Теперь если перейти на Sillentium + Webkit, то 128 Мб уже не хватает для запуска даже одного потока. Если даже запускать все это на своем домашнем десктопе с гигабайтами памяти (с vps в качестве прокси), то можно получить максимум несколько расперсенных страниц в секунду. То есть парсинг через полноценный браузер не конкурент парсерам типа lxml + requests/liburl.
    Ответ написан
    Комментировать