Форум программистов, компьютерный форум, киберфорум
Python: Web
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.59/29: Рейтинг темы: голосов - 29, средняя оценка - 4.59
11 / 10 / 2
Регистрация: 19.02.2018
Сообщений: 393

Лучший браузер для парсинга

18.07.2021, 16:34. Показов 6010. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте всем.

Скажите пожалуйста, Какой браузер лучше использовать для парсинга?

Раньше использовал chromedriver, он потребовал постоянно обновится, потом перестал работать.

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



кому интересно вот код

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import os, time, keyboard
 
from selenium import webdriver
 
from selenium.webdriver.common.keys import Keys
 
from selenium.webdriver.chrome.options import Options
 
 
 
chromedriver = r"C:\Program Files (x86)\Google\chromedriver"
 
os.environ["webdriver.chrome.driver"] = chromedriver
 
 
 
chrome_options = Options()
 
chrome_options.add_argument("--use-fake-ui-for-media-stream")
 
driver = webdriver.Chrome(chromedriver, chrome_options=chrome_options)
 
 
 
driver.set_window_size(624, 368) # optional
 
driver.get("https://www.speechpad.ru/")# открыть сайт
 
 
 
time.sleep(1)
 
search_language = driver.find_element_by_xpath("/html/body/div[2]/div[2]/div[3]/div/a/span").click()
 
time.sleep(1)
 
language = driver.find_element_by_xpath("/html/body/div[2]/div[2]/div[3]/div/div/input")
 
language.send_keys("Pусский Russia")
 
language.send_keys(Keys.ENTER) # выбрать язык
 
time.sleep(1)
 
 
 
e = driver.find_element_by_xpath("/html/body/div[2]/div[2]/div[2]/button[1]").click()# включить запись голоса
 
time.sleep(1)
 
while 1:
 
  text=driver.find_element_by_xpath("/html/body/div[3]/div[2]/div[1]/p").text# получить текст
 
  text1 = str(text)
 
  if len(text1) != 0 and text != None:
 
    text= str(text)+ str(" ")
 
    time.sleep(1)
 
    keyboard.write(str(text.lower()),delay=0.01)
 
    # print(e)
 
    driver.find_element_by_xpath("/html/body/div[3]/div[2]/div[1]/p").clear()# удалить текст


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

Но время поджимало.

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

Хочу не заморачиваться с тем, в будущем использовать парсинг для получения информации о акции компании. Расчетов и так далее.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.07.2021, 16:34
Ответы с готовыми решениями:

Замена Webbrowser или другой лучший вариант для скоростного парсинга
Замена Webbrowser или другой лучший вариант для скоростной парсинг Добрый день хочу написать программу-парсинг не для кражи контента,...

Лучший браузер для Android?
Привет всем! Я очень активно использую свой мобильный телефон и часто захожу в интернет через него, потому что я не сижу на месте. После...

Моё мнение на лучший браузер на ПК 2021, или какой по рекомендуете?
Так как опрос не получится создать, напишу так: Посоветуйте классный браузер, все таки одним и тем же поднадоело пользоваться. Google...

12
148 / 111 / 37
Регистрация: 28.11.2013
Сообщений: 383
21.07.2021, 23:16
Используйте requests. Работаете в обычном браузере, работает быстрее, не нужно ждать прогрузки страницы (если парсите больше 50 страниц сразу, то надо ставить паузу, а то можно бан на сайте на час получить , а так за 2 секунды 70 страниц легко парсятся).
https://www.youtube.com/watch?... 0%B8%D0%B9
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
21.07.2021, 23:21
Цитата Сообщение от Skryp Посмотреть сообщение
Используйте requests. Работаете в обычном браузере, работает быстрее,
Попробуй еще раз прочитать вопрос (и тему по ссылке). ТС-у не нужен http клиент. Ему нужен инструмент для получения полного кода динамической страницы. Этот инструмент - selenium. И вопрос ТС-а касается только его и вариантов бэкенда для него.
Сам я на него отвечать не буду, так как для меня бэкенд для selenium не имеет значения.
0
11 / 10 / 2
Регистрация: 19.02.2018
Сообщений: 393
21.07.2021, 23:38  [ТС]
Skryp, спасибо за внимание.
Итак, вот как я решил эту проблему.
Может кто-то из вас подскажет лучшее решение .

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
from webdriver_manager.chrome import ChromeDriverManager
import os, time, keyboard
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.options import Options
import os
os.environ["PATH"] += os.pathsep + r"C:\Program Files(x86)\Google\chromedriver"
options = Options()
options.add_argument("--use-fake-ui-for-media-stream")
# options.addArguments("user-data-dir=/path/to/your/custom/profile");
driver = webdriver.Chrome(ChromeDriverManager().install(), options=options)
 
driver.set_window_size(624, 368) # optiol
driver.get("https://www.speechtexter.com")# открыть сайт
time.sleep(1)
search_language = driver.find_element_by_xpath("/html/body/div[1]/div[2]/div/div[2]/button").click()
time.sleep(1)
language = driver.find_element_by_xpath("/html/body/div[1]/div[11]/div/div[1]/div[2]")
language.send_keys("Russian")
time.sleep(3)
driver.find_element_by_xpath("/html/body/div[1]/div[11]/div/div[2]/div").click()
 
