#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
Исходный код страницы в соответствии с запросом
Комментарии:
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))