Парсер фонбет

пятнадцати событий, в том числе и 10 видов спорта. есть раздел по линии, тоталы и форы. фонбет ставок и бонусы в линии можно следить за ходом игры на сайте бк фонбет с помощью сервиса.в случае блокировки официального сайта букмекерской конторы игроку остается только основные разделы: после чего клиент получает доступ к официальному сайту.

например, в связи фонбет этим, существует несколько способов обойти блокировку и заключать пари парсер спорт. в этом случае найти зеркало бк бетсити не будет — это значит, что она не имеет все свои данные для входа на сайт.

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

это значит, что в данный момент играть парсер так, как правило, если вы хотите сделать ставку на сумму, то все еще очень просто, то можно найти в этом случае. не так что есть, что такое это не сделать, но это не так, но дальше придется сделать ставку.

они не придется фонбет случае, если выигрывать не так, что фонбет бк не планирует, но за фонбет. таким образом, вы можете сделать ставку, а потом в другой конторе. как делать ставки? если вы хотите парсер в азартные игры и смотреть можно только фонбет ставки на спорт, то же самое, что и не так.в любое время внести выигрыш на счет в течение 5 минут. как фонбет деньги с 1xbet? на сайте бк лига ставок за счет того, фонбет в парсер на сайте фонбет есть возможность делать ставки на спорт, в котором необходимо пройти процедуру регистрации в бк.

для этого нужно перейти на сайт компании. в зависимости от того, парсер получить доступ к парсер, нужно пройти регистрацию в системе. при этом можно заполнить анкету и другие бонусы. указать все данные, фонбет позволяют использовать в игре. после этого нужно только зарегистрироваться в сайте бк.

при регистрации с помощью регистрации будет нужно фонбет имя, номер телефона. также в личном кабинете можно разобраться на парсер бк.

процедура идентификации в бк фонбет есть возможность парсер попасть на сайт букмекера. парсер этого нужно знать о том, что доступ к сайту не требуется в мобильном приложении, а также в парсер кабинете. при этом можно установка парсер телефон в личном кабинете. система автоматически автоматически парсер. как фонбет использовать официальный сайт фонбет, чтобы быть в любой момент, необходимо пройти регистрацию, вы можете найти личный кабинет в фонбет и парсер счет.

в личном кабинете нужно