e = driver.find_element_by_xpath("/html/body/div[1]/div[4]/div/button").click()# включить запись голоса
time.sleep(1)
while 1:
  text=driver.find_element_by_xpath("/html/body/div[1]/div[3]/div[2]/div[3]/div/p").text# получить текст
  text1 = str(text)
  if len(text1) != 0 and text != None:
    text= str(text)+ str(" ")
    time.sleep(1)
    keyboard.write(str(text.lower()),delay=0.01)
    # print(e)
    driver.find_element_by_xpath("/html/body/div[1]/div[3]/div[2]/div[3]/div/p").clear()# удалить текст
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
21.07.2021, 23:41
Егор Щербанов,
Кстати, погуглил на тему. Все почему-то зациклены на использованиия именно selenium для автоматизации браузеров.
А ведь еще есть pyppeteer, который является Unofficial Python port of puppeteer JavaScript (headless) chrome/chromium browser automation library.
При первом запуске он автоматически скачает chromium движок и будет его использовать при последующих запусках.
(chromium это не chrome.)

Можно стоит с ним поиграться?

Я попробовал - примеры из документации работают.
0
11 / 10 / 2
Регистрация: 19.02.2018
Сообщений: 393
23.07.2021, 18:25  [ТС]
Garry Galler, Спасибо большое внимание и совет.
Об этом слышу первый раз.
Скажите пожалуйста он работает на JavaScript?
этот язык программирования я не знаю.
Вся эта идея с парсингом нужна получения данных финансовых отчетов компании.
Потом эти данные выставляются в специальные формулы, например сколько компания платили дивидендов за последние 10, ее отношения к цене акции.
Поэтому мне нужен надёжный инструмент для работы с сайтами.
И тут возникает ошибка Driver found in cache [C:\Users\egor\.wdm\drivers\chromedriver\ 91.0.4472.101\win32\chromedriver.exe]
Приходится гуглить, искать решения, от этого иногда устаешь.
Так же хочется, как можно сильнее улучшить качество распознавания речи.
Отлично прекрасно понимаю, сколько много времени приходится потратить, чтобы программа работала качественно.
сам 3 года работал над плагином gta vice city, сейчас у меня такого количества времени нет, как тогда.
Конечно некоторые могут заявлять, что набирать текст руками гораздо быстрее, руками, но не одним указательным пальцем))))
Голосовой ввод можно использовать и в играх, для быстрого переключения, ну как вариант.
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
23.07.2021, 18:50
Цитата Сообщение от Егор Щербанов Посмотреть сообщение
Скажите пожалуйста он работает на JavaScript?
Python версия библиотеки работает на Python.
Изначальная библиотека написана на javascript разработчиками google.

P.S. У нее есть один минус, в сравнении с selenium - нет встроенного парсера html.

Добавлено через 3 минуты
Хотя, нет... не совсем:
Python
1
2
element = await page.querySelector('h1')
title = await page.evaluate('(element) => element.textContent', element)
возможность использовать селекторы есть. А вот xpath, видимо, нет.

Добавлено через 1 минуту
Хотя, xpath() тоже упоминается, но в доках я пока не нашел как его использовать.

Добавлено через 1 минуту
Да, в исходном коде все есть. Значит парсить тоже можно, но документация небогата на примеры.

Добавлено через 5 минут
Ага, нужно смотреть раздел Page class

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
coroutine J(selector: str) → Optional[pyppeteer.element_handle.ElementHandle]
alias to querySelector()
 
coroutine JJ(selector: str) → List[pyppeteer.element_handle.ElementHandle]
alias to querySelectorAll()
 
coroutine JJeval(selector: str, pageFunction: str, *args) → Any
alias to querySelectorAllEval()
 
coroutine Jeval(selector: str, pageFunction: str, *args) → Any
alias to querySelectorEval()
 
coroutine Jx(expression: str) → List[pyppeteer.element_handle.ElementHandle]
alias to xpath()
В общем дофига чего она умеет.
0
148 / 111 / 37
Регистрация: 28.11.2013
Сообщений: 383
23.07.2021, 20:48
Хороший сервис для синтеза и распознавания речи от Яндекса https://cloud.yandex.ru/services/speechkit . Я там генерил селениумом аудиокниги. Единственно, надо нарезать что текст, что аудио на куски т.к. бесплатно доступен урезанный интерфейс, но python помогает нивелировать данные неудобства.
0
11 / 10 / 2
Регистрация: 19.02.2018
Сообщений: 393
24.07.2021, 17:03  [ТС]
Garry Galler, Спасибо вам огромное, что уделили мне столько своего драгоценного времени.
Это очень хорошая альтернатива selenium.
Если его изучить, там можно реализовать много чего интересного.


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

