Получение результатов поиска selenium python bs4

#python #html #selenium #web-scraping #beautifulsoup

#python #HTML #selenium #очистка веб-страниц #beautifulsoup

Вопрос:

Я успешно собрал скрипт для получения результатов поиска из sales Navigator в Linkedin. Ниже приведен скрипт, использующий python, selenium и bs4.

 browser = webdriver.Firefox(executable_path=r'D:geckodrivergeckodriver.exe')
url1 = "https://www.linkedin.com/sales/search/company?companySize=Eamp;geoIncluded=emea:0,europe:0amp;industryIncluded=6amp;keywords=AIamp;page=1amp;searchSessionId=zreYu57eQo+SZiFskdWJqg=="

browser.get(url1)
time.sleep(15)

parsed = browser.find_element_by_tag_name('html').get_attribute('innerHTML')
soup = BeautifulSoup(parsed, 'html.parser')

search_results = soup.select('dt.result-lockup__name a')
print(len(search_results))

time.sleep(5)
browser.quit()
  

Независимо от количества результатов, ответ всегда был 10 (т. Е.) было возвращено только 10 результатов. После дальнейшего изучения исходного кода я заметил следующее :

введите описание изображения здесь

Первые 10 результатов представлены на другом уровне, а остальные находятся под тегом div с классом стиля, названным как отложенная область. Хотя имя класса dt одинаково для всех результатов поиска (result-lockup__name), из-за изменения уровней я не могу получить к нему доступ / извлечь его.

Каков был бы правильный способ получения всех результатов в таком случае?

РЕДАКТИРОВАТЬ 1

Пример того, как уровни тегов находятся в пределах li
введите описание изображения здесь

И пример html-скрипта результата, который не извлекается введите описание изображения здесь

ПРАВКА 2

Исходный код страницы в соответствии с запросом

https://pastebin.com/D11YpHGQ

Комментарии:

1. какую строку вы вводите в текстовое поле поиска, чтобы сгенерировать этот URL?

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

3. Почему бы вам не попробовать выбрать элементы результатов поиска, используя их имя класса search-results__result-item ??

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

5. можете ли вы также поделиться исходным кодом страницы?

Ответ №1:

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

Мы можем использовать javascript для прокрутки до нижней части страницы для нас window.scrollTo(0,document.body.scrollHeight) (вы можете использовать цикл, если ожидаете сотни результатов), выводя все результаты на страницу, после чего мы можем захватить HTML.

Приведенное ниже должно помочь.

 browser = webdriver.Firefox(executable_path=r'D:geckodrivergeckodriver.exe')
url1 = "https://www.linkedin.com/sales/search/company?companySize=Eamp;geoIncluded=emea:0,europe:0amp;industryIncluded=6amp;keywords=AIamp;page=1amp;searchSessionId=zreYu57eQo+SZiFskdWJqg=="

browser.get(url1)
time.sleep(15)
browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')
time.sleep(15)

parsed = browser.find_element_by_tag_name('html').get_attribute('innerHTML')
soup = BeautifulSoup(parsed, 'html.parser')

search_results = soup.select('dt.result-lockup__name a')
print(len(search_results))