Селен соскоб; пытаясь добавить классы в фрейм данных - PullRequest
0 голосов
/ 06 января 2020

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

Я могу получить всю необходимую информацию, используя:

company = driver.find_elements_by_class_name("company")

et c.

Далее я go просматриваю текстовые значения драйверов и добавляю их в список:

joblist = []
for i in range(len(jobs)):
    joblist.append(jobs[i].text)

Наконец, я добавляю эту информацию в pandas DataFrame:

df["Job Title"] = joblist

et c.

Теперь я обнаружил, что некоторые объявления о вакансиях не имеют название своей компании, указанное в его соответствующей категории, а лучше указать название компании в названии должности. Когда значение компании отсутствует или пусто для определенной публикации, как я могу добавить пустой слот, соответствующий правильной публикации вакансии, в список компаний / фрейм данных? Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 06 января 2020

Кажется, вы используете неправильный метод - вы ищете отдельно все компании, отдельно все заголовки и т. Д. c.

company = driver.find_elements_by_class_name("company")
summary = driver.find_elements_by_class_name("summary")
location = driver.find_elements_by_class_name("location")
title = driver.find_elements_by_class_name("title")

, но вы должны искать объект, который хранит всю информацию для отдельного предложения и последующего поиска в это предложение

all_offers = driver.find_elements_by_class_name("info")

joblist = []

for offer in all_offers:
    # uses `offer` instead `driver` to search only in this one offer
    # uses `element` instead of `elements` to search only one value

    try:
        company = offer.find_element_by_class_name("company").text.strip()
    except Exception as ex:
        #print('[Exception] company:', ex)
        company = 'NAN'

    summary = offer.find_element_by_class_name("summary").text.strip()
    location = offer.find_element_by_class_name("location").text.strip()
    title = offer.find_element_by_class_name("title").text.strip()

    joblist.append([company, summary, location, title])    

РЕДАКТИРОВАТЬ: Минимальный рабочий пример с https://books.toscrape.com, который был создан для изучения скребков.

Есть на этой странице нет класса other, поэтому он добавит NAN ко всем строкам данных

import selenium.webdriver

driver = selenium.webdriver.Firefox()
driver.get('https://books.toscrape.com')

all_items = driver.find_elements_by_class_name('product_pod')

data = []

for item in all_items:
    try:
        name = item.find_element_by_xpath('.//h3/a').get_attribute('title')
    except Exception as ex:
        #print('[Exception] name:', ex)
        name = ''

    try:    
        price = item.find_element_by_class_name('price_color').text.strip()
    except Exception as ex:
        #print('[Exception] price:', ex)
        price = ''

    try:    
        other = item.find_element_by_class_name('other').text.strip()
    except Exception as ex:
        #print('[Exception] other:', ex)
        other = 'NAN'

    data.append([name, price, other])

for row in data:
    print(row)

Результат:

['A Light in the Attic', '£51.77', 'NAN']
['Tipping the Velvet', '£53.74', 'NAN']
['Soumission', '£50.10', 'NAN']
['Sharp Objects', '£47.82', 'NAN']
['Sapiens: A Brief History of Humankind', '£54.23', 'NAN']
['The Requiem Red', '£22.65', 'NAN']
['The Dirty Little Secrets of Getting Your Dream Job', '£33.34', 'NAN']
['The Coming Woman: A Novel Based on the Life of the Infamous Feminist, Victoria Woodhull', '£17.93', 'NAN']
['The Boys in the Boat: Nine Americans and Their Epic Quest for Gold at the 1936 Berlin Olympics', '£22.60', 'NAN']
['The Black Maria', '£52.15', 'NAN']
['Starving Hearts (Triangular Trade Trilogy, #1)', '£13.99', 'NAN']
["Shakespeare's Sonnets", '£20.66', 'NAN']
['Set Me Free', '£17.46', 'NAN']
["Scott Pilgrim's Precious Little Life (Scott Pilgrim #1)", '£52.29', 'NAN']
['Rip it Up and Start Again', '£35.02', 'NAN']
['Our Band Could Be Your Life: Scenes from the American Indie Underground, 1981-1991', '£57.25', 'NAN']
['Olio', '£23.88', 'NAN']
['Mesaerion: The Best Science Fiction Stories 1800-1849', '£37.59', 'NAN']
['Libertarianism for Beginners', '£51.33', 'NAN']
["It's Only the Himalayas", '£45.17', 'NAN']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...