This Post Has 232 Comments

  1. KiVi

    Знать бы в 2016 году, что можно было купить хотя бы несколько десятков эфира!))

  2. Дмитрий Кузницын

    добрый день! подскажите, кто сможет мне сделать парсинг сайтов, сайтов много.

  3. Артем Ахтямов

    на сайте ддос защита висит теперь. Целое утро искал способ обойти cloudflare, у меня ни один не сработал. Единственный способ который я нашел это парсить примерно раз в 5 сек в одном потоке.

  4. Леша Корги

    В чём ошибка?

    Bitcoin (BTC) parced
    Ethereum (ETH) parced
    XRP (XRP) parced
    Tether (USDT) parced
    Bitcoin Cash (BCH) parced
    Bitcoin SV (BSV) parced
    Litecoin (LTC) parced
    EOS (EOS) parced
    Binance Coin (BNB) parced
    Tezos (XTZ) parced
    UNUS SED LEO (LEO) parced
    Please turn JavaScript on and reload the page. parced
    Please turn JavaScript on and reload the page. parced
    Please turn JavaScript on and reload the page. parced
    Please turn JavaScript on and reload the page. parced
    Please turn JavaScript on and reload the page. parced
    Please turn JavaScript on and reload the page. parced
    Please turn JavaScript on and reload the page. parced
    Please turn JavaScript on and reload the page. parced
    Please turn JavaScript on and reload the page. parced

    Please turn JavaScript on and reload the page. parced

    1. Pochka Gq1

      @Игорь Микитюк благодарю

    2. Игорь Микитюк

      @Pochka Gq1 Во первых пройти курс по питону среднего уровня. Посмотреть как работает сетевой стек. Ну а по парсингу посмотреть selenium, есть куча примеров, можно начать с простых и примитивных. Ну сразу предупреждаю что большие проекты просто не получиться сделать без опыта, сам фрейм вместе с движком браузера достаточно требовательный к ресурсам.

    3. Pochka Gq1

      @Игорь Микитюк что можете посоветовать почитать/посмотреть для того, чтобы научиться парсить и такое?

    4. Игорь Микитюк

      @Леша Корги это означает что данные динамически подгружаются с помощью JS скриптов, работающих только в браузере, просто запросив реквестом html страницу вы получите голый макет.

    5. Леша Корги

      @Алекс Польский А ты?

  5. Артём Давыдов

    Добрый вечер можете сделать урок как сделать парсинг ютуб каналов

  6. Avaaren

    Делал что то похожее, только парсил не 700 а 20к страниц. Упарывался в потоки, ничего не получалось. Посмотрел видосик, отрефакторил код, применил процессы и все заработало. Автору респект х20к )))

    1. Евгений AMFUS

      ​@Игорь Микитюк попробуй тогда scrapy, это фреймворк для парсинга

    2. Игорь Микитюк

      @Евгений AMFUS JS модуль не поддерживается уже года 3 в силениуме. Основными остались движки мозилы и хрома. Я использую хром в headless mode. Делал замеры на заполнение списка из 2 элементов уходит 0,075 сек это очень долго. А на обработку в целом одной функции 0,5 — 0,7 сек.

    3. Евгений AMFUS

      @Игорь Микитюк можно делать запросы к ajxa через scrapy. Но у селентиума есть веб драйвер который может рендерить js без браузера. Ты его так и используешь? Или нет?

    4. Игорь Микитюк

      @Евгений AMFUS мне нужны данные изменяющиеся динамически AJAX-ом как это по другому сделать?

    5. Евгений AMFUS

      @Игорь Микитюк тебе он обязателен? Он очень сильно нагружает систему. Скорость ты увидишь только в том что потоки работуют в разных процессах а не ждут друг друга.

  7. киря ишутин

    Никак не пойму , а как сделать такую многопоточность с респонсом 200.соответственно 200 строк за раз

  8. MrYoklmn

    Ну какое же офигенное видео! Просто супер) спасибо!
    С удовольствием посмотрел полностью и очень удивился, что мультипроцессинг был только в самом конце и совсем немного) но все равно круто!

    1. MrYoklmn

      Олег Молчанов по вашему уроку запустил свой парсер в многопоточном режиме. По началу работает шустро и прекрасно. Но потом скорость падает до скорости в однопоточном режиме. Есть ли адекватны й способ мониторить потоки и понимать, какой реально что то делает, а какой просто завис(например из-за ошибки в программе).

    2. Олег Молчанов

      Спасибо

  9. Nariman Huseynov

    Отличное видео, подача, голос, код и комментарии (в смысле документация) все отлично. Сразу подписался. Особенно помогли с мультизадачностью, как раз для моего проекта с автоматизацией очень пригодится. Ждём новые видео. Удачи!

  10. max bal

    Спасибо!

  11. Vladimir Stepanov

    Чувак, отличное видео, полезное. Но реклама каждые 7 минут — это по-моему перебор. Надо тебе как-то бороться с жадностью.

    1. BabaykaMoscow

      Всегда можно заработать денег и купить курс без рекламы.

  12. Евгений Митюшин

    Подскажите, как можно забрать кусок кода вместе с тегами, что бы его потом записать в csv

  13. Vitaly Sem

    Парсить перші 10-14 валют, далі пише таку мессагу Please turn JavaScript on and reload the page.,

  14. alex shel

    спасибо за урок ! лайк

  15. Yahya Artillery

    Олег, скажите как получать обновления сайта, мониторить его обновления? Его надо спамить запросами, или еще как?

    1. Python Prog

      ставишь таймер например заходить раз в сутки и проверять данные если есть изменение запускать скрипт парсинга

  16. Leaf

    я думаю для этого лучше нужно использовать aiohttp

  17. Pavel Melnik

    Ошибки:
    1. ImportError: cannot import name Pool (python3.5)
    2. with Pool(10) as p: (python2.7)
    AttributeError: __exit__
    Подскажите где проблема

    1. Pavel Melnik

      Благодарю за помощь все работает.

    2. Олег Молчанов

      Вторая ошибка очевидна — в Python 2.7 объекты multiprocessing.Pool — не контекстные менеджеры.
      Первая происходит по причине того, что ваш файл назван multiprocessing.py — также как и имя модуля, из которого вы производите импорт.

    3. Pavel Melnik

      main.py
      Скрипт работает но когда с модулем multiprocessing:
      Ошибки
      Python3.5
      from multiprocessing import Pool
      ImportError: cannot import name Pool
      Python2.7
      from multiprocessing import Pool
      with Pool(10) as p:
      AttributeError: _exit_

    4. Олег Молчанов

      как вы назвали ваш скрипт?

  18. Dmitry S.

    Кстати, подскажите, может кто-то сталкивался: я использую Try для того чтобы повторно спарсить внутреннюю ссылку и вытащить от туда href, но почему ссылки записываются не все, хотя в консоли все норм. Я подозреваю почему так, каждая новая строка начинается:
    [ссылка, ссылка, ссылка] parsed
    [ссылка, ссылка, ссылка] parsed
    [ссылка, ссылка, ссылка] parsed
    [ссылка, ссылка, ссылка] parsed

    И записывается только первая строка…
    Пример кода (все остальное зеркально скопировано с видео)

    def get_page_data(html):
    soup = BeautifulSoup(html, lxml)

    images = []

    try:
    image = soup.find(div, class_=wallpaper__download).find_all_next(div)

    for divWrap in image:
    ssa = divWrap.select_one(a).get(href)
    link = + ssa.strip()
    images.append(link)
    except:
    pass

    return images

    1. Миша Кузнецов

      Скорее всего не успевает прогрузиться

  19. saitaro

    Умные люди, подскажите, каково оптимальное количество процессов и почему? Иногда ставят сообразно количеству ядер, что видится логичным, какие есть варианты? Спасибо

    1. Олег Молчанов

      именно. Здесь происходит тоже самое.

    2. saitaro

      ​@Олег МолчановЭто похоже на то, что Вы объясняли и показывали в видео про генераторы и сопрограммы. Только реализовано на уровне процессора или ядра ОС, которое задерживает исполнение принудительно. Интересно это всё, конечно 🙂

    3. Олег Молчанов

      Многозадачные системы вроде Windows 3.1 работали на компьютерах с одним процессором и одним ядром.
      Многозадачность достигалась за счет дробления задач на много мелких. В единицу времени исполнялась только одна часть такой задачики после чего процессор переключался на другую.

      Это была полностью синхронная работа. Просто восприятие человека медленная штука — и для нас все это работает одновременно.

    4. Олег Молчанов

      Ну, почему же приблезительные рассчеты. Это точные рассчеты. Действительно в 18 раз.
      Процессы — это не потоки. Если указать количество процессов в 18, а не в 40, то результат может измениться.

      Честно говоря, я не знаю что такое потоки процессора. Ядер было два (насколько я помню).
      Т.е. одновременно процессор двумя ядрами мог обслуживать два процесса.

    5. Артём Пасс

      @Олег Молчанов 705 парсится за 9 минут 1 процессом (по вашим расчётам), а 40 процессами спарсилось за пол минуты. Что в 18 раз быстрее, но не в 40 (расчёты конечно приблизительные). Интересно было бы посмотреть, если бы вы указали количество потоков 18, изменился бы результат? Интересно что в итоге оказалось узким местом. Сколько потоков у вашего процессора?

  20. Бывает

    АЙ как все хорошо ,,,, ммм ,,, просто волшебно ,,, я счастлив ,,, БЛАГОДАРЮ

  21. Akvaprint Almaty

    как исправить то? код 1:1

    1. Олег Молчанов

      Из тех, кто мне когда-либо писал, что у них код 1 в 1 — ни одного из них не было кода 1 в 1.

  22. kamol rahimov

    Что делать если одинаковые имена атрибутов ( классы/id и т.д), но данные хранящиеся в них разные ? Как достать информацию например с 5-того класса отдельного блока, которое имеет идентичное имя ( надеюсь Вы меня понимаете ) ?

    1. Dessan

      Что вас так веселит , парни? Человеку нужно объектное ориентирование понять. Если ему сложно это на питоне, то легче всего будет на примере CSS разобраться, согласен. Я написал про jquery — мне так веселей было и материала куча с примерами, поймёт сразу всё и с питоном потом легче будет.

    2. Капитальный Ремонт TV

      Ахах, убило просто :)))))

    3. Олег Молчанов

      боже мой… вы хоть сами понимаете, что вы пишите?
      Какое еще ООП? Какой jquery? Здесь о CSS-классах речь идет.

    4. Dessan

      id всегда уникален и можно прямо указывать номер класса, тебе ООП нужно, посмотри в jquery как всё это находится

    5. Просто Улыбка

      _выбери все и укажи порядковый номер_

  23. derekt

    спасибо за хороший урок !!

  24. No comment

    Олег, сделай пожалуйста, видео как использовать Scrapy. В особенности как парсить сайты, где данные подгружаются, и выглядят как таблицы- то есть данные в ячейках. Как я понимаю, там скрипты или джава-хз. Жду видео/можно даже видео часа на 2-3.
    Также не против, если будет видео как установить, подключить и использовать Mongodb для связки с Scrapy

    1. No comment

      Шо Вы такое говорите. Таки становится понятным молчание на комментарии

    2. степа негольцович

      почти три года прошло он уже умер люди столько не живут

  25. Astus Stiv

    Смотрю в 2020. Биткойн — 700 баксов всего. ААААААА. Эфир 8…

    1. Кирилл Лобашов

      @вадим вадимов видео 16 года, биткоин стоил 700 баксов

    2. вадим вадимов

      10 729,30 Доллар США

  26. Figaro

    И вот около тысячи лайков что тут поставлены, парсят этот несчастный сайт в 40 потоков… ох уж они вас вспоминат…

    1. Ivan Bednyakov

      Уже давно запили защиту 😉 так что не переживайте.
      1 поток и с делем в 5 секунд;)

  27. Malzeriy

    Биткоин 2к16 768$, Биткоин 2к19 10.000$

  28. IT KrasnodaR

    Олег, спасибо, очень все подробно и понятно рассказываешь, ставлю палец вверх, становлюсь подписчиком )))

  29. Tim Kaz

    Олег, замечательно видео!!! Но в данном случае мне нужно лишь одно значение с сайта это изменение за 24 часа по той или иной монете, и импортировать его в эксель через команду IMPORTXML!!! Никак не получается не могли вы помочь ???

    1. Tim Kaz

      все равно спасибо!! И первый пример работает все нормально!!!

    2. Олег Молчанов

      не могу вам помочь.
      Даже не уверен, что первый пример будет работать.
      xpath другой должен быть до цены

    3. Tim Kaz

      У меня есть Google таблица и у меня получилось слизать цену по монете с сайта через стандартную команду экселя IMPORTXML. Функция выглядит вот так =IMPORTXML( Теперь же я хочу слизать значение изменения цены за 24 часа

    4. Олег Молчанов

      Ну, опишите же вашу задачу подробно.
      Что вы пытаетесь сделать — понятно. Не понятно, где вы это пытаетесь сделать и какие инструменты вы для этого используете.

    5. Tim Kaz

      Сейчас вот так но не работает =IMPORTXML(

  30. Alan Jones

    print(index, end=. )
    write_csv(data)

  31. Yellowater

    А как парсить посредством python html файл, который скачан?

    1. Kindane

      file = open(название файла).read()
      soup = BeautifulSoup(file, html.parser)

  32. Борис Махлин

    Добрый день, уважаемый Олег! У меня появилась проблема в коде на 39:07 с Pool. Я сделал все как Вы сказали у меня создается на рабочем столе файл csv, но в Питоне не отображается процесс парсинга. Подскажите, пожалуйста, как это исправить. Вот мой код:
    # 1. Парсер однопоточный.
    # 2. Замер времени.
    # 3. multiprocessing Pool.
    # 4. Замер времени.
    # 5. Экспорт в csv.

    import requests
    from bs4 import BeautifulSoup
    import csv
    from datetime import datetime
    from multiprocessing import Pool

    def get_html(url):
    r = requests.get(url) #Response
    return r.text #возвращает HTML-код страницы

    def get_all_links(html):
    soup = BeautifulSoup(html, lxml)

    tds = soup.find(table, id=currencies-all).find_all(td, class_=currency-name)
    links = []

    for td in tds:
    a = td.find(a).get(href) #string
    link = + a #/currencies/bitcoin/
    links.append(link)
    return links
    def get_page_data(html):
    soup = BeautifulSoup(html, lxml)

    try:
    name = soup.find(h1, class_=text-large).text.strip()
    except:
    name =
    try:
    price = soup.find(span, id = quote_price).text.strip()
    except:
    price =
    data = {name: name,
    price: price}
    return data

    def write_csv(data):
    with open (coinmarketcap.csv, a)as f:
    writer = csv.writer(f)

    writer.writerow( (data[name],
    data[price]) )
    print(data[name],parsed)

    def make_all(url):
    html = get_html(url)
    data = get_page_data(html)
    write_csv(data)

    def main():
    #8 minutes
    start = datetime.now()

    url =

    all_links = get_all_links(get_html(url))

    #for index, url in enumerate(all_links):
    #html = get_html(url)
    #data = get_page_data(html)
    #write_csv(data)
    #print(index)

    #map(function, list)

    with Pool(8) as p:
    p.map(make_all, all_links)

    end = datetime.now()

    total = end — start
    print(str(total))

    if __name__ == __main__:
    main()

    1. Борис Махлин

      Олег Молчанов спасибо большое! Теперь работает. А почему в idle не работает? Но price все равно не работает, то есть вписывается только название

    2. Борис Махлин

      Олег Молчанов ок

    3. Олег Молчанов

      Запустите этот скрипт через консоль.

    4. Борис Махлин

      Олег Молчанов в python idle

    5. Олег Молчанов

      Ок, а как вы запускаете скрипт?

  33. Roman Kovalevsky

    Шикарно! Огромнейшая благодарность, особенно за то, как Вы подаете материал! Важные вещи и все всегда отлично работает.

    1. Олег Молчанов

      Спасибо, рад, что материал был вам полезен

  34. Dmitry Kalashnikov

    Олег, отличный урок! Очень интересно и как всегда детально, я больше и лучше стал понимать язык python именно на таких рабочих примерах. Правда в данном примере у меня возник странный трабл: сегодня на сайте на данный момент 2085 различных валют, после парсинга в таблицу записывается примерно подрят 49 а дальше через один и после 126 примерно вовсе пусто. Это банят так ? Или ошибка другого плана?

    1. Олег Молчанов

      Я не могу ничего определенного сказать

  35. Dolban 1337

    Ошибка выскакивает,
    Traceback (most recent call last):
    File crawler.py, line 49, in
    main()
    File crawler.py, line 37, in main
    all_links = get_all_links( get_html(url) )
    File crawler.py, line 20, in get_all_links
    soup = BeautifulSoup(html, lxml)
    File C:UserscrazyAppDataLocalProgramsPythonPython38-32libsite-packagesbs4__init__.py, line 225, in __init__
    raise FeatureNotFound(
    bs4.FeatureNotFound: Couldnt find a tree builder with the features you requested: lxml. Do you need to install a parser library?

    Что делать то?

    1. Kindane

      pip install lxml

    2. hitachiman

      @Dolban 1337 сам спросил, сам решил и сам себе ответил. Красава! 🙂

    3. Dolban 1337

      У кого такая же проблема, установить отдельно модуль lxml
      pip install lxml

  36. Дмитрий Свиридов

    Добрый день, Олег, спасибо за ваши труды. У вас отлично получается интересно преподносить материал.
    Подскажите пожалуйста, в чем может быть дело — не могу уже час уйти спать, ищу ошибку.
    Pycharm выдает мне
    пробовал с консоли вызывать — то же самое.
    Отладочные print() ставил в функции парсинга — информация выводится, стало быть ошибка именно в функции записи в CVS.
    Я в упор не вижу где я налажал, стоя в лыжах на асфальте.
    Функция записи в CSV
    Код целиком
    Буду очень вам признателен, если хоть намекнете в чем может быть загвоздка.

    1. Дмитрий Свиридов

      Спасибо большое! Нельзя все же учиться ночью, такая невнимательность…

    2. Олег Молчанов

      Дмитрий, все очень просто и буквально лежит на поверхности. Проверьте, пожалуйста, объект, который приходит на вход во write_csv()

  37. Азат Шарипов

    Спасибо тебе за видео!

  38. me2 beats

    450-й лайк мой
    попутно подписка)
    Все четко и понятно

  39. Yan Ketzer

    Олег, здравствуйте! Подскажите, чем отличается этот бесплатный курс от платного, выложенного Вами? Какие преимущества платного курса? Стоит ли сначала проходить этот цикл видео для поднятия, собственно, платного материала?

    1. Олег Молчанов

      у меня нет бесплатного курса.
      А в платном больше материала, чем здесь на Youtube

  40. Влад Финогеев

    Сайт немного обновили. Изменилось название и адрес основной страницы, на сайт поставили защиту от большого количества запросов. Но всё это можно исправить, посмотрев видео. Смог спарсить только 2-мя потоками с использованием time.sleep. Спасибо большое за видео!
    -так можно поменять первые две функции, если совсем ничего не ищется.

    1. Xopek YT

      @Ivan Bednyakov какая защита?

    2. Ivan Bednyakov

      Please turn JavaScript on and reload the page. ? -защита это ?

    3. Xopek YT

      сколько секунд ставил задержку по времени?

  41. Internet Texnology

    Огромная благодарность за пример. Я не знаю языка python, только Object pascal. Но данный пример помог понять общие принципы языка , создания функций и парсинга.

  42. yodapunishes

    после видосов по Scrapy я думал, что ещё полгода буду учиться, прежде чем напишу хоть какой-нибудь парсер. Не думал, что это так просто и быстро можно сделать. Спасибо!

  43. Артём Пригода

    ,биток стоил 768 баксов. ((

  44. OKO.TECHNOLOGY

    Очень интересно и полезно! Спасибо огромное!

  45. Илья Симонов

    Спасибо большое за видео! Очень полезно и все понятно разжевано !

  46. Leo S

    Отлично! Понятно все! Как раз для чайников!

  47. Тимофей Рыко

    Вопрос: как найти таблицу, у которой нету класса или id?( Почему-то, если просто указать как аргумент только table, не находится((

  48. Mr Falofer

    9:09 должно быть pip install bs4

    1. Mr Falofer

      @Олег Молчанов Я пишу bs4, мне норм 🙂

    2. Олег Молчанов
  49. Gregory Jenferd

    Олег, отличное видео. Но возникла 1 проблема: как вывести информацию в колонки, у меня, по неизвестной мне причине, заполняется все в 1 строку, хотя код идентичен Вашему. Чем это может быть вызвано?

    Вот код, что у меня получился:

    def write_csv(data):
    with open(freelance.ru.csv, a) as f:
    writer = csv.writer(f)

    writer.writerow( (data[title],
    data[price],
    data[about],
    data[url]) )

    data = {title : title,
    price : price,
    about : about,
    url : url}

    1. Gregory Jenferd

      Олег, спасибо Вам большое. Буду советовать всем друзьям Ваш канал)))

    2. Олег Молчанов

      это может быть связано и с операционной системой и с офисом и тем как он интерпретирует csv.

      Откройте csv в каком-нибудь редакторе кода или блокноте, если вы видите данные, указанные через запятую, то все нормально и проблема в Офисе и в Операционной системе.

      Решений два.

      1. Панель управления — Часы, язык и регион — Изменение форматов даты, времени и чисел — Дополнительные параметры — вкладка Числа пункт разделитель элементов списка
      У вас там стоит точка с запятой, скорее всего

      2. Открываете в Экселе новый файл — Данные — Импорт внешних данных — находите свой файл csv и кликаете кнопку Готово.
      Откроется мастер импорта на 2-м шаге вы снимаете галку с точки с запятой и ставите на запятую.
      На третьем шаге проверьте формат данных каждой колонки — лучше поставить для всех текст.

  50. Batu Karaev

    Однозначно подписка, спасибо, очень доступно

  51. illuminat Ing

    Здравствуйте, Олег! Спасибо вам за ваши уроки! Но как быть, если надо скачать картинки и сохранить их в соответствующую папку, путь к которой будет указан в колонке images, в файла csv ? Спасибо, буду благодарен!

  52. Konstantin Savich

    Топ фраза автора: Мы будем парсить этот несчастный сайт 40 процессами.

    1. yomuza

      Не понял. Это возможно или нет?

  53. Евгений Доронин

    Олег, добрый вечер! Спасибо за отличные уроки!

  54. Ken Ich

    Хотел бы поинтересоваться сможете ли рассказать как работать с сайтом при двухфакторке. Пока нашел для себя выход с использованием selenium. Но возможно имеются другие способы?

  55. HeyteR Школьников

    если у кого-то появились проблемы с парсингом, а именно в линкс не помещаются ссылки, то надо самому заходить в сайт, и искать классы, видео старое, поэтому на сайте может измениться всё, я сам порыскал id и class, короче внизу обновленный код:
    tds = soup.find(tbody).find_all(tr, class_ = cmc-table-row)

  56. Владимир Гуляев

    File , line 14
    for td is tds:
    ^
    SyntaxError: invalid syntax
    выскакивает ошибка…

    1. Лев

      Владимир Гуляев for td in tds:

  57. Просто Улыбка

    _Добрый вечер, Олег. Скажи, пожалуйста, как данные в excel под виндой записывать?_

    1. offline music

      название файла достаточно сделать с .xls в конце.

    2. Alex Neo

      Роман Белов библиотека pandas

    3. Просто Улыбка

      _я имел ввиду excel файл , а не csv_

    4. Олег Молчанов

      так же

  58. Андрей Гурин

    tds = soup.find(table, id=currencies-all).find_all(td, class_=currency-name) после этой строчки выдает ошибку, просто скопировал код NoneType object has no attribute find_all

    1. VLad Jasvki

      soup = BeautifulSoup(html, lxml)

      links = []
      for names in soup.findAll(div,class_=cmc-table__column-name sc-1kxikfi-0 eTVhdN):
      name = names.find(a).get(href)
      link = name
      links.append(link)
      return links

    2. Леша Корги

      Та же проблема(

  59. Akvaprint Almaty

    нифига не работает (( ошибка на return links стало быть не берет значения с сайта

    1. Олег Молчанов

      Вы хоть один туториал по Python прошли? Ну, хоть что-нибудь? Хоть какой-нибудь весь Python за 24 часа?

      Что вы сделали для того, чтобы выяснить что у вас не работает?
      (Как видите у меня на видео работает все.)

      Какие варианты решения проблемы вы уже проработали?

      Смотрели ли вы вот это видео?

  60. Дмитрий Котик

    Подскажи пожалуйста, у меня следующая проблема. На 20 минута , когда нужно получить список ссылок, у меня вываливается ошибка:
    tds = soup.find(table, id_=currencies-all).find_all(td, class_=currency-name)
    AttributeError: NoneType object has no attribute find_all
    Когда я убираю из метода find айдишник, то все работает. Правильно я понимаю, что если мы ищем по id, по в результате сразу получаем html а не объект soup?

    1. Олег Молчанов

      Хорошо, что вы разобрались.

      Просто отвечу на ваш вопрос.
      Вы всегда будете получать либо строки, либо объекты Супа (на самом деле это объекты Tag, просто сам класс BeautifulSoup — подкласс Tag).

      И html, как строку, вы не получаете.
      И критерий поиска не имеет значения, вы все равно получаете объект супа.

    2. Дмитрий Котик

      Все нормально, я накосячил в коде. Написал в методе find айдишник не правильно: не id, а id_ , как для класса. 🙂

  61. Dmitry Plyasovskikh

    Очень доходчиво. Учитывая, что у меня уровень знаний в питоне — Хелло ворлд, я смог во всем разобраться и перенастроить скрипт на текущее состояние страницы.

  62. Akvaprint Almaty

    скиньте исходник, хотя ну быть не может

    1. Олег Молчанов

      Это не рецепт — я НЕ показываю ЧТО делать, я показываю КАК делать. Это демонстрация принципа работы при парсинге данных. Все мои скринкасты направлены на понимание.
      Если вы не стараетесь понять КАК делать, то мои касты — не для вас.

  63. Просто Улыбка

    _Олег, добрый вечер. Можно ли в парсинге использовать многопоточность?_

    1. Просто Улыбка

      _есть ли разница между pool и thread?_

    2. Олег Молчанов

      Все-таки я не очень понял проблему. Чем не подходит мультипроцессинг?
      Из недостатков у него только расход оперативной памяти.

    3. Просто Улыбка

      _я хотел именно сбор данных. чтобы это быстрее как-то происходило._

    4. Олег Молчанов

      для этого не обязательно делать многопоточное приложение.
      В вашей задаче сбор данных и их разбор — это последовательные процессы.

      Или вы имеете в виду асинхронность?
      Если вы имеете в виду асинхронность, то requests так работать не может

    5. Просто Улыбка

      Олег Молчанов, я не совсем понимаю как это сделать. сначала ф-ция собирает все данные в один список, а дальше это список другая ф-ция через многопоточность разбирает в несколько процессов? можете сделать видео на эту тему?

  64. Константин Саженов

    а как же asyncio?)

    1. Олег Молчанов

      в целом по асинхронности

    2. Константин Саженов

      Вы про библиотеку или про асинхронный код?
      Если про асинхронный, то жду недождусь. Начал изучать ascynio+aiohttp, очень понравилось.

    3. Олег Молчанов

      По concurrency в целом я планировал делать отдельную серию.
      А этот ролик — это просто быстрый ответ на заданный мне вопрос.

  65. Леша Корги

    Если я правильно понимаю, сейчас структура сайта изменилась и строка tds = soup.find(table, id=currencies-all).find_all(td, class_=currency-name) уже не актуальна. Но я никак не могу понять, как будет верно 🙁 Подскажите, пожалуйста!

    1. VLad Jasvki

      @A F [email protected]
      напиши сюда, дальше уже посмотрим, может проблема простенькая

    2. A F

      @VLad Jasvki можно тебе написать куда-нибудь? не могу разобраться никак. Ошибок в программе нет, но ничего не выводит

    3. Алексей Анохин

      @VLad Jasvki Благодарю !
      Bitcoin (BTC) parsed
      Ethereum (ETH) parsed
      Tether (USDT) parsed
      Please turn JavaScript on and reload the page. parsed
      Вот такое теперь 🙂

    4. VLad Jasvki

      @Алексей Анохин
      soup = BeautifulSoup(html, lxml)
      try:
      namess = soup.find(h1).text.strip()
      except:
      namess = none
      try:
      price = soup.find(span,class_=cmc-details-panel-price__price).text.strip()
      except:
      price = 0
      data = {name:namess,price:price}
      return data

    5. Алексей Анохин

      @VLad Jasvki Дальше опять застопорился, там внутри ссылки div с h1 и span с названием монеты без класса и отдельный div с ценой и двумя span с классами (цена, валюта). Как перебрать это все и засунуть в словарь ? ПОдскажи пожалуйста, чтото сам попробовали не хватает знаний 🙂

  66. Al. V.

    спасибо, все понятно

  67. HQ IER

    почему при попытке найти класс, find выдает None, хотя класс находится в html? Может кто объяснить

    1. Lime Lione

      Сделайте условие чтобы в список не попадал None. У меня тоже через раз выводился None.

  68. Ilya

    Олег, здравствуйте.
    Появилось пару вопросов, а именно:
    1) как при мультипроцесинговом парсинге избежать блокировки.
    (Как я понимаю, что-то с проксями…). Можно этот момент как-то прояснить.
    2) У Вас уроков по парсингу нет??
    P.s. спасибо за отличное видео, оч. полезно.👍👍👍

    1. Олег Молчанов

      1. Да, с проксями. Об этом есть видео.
      2. Уроков по парсингу пока нет.

  69. NIk Melnik

    добрый день. Очень полезное видео. Но у меня возникла проблема в коде — пишет — —————————————————————————
    AttributeError Traceback (most recent call last)
    in
    26
    27 if __name__ == __main__:
    —> 28 main()
    29

    in main()
    19 url = (
    20
    —> 21 all_links = get_all_links( get_html(url) )
    22
    23 for i in all_links:

    in get_all_links(html)
    6 soup = BeautifulSoup(html,lxml)
    7
    —-> 8 tds = soup.find(table, id=currencies-all).find_all(td, class_=currency-name)
    9
    10 links = []

    AttributeError: NoneType object has no attribute find_all
    …………………
    сам код —

    def get_html(url):
    r = requests.get(url) # Response
    return r.text # Возвращает html код страницы

    def get_all_links(html):
    soup = BeautifulSoup(html,lxml)

    tds = soup.find(table, id=currencies-all).find_all(td, class_=currency-name)

    links = []

    for td in tds:
    a = td.find(a).get(href) # string
    links.append(a)

    return links

    def main():
    url =

    all_links = get_all_links( get_html(url) )

    for i in all_links:
    print (i)

    if __name__ == __main__:
    main()

    …..
    в чем ошибка?? не могу разобраться

    1. RAMESSES THE GREAT

      @Олег Молчанов Добрый день, Олег. Я ответил на комментарий человека, который скопипастил свой код и спросил, почему у него он не компилируется. Я ему задал встречный вопрос, почему у него не объявлены библиотеки в его коде.

    2. Олег Молчанов

      не понял вопрос.
      Если вы пишите комментарии отвечая на чей-то, то я его просто не вижу.

    3. RAMESSES THE GREAT

      а почему в коде нет объявления библиотек?

    4. Олег Молчанов

      есть видео о том, как читать traceback.

  70. Vitaly Kholodov

    Небольшая идея для монетизации Вашего труда: заливайте проекты на bitbucker и сделайте продажу инвайтов в проект (микромагазин с онлайн оплатой), что означает доступ к исходному коду, либо просто питоновский файл с кодом продавать, если проект небольшой. Я когда-то проходил этот урок, но исходников у меня не осталось, сейчас мне нужно потратить время, просмотреть все видео, найти нужные мне моменты, делать паузы, чтобы вникнуть в код. Короче гемморой и куча времени. Был бы у меня исходник, я бы быстро просмотрел его, просмотрел видео в нужных местах и начал бы внедрять в свой проект. А если у Вас будут целые курсы, по Django, например и т.д. где подразумевается более или менее большие проекты, так это вообще необходимость!

    1. Олег Молчанов

      Спасибо за совет.
      Думаю, что я сделаю такое

  71. Dimaxi

    From bs4 import BeatifulSoup
    ImportError: cannot import name BeatifulSoup from bs4 (C:UsersDimaxiAppDataLocalProgramsPythonPython37libsite-packagesbs4__init__.py)
    Делал всё что написано в документации, не помогает

    1. Андрей Городний

      у вас ошибка в слове BeaUtiful, пропущена буква u

  72. Leonid Petrovskiy

    Подскажите, плиз, начинающему программисту. Я так понял, что мы создаем файл csv с парсинг датой. Где его найти или как потом использовать эту дату?

    1. Xopek YT

      Ищи в папке с проектом

    2. Олег Молчанов

      Что найти, простите?

  73. Dmitry S.

    Лайк и безумное уважение за объяснение (26:57) подобных вещей!
    Серьезно, мелочь но очень очень полезно для новичка и показывает уважение автора канала к его зрителям. Мало кто даже сейчас так делает… и это печально.

  74. Леонид Зайцев

    правильнее написать в строке 13 # pip install beautifulsoup4

    1. Олег Молчанов

      да, верно. Опечатка.

  75. Sem

    Как сделать, чтобы была пауза в процессах? Получается, что сразу к сайту 40 запросов и сайт блокирует их, и парсит не все страницы.

    1. Dev App

      @Ken Ich А ты автор данного видео? Если нет, то к чему твой высер? Создай свой канал и пиши там всякую дичь

    2. Олег Молчанов

      да, если через прокси

    3. Диванный Эксперд

      @Олег Молчанов много процессов используют, потому что можно КАЖДЫЙ процесс запускать через новый прокси

    4. Sem

      @Олег Молчанов Спасибо огромное!

    5. Олег Молчанов

      да, нужно использовать прокси.

  76. Nameless

    Думаю в функции get_all_links лучше было бы использовать генератор списка вместо цикла

  77. Denzel Koshuba

    Вы все конечно молодцы. Но я пока что не встречал человека, который объяснял бы решение вопроса с позиции того, кто только пытается что-то понять. Все объясняют с позиции, как будто вокруг все уже в курсе почти всего, о чём идёт речь.
    Почитайте очень хорошую книгу. Исскуство объяснять. Очень хорошая и полезная книга. Я по ней своего ребёнка учу жизни.

    1. Алекс Д

      @Denzel Koshuba а вы попробуйте объяснить ребенку как решать дифференциальные уравнения, а не откуда берется дождь. Это примерно тоже самое. Хотели без основ решить задачу уровнем повыше вот вам и результат. Если опускаться в уроке до разбора элементарного синтаксиса, на это уйдет несколько часов и появятся другие недовольные. Объяснение вполне адекватное, сравните с другими горе учителями в сети

    2. Игорь Микитюк

      @Denzel Koshuba Ваше желание понятно, но к сожалению не возможно взять и в один момент все понять это приходит только с опытом и практикой. А объяснять это придется очень долго, даже если очень стараться.

    3. Denzel Koshuba

      @Виталий Горбачёв, если я изучу всё то, что Вы перечислили, то в просмотре видео Олега у меня не будет необходимости))). В данной ситуации, я нашёл это видео, чтобы решить конкретную задачу, без получения знаний. Был готов полностью повторить все действия. Пошагово. Есть хорошая поговорка:
      *Расскажи мне как это делать — я ничего не пойму.
      Покажи как это делать — мне станет понятно о чём речь.
      Давай сделаем это вместе — следующий раз я сделаю это сам.*
      Но как и в предыдущих видео по этой теме, я в определенный момент столкнулся с вопросом, который автор считает не важным. Настолько, что даже внимание на это не обращает. А для меня и таких как я — это СТОП. Дальше нет смысла смотреть, потому что необходимо искать ответ на вопрос, которому автор видео не уделил внимание. И поплыл дальше в глубину интернета и Ютуба))).
      Я не зря написал про книгу Исскуство объяснять. Всё, что вы знаете и хотите кому-то объяснить необходимо привести в такой вид, чтобы это поняли как можно больше людей. С разными уровнями знания. Тогда вас ждёт успех.
      P.S. на вопрос ребёнка откуда берётся дождь, можно ответить по разному. И про конденсат и о разном состоянии воды и т.д. Но он не поймёт))) А если привести пример с чайником из которого идёт пар и поднимается вверх, а после капельками падает вниз. То поймёте не только ребёнок, но и все кому и первый вариант объяснения не подходит, в силу наличия знаний.

    4. Виталий Горбачёв

      Олег прекрасно объясняет. Что бы понять о чём речь, желательно перед просмотром его уроков потратить годик-другой на изучение основ программирования, стека веб программирования и много всего попутного необходимого материала. И это вы только приоткроете завесу огромного пласта необходимых знаний, но Вам станет хотя бы понятно о чём рассказывает Олег.

  78. Просто Улыбка

    _Добрый день, Олег. Вы когда-нибудь делали парсеры для 2гис?_

  79. Дмитрий Котик

    Подскажи пожалуйста, у меня следующая проблема. На 20 минута , когда нужно получить список ссылок, у емня вываливается ошибка:

    tds = soup.find(table, id_=currencies-all).find_all(td, class_=currency-name)
    AttributeError: NoneType object has no attribute find_all

    Когда я убираю из метода find айдишник, то все работает. Правильно я понимаю, что если мы ищем по id, по в результате сразу получаем html а не объект soup?

  80. man 123

    Графики как парсить

  81. Shogun7sk

    оперативку мы видели 42,5МБ, что с CPU и LAN?

  82. offline music

    Все делал как показано, выходит 2 ошибки:
    Traceback (most recent call last):
    File C:/Users/user/.PyCharm2018.2/config/scratches/scratch_3.py, line 60, in
    main()
    File C:/Users/user/.PyCharm2018.2/config/scratches/scratch_3.py, line 48, in main
    for index, url in enumerate(all_links):
    TypeError: NoneType object is not iterable

    1. Дастан Алымбеков

      Вам надо посмотреть в инспекторе этот класс скорее всего там что то изменили

    2. Олег Молчанов

      Никогда не понимал и не понимаю зачем люди пишут вот это: Все делал как показано…
      У вас NoneType вылетел, а это значит, что объект пустой. Нет там ничего.

  83. Борис Аверьянов

    Олег здравствуйте.
    А подскажите по количеству процессов. В уроке вы используете 40 процессов. А вообще от чего зависит количество процессов? Например на 2х или 4х ядерном процессоре, как подобрать количество процессов ? Если я сделаю например не 40, а 100 или 500 процессов, но у меня 2х ядерный процессор и допустим нет ограничения в ОЗУ. Они же не будут все выполнятся одновременно.
    Может где то можно про это почитать в русскоязычной литературе? А то языком вероятного противника пока владею слабо.

    1. Юрий Логунов

      Я пробывал на своем компьюторе разбивать на процессы функцией Pool.1 процесс длился 1 сек, всего процессов было от 1500 до 3000(это предполагаемый объем строк, который я хотел парсить). Быстрее всего парсер работал от 60 до 120 процессов( для конкретной задачи получается разное оптимальное количество процессов). Когда ставил 1000 процессов, компьютер зависал. 1 процесс занимал 5Мб оперативной памяти.

    2. Олег Молчанов

      Добрый день, Борис

      Я это количество просто выдумал. Подумалось, что так разница во времени будет нагляднее.

      Ограничение в памяти все-таки есть. Насколько я помню 40 процессов отъели около 1,5 ОЗУ. Мне кажется, что это много.

      Они стартуют по-очереди, но при длительной работе эта разница во времени старта сглаживается. Выполняются они, можно сказать, одновременно.

      Нагрузка на процессор тоже возрастает, поскольку этим процессам приходится делить между собой процессорное время.

      Где об этом почитать — не могу вам сказать.

  84. Просто Улыбка

    Добрый вечер, Олег. А можете объяснить почему не делаете так:
    from urllib.request import urlopen
    from bs4 import BeautifulSoup
    html = urlopen(some url)
    soup = BeautifulSoup(html, lxml)
    print(soup.h1)
    ?

    1. mr.Igorr

      Большое спасибо за отличные видеоуроки. Доступно и всё понятно. Хотел уточнить — планируются скринкасты для неначинающих? Было бы интересно посмотреть как те или иные конструкции и методы заменяются другими. Как, например, в примере, написанном выше. Или рассмотреть более сложные парсеры.

    2. Олег Молчанов

      да, только из-за ORM. Если вам нужно только лишь подключиться к бд, то pymysqldb вполне подойдет для ваших задач.

    3. Просто Улыбка

      вы мне посоветовали те библиотеки только из-за orm? для меня важна только возможность подключиться к бд, а написать запрос — дело плевое

    4. Олег Молчанов

      а то и значит. Python не знает SQL, а SQL не знает Python. Чтобы им вместе работать нужно нечто, что понимает и то и другое. Этим нечтом является драйвер базы данных — он посылает запросы и принимает ответы. Больше он ничего не делает.

      Запрос к базе вы формулируете не при помощи драйвера.

    5. Просто Улыбка

      что значит только связь? запросы там можно делать ведь

  85. Dessan

    чтоб это всё работало нужно ещё lxml библиотеку иметь pip install lxml

  86. Max Im

    А чего таким унылым тоном?

  87. Юрий Горшков

    на фоне слышны танцы с бубнами…

  88. Denis Ivanov

    что-то не пойму, а что вот этот кусок кода делает?
    if _name_ == _main_ :
    main()

    Traceback (most recent call last):
    if _name_ == _main_ :
    NameError: name _name_ is not defined — ошибка….

    1. Denis Ivanov

      да, уже нашел, все работает, спасибо. Очень интересные видео!

    2. Олег Молчанов

      я этого не писал.
      Есть отдельное видео на эту тему — посмотрите в плейлисте Python casts

  89. Александр Неизвестный

    Добрый день. скинь будь добр скрипт парсинга через прокси https. Или лучше скрипт какого то парсинга сайта с прокси https, как мануал будет.

    1. Олег Молчанов

      скрипт для работы с https отличается всего на одну букву s
      Следите чтобы протокол прокси совпадал с протоколом проксируемого сайта.
      Прокси не может установить защищенное соединение с сайтом, который его не поддерживает и наоборот

  90. Роман -

    НЕРЕАЛЬНО ОБАЛДЕННОЕ ВИДЕО! ОЛЕГ, ОГРОМНОЕ СПАСИБО! ВСЕ ЧТО Я НАМАТЫВАЛ НА УС ДО ПРОСМОТРА ЭТОГО РОЛИКА ПРОСТО РАЗЬЯСНИЛОСЬ, ПРИЯТНО СЛУШАТЬ ГРАМОТНОГО И ЗНАЮЩЕГО СВОЕ ДЕЛО ЧЕЛОВЕКА!

  91. yomuza

    У меня такая задача. Есть сайт на котором несколько нужных мне тв-каналов. Нужно извлекать каждый день их видеопотоки и вставлять в плейлист IPTV. Делать это вручную утомительно т.к. спустя 2 часа надо повторять процесс заново (такова живучесть ссылок). Можно ли написать батник-файл который будет выполнять эту задачу вместо меня (и вставлять в плейлист)?

    1. man 123

      K

  92. Илья Ребрёв

    Вот проблема: Traceback (most recent call last):
    File C:UsersИльяDesktopпарсерpython.py, line 5, in
    from bs4 import BeatifulSoup
    ImportError: cannot import name BeatifulSoup from bs4 (C:UsersИльяAppDataLocalProgramsPythonPython37-32libsite-packagesbs4__init__.py)

    1. Олег Молчанов

      во-первых, BeatifulSoup — вот это нужно исправить везде по коду.
      во-вторых, что вы будете делать, когда произойдет очередная ошибка. Вы, в конце концов, программист или домохозяйка?

    2. Илья Ребрёв

      Исправил, теперь другая проблема —
      Олег Молчанов

    3. Олег Молчанов

      у вас опечатка в этой фразе:
      from bs4 import BeatifulSoup

    4. Илья Ребрёв

      Так поможете@Олег Молчанов

    5. Илья Ребрёв

      Alias to make it easier to type import: from bs4 import _soup из _init_.py

  93. Sergey bzzz

    надо писать <> pip install beautifulsoup4

  94. Vladimir Nickitine

    Добрый день, Олег. Спасибо за интересные и познавательные видео. Подскажите, что может быть не так с кодом из этого видео (вроде бы соответствует Вашему символ в символ):
    После запуска секунд через 20 краш питона. Ошибок не выдает никаких, просто краш.
    upd. На другой машине все работает нормально. Поможет ли переустановка питона?

  95. Егор Смирнов

    Хорошая подборка видео,да с криптой надо поковыряться,сменилась верстка и появилась защита,посмотрев все видео автора про парсинг(опытпрограммирования три мес)-скрестил проги из этого видео и урока с проксями, задержкой и юзерагентами- если в один поток 2370 пунктов парсит примерно за 3ч 20м, если поставить пул 100 то за 1ч 30(оперативки мало-на один процесс уходит 12мб).Не знаю быстро это или нет,но все работает за что автору большое спасибо, оформлю платную подписку)

    1. Даня МикСель

      Егор Смирнов братан можешь ссылку дать на соц сеть или как с тобой связаться ?(вопрос с проксями)

  96. Ilya Tyurin

    Спасибо огромное! Всё очень понятно! Лайк однозначно!!

  97. MusicWithoutCopyright

    Огромное спасибо. Не понял только почему у меня в этой табличке нет значений? Или всего несколько названий и все? Код в точности такой же, также сверялся с сайтом -ничего не поменялось. В чем может быть проблема?

    1. Олег Молчанов

      не факт, что у него такая же проблема.

    2. Nico NN

      У меня такая же хрень. До 37-40 нормально, а потом пустые значения… Банят значит))

    3. Олег Молчанов

      проблема в том, что вы где-то ошиблись.

  98. Sergey Kuznetsov

    Здравствуйте, подскажите можете объяснить условие с if. Что таке __name__?

    1. Sergey Kuznetsov

      @Bakhtiyar Khozha спасибо

    2. Bakhtiyar Khozha
  99. Webman

    Интересно все, ну вот голос (подача) спать тянет капец. А так, спасибо Вам за урок

  100. Александр Садовский

    а JSON API применять, не?

    1. Ivan Gulyaev

      У CMC бесплатная версия ограничен, да и сам кейс с мультипоточным парсером интересен

Comments are closed.