Открытие ссылки и очистка данных на существующей веб-странице с помощью selineum webdriver python - PullRequest
0 голосов
/ 19 февраля 2020

Я изучаю очистку веб-страниц с помощью веб-драйвера Selenium, используя Python. Для моей учебной цели, я соскребаю действительно.com. Я очищаю название работы, название компании, местоположение, зарплату и резюме. Я могу извлечь название работы, название компании, местоположение, зарплату, используя красивый суп. Резюме работы загружается на следующую страницу, где я пытаюсь использовать селен для извлечения данных, но безуспешно. Я проверил все сообщения здесь, но все еще не мог сделать это. Я могу нажать на новую страницу, но я не уверен, как очистить данные с новой страницы.

мой код

#Importing necessary library

from selenium import webdriver
from bs4 import BeautifulSoup
from selenium.webdriver.firefox.options import Options
import pandas as pd
import time
import re
import requests
from itertools import zip_longest
from webdriver_manager.chrome import ChromeDriverManager

title = []
company = []
locations = []
summary = []

for pageno in range(0,26): 
    driver = webdriver.Chrome(ChromeDriverManager().install())
    driver.get("https://nz.indeed.com/jobs?q=data+analyst&l=New+Zealand&start=" + str(10*pageno))
    time.sleep(1)

    summaryItems = driver.find_elements_by_xpath("//a[contains(@class, 'jobtitle turnstileLink')]")
    job_links = [summaryItem.get_attribute("href") for summaryItem in summaryItems]

    for job_link in job_links:
        driver.get(job_link)
        time.sleep(1)

        job_title = driver.find_element_by_xpath("//*[@class='icl-u-xs-mb--xs icl-u-xs-mt--none jobsearch-JobInfoHeader-title']").text
        title.append(job_title)

        company_name = driver.find_element_by_xpath("//div[@class='icl-u-lg-mr--sm icl-u-xs-mr--xs']").text
        company.append(company_name)

        location = driver.find_element_by_xpath("//*[@class='jobsearch-JobMetadataHeader-iconLabel']").text
        locations.append(location)

        job_description = driver.find_element_by_xpath("//*[@class='jobsearch-jobDescriptionText']").text
        summary.append(job_description)



driver.close()


# Converting all the details into dataframe and csv file
final = []
for item in zip_longest(title, company, locations, summary):
    final.append(item)

df4 = pd.DataFrame(
    final, columns=['Job_title', 'Company_name','Locations', 'Summary'])
#df.to_csv('booked.csv')


I tried to debug but not successful. One of the job page is not loading. I don't know the reason. Problem either 3 or 4 loop. Any suggestion?

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

1 Ответ

0 голосов
/ 20 февраля 2020

Вместо того, чтобы открывать вакансию на новой странице, вы можете получить ссылку на эту работу и снова загрузить ее через Selenium следующим образом:

driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get("https://nz.indeed.com/jobs?q=data+scientist&l=New+Zealand&start=" + str(10*1))
time.sleep(5)

summaryItems = driver.find_element_by_xpath("//a[contains(@class, 'jobtitle turnstileLink')]")
job_link = summaryItems.get_attribute("href")
driver.get(job_link)

Теперь вы можете легко получить информацию о работе , следующим образом:

job_title = driver.find_element_by_xpath("//*[@class='icl-u-xs-mb--xs icl-u-xs-mt--none jobsearch-JobInfoHeader-title']")
company_name = driver.find_element_by_xpath("//*[@class='icl-u-lg-mr--sm icl-u-xs-mr--xs']")
location = driver.find_element_by_xpath("//*[@class='jobsearch-JobMetadataHeader-iconLabel']")
job_description = driver.find_element_by_xpath("//*[@class='jobsearch-jobDescriptionText']")

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

Если вы хотите получить информацию обо всех списках вакансий, вы можете сделать это следующим образом:

summaryItems = driver.find_elements_by_xpath("//a[contains(@class, 'jobtitle turnstileLink')]")
job_links = [summaryItem.get_attribute("href") for summaryItem in summaryItems]

for job_link in job_links:
    driver.get(job_link)
    time.sleep(1)

    job_title = driver.find_element_by_xpath("//*[@class='icl-u-xs-mb--xs icl-u-xs-mt--none jobsearch-JobInfoHeader-title']").text
    company_name = driver.find_element_by_xpath("//*[@class='icl-u-lg-mr--sm icl-u-xs-mr--xs']").text
    location = driver.find_element_by_xpath("//*[@class='jobsearch-JobMetadataHeader-iconLabel']").text
    job_description = driver.find_element_by_xpath("//*[@class='jobsearch-jobDescriptionText']").text

РЕДАКТИРОВАТЬ 2:

Чтобы избежать ошибки при отсутствии названия компании для определенной работы, вы можете сделать следующее:

try:
    company_name = driver.find_element_by_xpath("//div[@class='icl-u-lg-mr--sm icl-u-xs-mr--xs']").text
except:
    company_name = ""

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...