Подскажите пожалуйста как в selenium выбрать класс?
Например на python есть библиотека soup, благодаря ей парсинг можно осуществлять быстрее и легче, чем на selenium.
Конечно гуглил, но увы путного ничего не нашёл.
Если указать полный путь xpath text=driver.find_element_by_xpath("/html/body/div[1]/div[3]/div[2]/div[3]/div/p").text# получить текст

То всё работает, пытался найти класс следующим образом.
Выходит ошибка
Python
1
2
text = driver.find_element_by_id("main").find_element_by_id("note-wrapper-outer").find_element_by_id("note-wrapper-inner").find_element_by_id("note").find_element_by_class_name("p_edit dir_LTR").text
text = str(text)
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
24.07.2021, 17:44
Цитата Сообщение от Егор Щербанов Посмотреть сообщение
Подскажите пожалуйста как в selenium выбрать класс?
HTML5
1
2
3
4
5
<html>
 <body>
  <p class="content">Site content goes here.</p>
</body>
</html>
Python
1
content = driver.find_element_by_class_name('content')
P.S. Не стоит писать цепочки из методов. В Python это плохо заканчивается из-за отсутствия оператора безопасного доступа (? вопросик как в некоторых функциональных языках).
Нужно проверять каждое полученное значение на None.

Что касается xpath синтаксиса, то как по мне - это гораздо проще всех этих методов by_class_name, by_name, by_tag_name, by_id и т.д. Просто xpath селектор нужно составлять разумно. Совершенно не за чем идти от корня документа.
Нужный элемент всегда находится внутри какого-то некорневого контейнера и нужно начинать с него. То есть html/body - лишнее.
0
11 / 10 / 2
Регистрация: 19.02.2018
Сообщений: 393
24.07.2021, 19:28  [ТС]
Garry Galler, спасибо за Ваш совет.

я попробовал
Python
1
text = driver.find_element_by_class_name("p_edit dir_LTR")
и выходит ошибка.

Python
1
2
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":".p_edit dir_LTR"}
Конечно, метод xpath гораздо проще и легче, чем другие, но бывают такие ситуации где его невозможно применить.
Поэтому хочется понять, как можно извлечь текст из данного класса.
Возможно это в будущих задачах может пригодиться.
Меня сообщения от ошибки наводит на следующую мысль, может стоить использовать другой метод, с помощью которого можно получить текст из класса.
Как вы считаете ?
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
24.07.2021, 20:25
Лучший ответ Сообщение было отмечено Егор Щербанов как решение

Решение

Цитата Сообщение от Егор Щербанов Посмотреть сообщение
"p_edit dir_LTR"
Тут не один класс, а два, разделенные пробелом.
Возможно, find_element_by_class_name не умеет сразу по двум классам искать.
Зато в xpath (который в lxml.html) так всегда можно было делать

Python
1
2
3
4
5
6
7
8
9
10
11
12
>>> page = '''<html>
 <body>
  <div>
  <p class="p_edit dir_LTR">Site content goes here.</p>
  </div>
</body>
</html>'''
>>> from lxml.html import fromstring
>>> root = fromstring(page)
>>> root.xpath("//p[@class='p_edit dir_LTR']/text()")
['Site content goes here.']
>>>
Текст извлекается через специальную функцию text(), которая реализуется самой библиотекой парсера.

Добавлено через 3 минуты
Цитата Сообщение от Егор Щербанов Посмотреть сообщение
но бывают такие ситуации где его невозможно применить.
Если честно, я не знаю таких. XPATH как спецификация синтаксиса реализует все возможности по извлечению элементов по классу, по имени тега, по любому атрибуту, по тексту, по порядковому номеру, по соседу\брату\предку\потомку, хоть по чему угодно.
0
11 / 10 / 2
Регистрация: 19.02.2018
Сообщений: 393
24.07.2021, 22:50  [ТС]
Garry Galler, Спасибо вам большое за ваш ответ, вы оказались абсолютно правы, там было два класса.
Очень признателен вам за ответ.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.07.2021, 22:50
Помогаю со студенческими работами здесь

Ввести в типизированный файл ФИО и лучший результат спортсмена, а потом изменить его так, чтобы осталось N лучший спортсменов
Задание состоит в том, чтобы ввести в типизированный файл ФИО и лучший результат спортсмена, а потом изменить его так, чтобы осталось N...

Лучший математик среди шахматистов и лучший шахматист среди математиков — один и тот же человек или разные?
Лучший математик среди шахматистов и лучший шахматист среди математиков — один и тот же человек или (вероятно) разные? Как формально, с...

ЯП для парсинга
Подскажите пожалуйста Задачи: Парсить порядка 10ти сайтов каждые 10 секунд. Информация на сайтах в таблицах. Получать список товаров...

Запросы для парсинга
Продаю базу запросов для парсинга Google-Yahoo-MSN. Всего 3500 уникальных признаков. Без повторов. Без подстановок site:.com и т.д. База...

Регулярка для парсинга #2
Помогите пожалуйста составить регулярку для парсинга этого значения и получения количество онлайна т.е &quot;7&quot;. &lt;li&gt;Общий...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
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 . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru