Как очистить все страницы и загрузить данные в Excel в требуемом формате с помощью селена - PullRequest
1 голос
/ 05 марта 2020

Здесь я пытаюсь вычистить учительские работы из https://www.indeed.co.in/?r=us Я хочу загрузить его на лист Excel, такой как JobTitle, институт / школа, зарплата, HowMydaysagoposted Я написал код для очистки как это, но я получаю весь текст из xpath, который я определил

import selenium.webdriver

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions


url = 'https://www.indeed.co.in/?r=us'
driver = webdriver.Chrome(r"mypython/bin/chromedriver_linux64/chromedriver")
driver.get(url)

driver.find_element_by_xpath('//*[@id="text-input-what"]').send_keys("teacher")
driver.find_element_by_xpath('//*[@id="whatWhereFormId"]/div[3]/button').click()


items = driver.find_elements_by_xpath('//*[@id="resultsCol"]')
for item in items:
    print(item.text)

И даже я могу почистить только одну страницу, и я хочу, чтобы все страницы были доступны после поиска учителя. Помогите мне Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 05 марта 2020

Я бы посоветовал вам заценить красивый суп https://pypi.org/project/beautifulsoup4/ Я использовал это для чистки таблиц,

def read_table(table):
    """Read an IP Address table.
    Args:
      table: the Soup <table> element
    Returns:
      None if the table isn't an IP Address table, otherwise a list of
        the IP Address:port values.
    """
    header = None
    rows = []
    for tr in table.find_all('tr'):
        if header is None:
            header = read_header(tr)
            if not header or header[0] != 'IP Address':
                return None
        else:
            row = read_row(tr)
            if row:
                rows.append('{}:{}'.format(row[0], row[1]))
    return rows

Вот только фрагмент от одного из моих python projects https://github.com/backslash/WebScrapers/blob/master/us-proxy-scraper/us-proxy.py Вы можете использовать красивый суп, чтобы невероятно легко чистить столы, если вы беспокоитесь о том, что он заблокирован, вам просто нужно отправить правильные заголовки. Еще одним преимуществом использования красивого супа является то, что вам не нужно долго ждать много вещей.

HEADERS = requests.utils.default_headers()
HEADERS.update({
    'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0',
})

Удачи

0 голосов
/ 05 марта 2020

попробуйте, не забудьте импортировать модули селена

from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait

url = 'https://www.indeed.co.in/?r=us'

driver.get(url)

driver.find_element_by_xpath('//*[@id="text-input-what"]').send_keys("teacher")
driver.find_element_by_xpath('//*[@id="whatWhereFormId"]/div[3]/button').click()

 # scrape data
 data = WebDriverWait(driver, 10).until(
          EC.presence_of_element_located((By.ID, "resultsCol")))
 result_set = WebDriverWait(data, 10).until(
        EC.presence_of_all_elements_located((By.CLASS_NAME, "jobsearch-SerpJobCard")))

for result in result_set:
    data = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "resultsCol")))
    result_set = WebDriverWait(data, 10).until(
       EC.presence_of_all_elements_located((By.CLASS_NAME, "jobsearch-SerpJobCard")))

    for result in result_set:

        title = result.find_element_by_class_name("title").text
        print(title)

        school = result.find_element_by_class_name("company").text
        print(school)

        try:
           salary = result.find_element_by_class_name("salary").text
           print(salary)

        except:
           # some result set has no salary
           pass
        print("--------")

   # move to next page
   next_page = result.find_elements_by_xpath("//span[@class='pn']")[-1]
   driver.execute_script("arguments[0].click();", next_page)
0 голосов
/ 05 марта 2020

Вам придется перемещаться по каждой странице и отбирать их по одной, т.е. вам нужно будет автоматизировать нажатие кнопки «Следующая страница» в селене (используйте xpath элемента кнопки «Следующая страница»). Затем распакуйте, используя функцию источника страницы. Надеюсь, что смогу помочь.

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