Вот шаги, которые я предпринял для решения этой проблемы:
Изначально вы пытались получить данные из LinkedIn с помощью Selenium с Chrome WebDriver. Однако вы столкнулись с проблемой, когда код не смог перейти на следующую страницу из-за сообщения об ошибке.
Вы попытались изменить код, включив логику разбиения на страницы, обнаруженную в Stack Overflow, в частности, используя WebDriverWait и ожидаемые_условия для ожидания. чтобы кнопка следующей страницы была доступна для нажатия перед нажатием на нее. Однако это изменение также привело к ошибке.
Вы попытались запустить код на Firefox WebDriver вместо Chrome WebDriver, надеясь, что это поможет решить проблему с переходом на следующую страницу. Однако вы все равно столкнулись с той же ошибкой.
`import time
from datetime import datetime
from bs4 import Beautiful Soup
import pandas as pd
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from webdriver_manager.chrome import ChromeDriverManager
source = "linkedin.com"
def get_url(keyword):
"""
Generate URL from keyword.
"""
keyword = keyword.replace(' ', '%20')
url = f"https://www.linkedin.com/search/results ... s={keyword}"
return url
def get_record(card):
"""
Extract candidate data from a single record.
"""
name_tag = card.find('span', class_='entity-result__title-text')
name = name_tag.find('span', attrs={'aria-hidden': 'true'}).get_text(strip=True) if name_tag else ''
title_tag = card.find('div', class_='entity-result__primary-subtitle')
title = title_tag.get_text(strip=True) if title_tag else ''
location_tag = card.find('div', class_='entity-result__secondary-subtitle')
location = location_tag.get_text(strip=True) if location_tag else ''
profile_link_tag = card.find('a', class_='app-aware-link')
profile_url = profile_link_tag['href'] if profile_link_tag else ''
if not profile_url.startswith('https://www.linkedin.com'):
profile_url = 'https://www.linkedin.com' + profile_url
record = (name, title, location, profile_url)
return record
def login_to_linkedin(driver, username, password):
"""
Logs into LinkedIn using provided credentials.
"""
driver.get("https://www.linkedin.com/login")
time.sleep(3)
username_field = driver.find_element(By.ID, 'username')
password_field = driver.find_element(By.ID, 'password')
login_button = driver.find_element(By.XPATH, '//button[@type="submit"]')
username_field.send_keys(username)
password_field.send_keys(password)
login_button.click()
time.sleep(3)
def get_candidates(keyword, username, password, num_candidates=100):
"""
Creates a DataFrame with all records (scraped candidates), scraping from all pages.
"""
url = get_url(keyword)
records = []
# Set up Selenium WebDriver with Chrome
options = Options()
options.headless = False # Set to True if you do not need to see the browser
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)
# Log in to LinkedIn
login_to_linkedin(driver, username, password)
while len(records) < num_candidates:
print(f"Fetching page: {url}")
driver.get(url)
time.sleep(5) # Allow time for the page to load
soup = BeautifulSoup(driver.page_source, 'html.parser')
cards = soup.find_all('div', class_='entity-result__divider')
for card in cards:
record = get_record(card)
records.append(record)
print(f"Number of candidates found on this page: {len(cards)}")
print(f"Total candidates collected: {len(records)}")
if len(records) >= num_candidates:
break
# Handle pagination to go to the next page
try:
next_button = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//button[contains(@aria-label, "Next")]'))
)
next_button.click()
time.sleep(5) # Allow time for the next page to load
except Exception as e:
print(f"Exception encountered while trying to navigate to next page: {e}")
break
driver.quit()
# Save the data as DataFrame
columns = ['name', 'title', 'location', 'profile_url']
df = pd.DataFrame(data=records[:num_candidates], columns=columns)
# Adding to DataFrame columns with search parameters
search_time = datetime.now().strftime("%d/%m/%Y, %H:%M:%S")
df["search_time"] = search_time
df["search_keyword"] = keyword
df["source"] = source
return df
# LinkedIn credentials
username = "oluseyeoyeniran@gmail.com"
password = "july1981"
# Search keyword for candidates open to work in Africa
keyword = "#opentowork #Microsoft - Seeking 'Africa"
# Example usage
df = get_candidates(keyword, username, password)
df.head()
`
Подробнее здесь: https://stackoverflow.com/questions/785 ... nium-and-b
Невозможно перейти на следующую страницу в LinkedIn при извлечении селена и красивого супа ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Проблема с очисткой веб-страниц с использованием селена и красивого супа
Anonymous » » в форуме Python - 0 Ответы
- 65 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Проблема с очисткой веб-страниц с использованием селена и красивого супа
Anonymous » » в форуме Python - 0 Ответы
- 65 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Проблема с очисткой веб-страниц с использованием селена и красивого супа
Anonymous » » в форуме Python - 0 Ответы
- 59 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как выбрать конкретный тег div или pragraph из HTML-контента с помощью красивого супа?
Anonymous » » в форуме Python - 0 Ответы
- 22 Просмотры
-
Последнее сообщение Anonymous
-