|
|
||||||
Почему цикл обрывается? Парсер на Selenium08.02.2019, 18:59. Показов 4258. Ответов 19
Парсю страничку селениуом
https://www.oddsportal.com/events/ Пытаюсь вытащить ссылки из меню таблицы. Те, которые, видны - вытащил без труда. Но вот дошла до выпадающего списка, столкнулся с непонятной проблемой. Начинаю вытаскивать из него url с помощью наведений и нажатий, но как только получаю ссылку на Futsal, наведение тут же прекращается и соответственно не могу получить оставшиеся ссылки. Пробую без кликов - просто зайти в цикл и вывести какую-то информацию - в цикл заходит, отрабатывает нормально. Значит, что-то с кликами, либо с наведением на этот список.
0
|
||||||
| 08.02.2019, 18:59 | |
|
Ответы с готовыми решениями:
19
Цикл обрывается, почему? Цикл обрывается и начинает сначала Selenium парсер chromedriver |
|
|
|
| 08.02.2019, 19:26 [ТС] | |
|
IRIP, это да, но с js вы так не поработаете
или как-то можно вытащить эти ссылки с помощью bs?
0
|
|
|
|
||||||
| 08.02.2019, 20:56 [ТС] | ||||||
|
IRIP, мне сейчас просто url из меню таблицы (ссылки на виды спорта) нужны, а не данные.
до json потом дойду) "Видимые" ссылки я вытащил легко. Но дело в том, что ещё часть ссылок спрятана в выпадающем списке, который раскрывается при наведении на него. Вот из этого-то списка я когда вытаскиваю url, когда дохожу до "Cricket" главный цикл просто перестаёт заходить во встроенный цикл (как-будто "a" не равно "a_more.text"). Такое происходит только, если кликать по ссылкам... Если же просто вытаскивать названия этих пунктов (без кликов), то всё работает ровно.
Как вариант, можно, конечно, втупую захардкодить (благо видов спорта не так уж много), но как-то мне не нравится этот вариант, ведь придётся проверять, не изменился ли список...
0
|
||||||
|
|
|
| 09.02.2019, 00:14 [ТС] | |
|
IRIP, эти
0
|
|
|
|
|
| 09.02.2019, 02:54 [ТС] | |
|
IRIP, да, я знаю, но мне вложенные не нужны. только главные пункты)
Добавлено через 7 минут IRIP, я тут, кстати, заметил закономерность. ссылка формируется в виде https://www.oddsportal.com/events/#sport/ + <вид спорта (с маленькой буквы)> + /all стоит учитывать, что если в названии вида спорта 2 и более слов, то пробел заменяется символом "-". если я правильно помню, то bs4 видит эти названия, значит, по сути, тут можно и без селениума обойтись. только нужно подумать, как там вытащить названия эти и сделать определённые замены символов. вы в этом должны уже разбираться, как никто другой) Добавлено через 26 минут Именно так и решил. Наверное, это не самый приемлемый результат. Ведь вдруг, пробелы станут заменять каким-то другим символом, или ещё чего. Конечно, там программно, скорее всего генерятся ссылки, но всё же...
0
|
|
|
|
|
| 09.02.2019, 03:03 | |
|
m0nte-cr1st0, нужны эти?
Кликните здесь для просмотра всего текста
зачем? что дальше с ними делать?
0
|
|
|
|
|
| 09.02.2019, 03:08 [ТС] | |
|
IRIP, да. затем на каждой из этих страниц есть список лиг.
то есть вытаскиваешь линки на виды спортов, загоняешь их в список. затем в цикле вытаскиваешь все лиги для каждого вида спорта. затем в цикле для каждой из лиг вытаскиваешь все события. и только потом в цикле парсишь событие. ну я пока до этого алгоритма пришёл. может, есть получше варианты. если интересно, могу более детально в лс рассказать.
0
|
|
|
|
|
| 09.02.2019, 03:13 | |
|
m0nte-cr1st0,
Кликните здесь для просмотра всего текста
>>> from bs4 import BeautifulSoup >>> import requests >>> url = 'https://www.oddsportal.com' >>> r = requests.get(url) >>> r <Response [404]> >>> user_agent = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36'} >>> r = requests.get(url, headers=user_agent) r>>> r <Response [200]> >>> soup = BeautifulSoup(r.text, 'lxml') >>> html = soup.find_all('div', class_='sport_name') >>> print(len(html)) 21 >>> Добавлено через 50 секунд 21 ссылка получена. дальше получить их, вообще не проблема что делать с ссылками?
0
|
|
|
|
|
| 09.02.2019, 03:18 [ТС] | |
|
IRIP, дальше, в принципе, нужно прогнать каждую ссылку через цикл, чтобы получить ссылки на все лиги, для каждого вида спорта. ссылки на страны получать не нужно.
это я уже реализовал, в принципе. и ссылки из каждой лиги на все матчи вытащил. если интересно, можете попробовать и показать ваш. думаю, у вас он "почище" будет..) по сути, мне осталось только собрать всё это вкучу и начать парсить данные для каждого матча
0
|
|
|
|
|
| 09.02.2019, 03:24 | |
Сообщение было отмечено m0nte-cr1st0 как решение
Решение
m0nte-cr1st0,
вроде вытащили первый уровень теперь тянем второй, например, для https://www.oddsportal.com/soccer/ >>> from bs4 import BeautifulSoup as bsp >>> import requests >>> >>> url = 'https://www.oddsportal.com/soccer/' >>> user_agent = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36'} >>> r = requests.get(url, headers=user_agent) >>> soup = bsp(r.text, 'lxml') >>> html = bsp.find('div', class_='box') >>> for link in html.find_all('a', href=True): ... a = link['href'] ... print(a) и вот они, долгожданные все ссылочки =) Добавлено через 1 минуту Кликните здесь для просмотра всего текста
/soccer/ /soccer/england/premier-league /soccer/europe/champions-league /soccer/europe/europa-league /soccer/europe/euro-2020 /soccer/france/ligue-1 /soccer/germany/bundesliga /soccer/italy/serie-a /soccer/spain/laliga /soccer/africa/ /soccer/africa/africa-cup-of-nations-u20 /soccer/algeria/ /soccer/algeria/ligue-1 /soccer/algeria/ligue-2 /soccer/argentina/ /soccer/argentina/superliga /soccer/argentina/primera-b-nacional /soccer/argentina/primera-b-metropolitana /soccer/argentina/primera-c-metropolitana /soccer/argentina/primera-d-metropolitana /soccer/argentina/torneo-federal-a /soccer/australia/ /soccer/australia/a-league /soccer/australia/npl-queensland /soccer/australia/w-league /soccer/austria/ /soccer/austria/tipico-bundesliga /soccer/austria/2-liga /soccer/austria/ofb-cup /soccer/azerbaijan/ /soccer/azerbaijan/premier-league /soccer/bangladesh/ /soccer/bangladesh/premier-league /soccer/belgium/ /soccer/belgium/jupiler-league /soccer/belgium/proximus-league /soccer/belgium/first-amateur-division /soccer/belgium/second-amateur-division-group-acff-2018-2019 /soccer/belgium/second-amateur-division-group-vfv-a /soccer/belgium/second-amateur-division-group-vfv-b /soccer/belgium/belgian-cup /soccer/belgium/1st-national-women /soccer/brazil/ /soccer/brazil/campeonato-alagoano-2019 /soccer/brazil/campeonato-baiano /soccer/brazil/campeonato-brasiliense /soccer/brazil/campeonato-carioca /soccer/brazil/campeonato-catarinense /soccer/brazil/campeonato-gaucho /soccer/brazil/campeonato-goiano /soccer/brazil/campeonato-matogrossense /soccer/brazil/campeonato-mineiro /soccer/brazil/campeonato-paraense /soccer/brazil/campeonato-paulista /soccer/brazil/campeonato-sergipano-2019 /soccer/brazil/campeonato-paraibano-2019 /soccer/brazil/campeonato-maranhense /soccer/brazil/copa-do-nordeste /soccer/bulgaria/ /soccer/bulgaria/parva-liga /soccer/colombia/ /soccer/colombia/liga-aguila /soccer/colombia/torneo-aguila /soccer/croatia/ /soccer/croatia/1-hnl /soccer/cyprus/ /soccer/cyprus/first-division /soccer/cyprus/division-2 /soccer/czech-republic/ /soccer/czech-republic/1-liga /soccer/czech-republic/division-2 /soccer/czech-republic/mol-cup /soccer/denmark/ /soccer/denmark/superliga /soccer/denmark/landspokal-cup /soccer/ecuador/ /soccer/ecuador/liga-pro /soccer/egypt/ /soccer/egypt/premier-league /soccer/el-salvador/ /soccer/el-salvador/primera-division /soccer/england/ /soccer/england/premier-league /soccer/england/championship /soccer/england/league-one /soccer/england/league-two /soccer/england/national-league /soccer/england/national-league-north /soccer/england/national-league-south /soccer/england/npl-premier-division /soccer/england/southern-league-central-division /soccer/england/southern-league-south-division /soccer/england/isthmian-league-premier-division /soccer/england/efl-cup /soccer/england/efl-trophy /soccer/england/fa-cup /soccer/england/premier-league-u18 /soccer/europe/ /soccer/europe/euro-2020 /soccer/europe/uefa-nations-league /soccer/europe/champions-league /soccer/europe/europa-league /soccer/finland/ /soccer/finland/veikkausliiga /soccer/finland/suomen-cup /soccer/france/ /soccer/france/ligue-1 /soccer/france/ligue-2 /soccer/france/national /soccer/france/national-2-group-b /soccer/france/national-2-group-d /soccer/france/coupe-de-la-ligue /soccer/france/coupe-de-france /soccer/france/coupe-de-france-women /soccer/gambia/ /soccer/gambia/gfa-league /soccer/germany/ /soccer/germany/bundesliga /soccer/germany/2-bundesliga /soccer/germany/3-liga /soccer/germany/oberliga-hamburg /soccer/germany/oberliga-rheinland-pfalz-saar /soccer/germany/junioren-bundesliga-north /soccer/germany/junioren-bundesliga-south /soccer/germany/junioren-bundesliga-west /soccer/gibraltar/ /soccer/gibraltar/gibraltar-cup /soccer/greece/ /soccer/greece/super-league /soccer/greece/football-league /soccer/greece/division-c /soccer/guatemala/ /soccer/guatemala/liga-nacional /soccer/hungary/ /soccer/hungary/otp-bank-liga /soccer/iceland/ /soccer/iceland/league-cup /soccer/india/ /soccer/india/isl /soccer/india/i-league /soccer/ireland/ /soccer/ireland/super-cup /soccer/israel/ /soccer/israel/ligat-ha-al /soccer/israel/leumit-league /soccer/italy/ /soccer/italy/serie-a /soccer/italy/serie-b /soccer/italy/serie-c-group-a /soccer/italy/serie-c-group-b /soccer/italy/serie-c-group-c /soccer/italy/serie-d-group-a /soccer/italy/serie-d-group-b /soccer/italy/serie-d-group-c /soccer/italy/serie-d-group-d /soccer/italy/serie-d-group-e /soccer/italy/serie-d-group-f /soccer/italy/serie-d-group-g /soccer/italy/serie-d-group-h /soccer/italy/serie-d-group-i /soccer/italy/coppa-italia /soccer/italy/primavera-1-2018-2019 /soccer/italy/primavera-2-2018-2019 /soccer/italy/serie-a-women /soccer/jordan/ /soccer/jordan/premier-league /soccer/kenya/ /soccer/kenya/premier-league /soccer/kosovo/ /soccer/kosovo/kosovar-cup /soccer/kuwait/ /soccer/kuwait/premier-league /soccer/lebanon/ /soccer/lebanon/premier-league /soccer/malaysia/ /soccer/malaysia/super-league /soccer/malaysia/premier-league /soccer/malta/ /soccer/malta/premier-league /soccer/mauritania/ /soccer/mauritania/super-d1 /soccer/mexico/ /soccer/mexico/primera-division /soccer/mexico/liga-de-ascenso /soccer/mexico/copa-mexico /soccer/mexico/liga-mx-women-2018-2019 /soccer/morocco/ /soccer/morocco/botola-pro /soccer/morocco/botola-2 /soccer/netherlands/ /soccer/netherlands/eredivisie /soccer/netherlands/eerste-divisie /soccer/netherlands/tweede-divisie-2018-2019 /soccer/netherlands/knvb-beker /soccer/new-zealand/ /soccer/new-zealand/football-championship /soccer/nicaragua/ /soccer/nicaragua/primera-division /soccer/northern-ireland/ /soccer/northern-ireland/nifl-premiership /soccer/northern-ireland/irish-cup /soccer/northern-ireland/nifl-championship /soccer/norway/ /soccer/norway/eliteserien /soccer/norway/obos-ligaen /soccer/panama/ /soccer/panama/lpf-2018-2019 /soccer/paraguay/ /soccer/paraguay/primera-division /soccer/poland/ /soccer/poland/ekstraklasa /soccer/poland/division-1 /soccer/poland/division-2 /soccer/poland/polish-cup /soccer/portugal/ /soccer/portugal/primeira-liga /soccer/portugal/segunda-liga /soccer/portugal/liga-revelacao-u23-2018-2019 /soccer/portugal/taca-de-portugal /soccer/romania/ /soccer/romania/liga-1 /soccer/romania/liga-2 /soccer/romania/romanian-cup /soccer/russia/ /soccer/russia/premier-league /soccer/russia/fnl /soccer/russia/russian-cup /soccer/russia/fnl-cup /soccer/saudi-arabia/ /soccer/saudi-arabia/saudi-professional-league /soccer/scotland/ /soccer/scotland/premiership /soccer/scotland/championship /soccer/scotland/league-one /soccer/scotland/league-two /soccer/scotland/fa-cup /soccer/slovakia/ /soccer/slovakia/fortuna-liga /soccer/slovakia/slovak-cup /soccer/south-africa/ /soccer/south-africa/premier-league /soccer/south-africa/first-division /soccer/south-africa/nedbank-cup /soccer/south-america/ /soccer/south-america/copa-america /soccer/south-america/copa-libertadores /soccer/south-america/south-american-championship-u20 /soccer/spain/ /soccer/spain/laliga /soccer/spain/laliga2 /soccer/spain/segunda-division-b-group-1 /soccer/spain/segunda-division-b-group-2 /soccer/spain/segunda-division-b-group-3 /soccer/spain/segunda-division-b-group-4 /soccer/spain/tercera-division-group-1 /soccer/spain/tercera-division-group-3 /soccer/spain/tercera-division-group-4 /soccer/spain/tercera-division-group-5 /soccer/spain/tercera-division-group-6 /soccer/spain/tercera-division-group-8 /soccer/spain/tercera-division-group-10 /soccer/spain/tercera-division-group-11 /soccer/spain/tercera-division-group-12 /soccer/spain/tercera-division-group-13 /soccer/spain/tercera-division-group-14 /soccer/spain/tercera-division-group-15 /soccer/spain/tercera-division-group-16 /soccer/spain/tercera-division-group-17 /soccer/spain/tercera-division-group-18 /soccer/spain/copa-del-rey /soccer/spain/primera-division-women /soccer/sri-lanka/ /soccer/sri-lanka/champions-league-2018-2019 /soccer/sweden/ /soccer/sweden/allsvenskan /soccer/sweden/svenska-cupen /soccer/sweden/svenska-cupen-women /soccer/switzerland/ /soccer/switzerland/super-league /soccer/switzerland/challenge-league /soccer/syria/ /soccer/syria/premier-league /soccer/tunisia/ /soccer/tunisia/ligue-2 /soccer/turkey/ /soccer/turkey/super-lig /soccer/turkey/1-lig /soccer/turkey/2-lig-red-group /soccer/turkey/2-lig-white-group /soccer/turkey/3-lig-group-1 /soccer/turkey/3-lig-group-2 /soccer/turkey/3-lig-group-3 /soccer/uganda/ /soccer/uganda/premier-league /soccer/ukraine/ /soccer/ukraine/premier-league /soccer/ukraine/ukrainian-cup /soccer/united-arab-emirates/ /soccer/united-arab-emirates/presidents-cup /soccer/usa/ /soccer/usa/mls /soccer/venezuela/ /soccer/venezuela/primera-division /soccer/wales/ /soccer/wales/premier-league /soccer/wales/division-1 /soccer/world/ /soccer/world/friendly-international /soccer/world/club-friendly /soccer/world/world-cup-women /soccer/world/shebelieves-cup-women /soccer/zambia/ /soccer/zambia/super-league
1
|
|
|
|
|
| 09.02.2019, 03:25 [ТС] | |
|
IRIP, во я слепой. там же были ссылки на видном месте. а я мучался с селениумом....
1
|
|
|
5 / 5 / 1
Регистрация: 20.05.2017
Сообщений: 44
|
|
| 17.02.2019, 17:43 | |
|
Знаю что ответ дан. Кроме обычного клика есть клик с удержанием click_and_hold
0
|
|
|
|
|
| 17.02.2019, 20:30 [ТС] | |
|
Ryker, хм... зачем он используется?
кстати, реализовал вытаскивание url через lxml. намного проще и быстрее оказалось.
0
|
|
|
5 / 5 / 1
Регистрация: 20.05.2017
Сообщений: 44
|
|
| 17.02.2019, 21:09 | |
|
m0nte-cr1st0, Некорректный вопрос)) Селениум создан для имитации действий пользователя что дает возможности протестировать с максимальной приближенностью. А используется для имитации нажатия и удержания левой кнопки мыши))
0
|
|
|
|
|
| 17.02.2019, 21:15 [ТС] | |
|
Ryker, я это понимаю. просто мне интересно, зачем использовать удержание нажатой клевой кнопки мыши... разве что для перетаскивания элементов в другую часть окна...
0
|
|
|
5 / 5 / 1
Регистрация: 20.05.2017
Сообщений: 44
|
|
| 17.02.2019, 21:17 | |
|
m0nte-cr1st0, Простите прочитал внимательней проблему на свежую голову(кодил). Вам нужно было использовать класс Select (работа с выпадающими списками). В нем есть метод получения всех пунктов выпадающего списка.
Добавлено через 2 минуты m0nte-cr1st0, Нет для перетаскивания реализован метод drag and drop. Не знаю честно для чего нажатие и удержание. Вполне возможно что там реализованы какие то основные действия что в более сложных объединяются.
1
|
|
| 17.02.2019, 21:17 | |
|
Помогаю со студенческими работами здесь
20
Парсер твиттера. Selenium Парсер Python Selenium Парсер с использованием Selenium, phantomJS Парсер через Selenium ChromeDriver Парсер сайта Selenium данные с двух столбцов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|