Очистить данные с Ghost

Я хочу удалить некоторые данные по следующей ссылке:

http://www.six-structured-products.com/en/search-find/new-search

Моя цель - просто получить таблицу всех инструментов (отображаемых в "результатах поиска" на стр. 1,2,3 и т. Д.) В виде data.frame, Я не могу просто использовать urllib а также urllib2 чтобы получить статические данные, так как мне нужно имитировать человека, нажимая на кнопки: Ghost или же Selenium путь

Тем не менее, я действительно не понимаю, как перевести в код "нажмите на страницу 2", "нажмите на страницу 3" ... а также получить общее количество страниц.

Мой код:

from ghost import Ghost

url = "http://www.six-structured-products.com/en/search-find/new-search#search_type=profi&class_category=svsp"

gh = Ghost()
page, resources = gh.open(url)

Я застрял там и не знаю, какой идентификатор поставить вместо XXX:

page, resources = ghost.evaluate(
"document.getElementById(XXX).click();", expect_loading=True)

(Я бы также принял решение, используя Selenium)

2 ответа

Решение

Вы также можете использовать следующую кнопку следующим образом:

import logging
import sys

from ghost import Ghost, TimeoutError


logging.basicConfig(level=logging.INFO)

url = "http://www.six-structured-products.com/en/search-find/new-search#search_type=profi&class_category=svsp"

ghost = Ghost(wait_timeout=20, log_level=logging.CRITICAL)
data = dict()


def extract_value(line, ntd):
    return line.findFirst('td.DataItem:nth-child(%d)' % ntd).toPlainText()


def extract(ghost):
    lines = ghost.main_frame.findAllElements(
        '.derivativeSearchResult > tbody:nth-child(2) tr'
    )

    for line in lines:
        symbol = extract_value(line, 2)
        name = extract_value(line, 5)
        logging.info("Found %s: %s" % (symbol, name))
        # Persist data here

    ghost.sleep(1)

    try:
        ghost.click('.pagination_next a', expect_loading=True)
    except TimeoutError:
        sys.exit(0)

    extract(ghost)


ghost.open(url)
extract(ghost)

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

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
import time

driver = webdriver.Firefox()
driver.get('http://www.six-structured-products.com/en/search-find/new-search#search_type=profi&class_category=svsp')

page = 2  # starting page
while True:
    try:
        button = driver.find_element_by_xpath('//ul[@id="pagination_pages"]/li[@class="pagination_page" and . = "%d"]' % page)
    except NoSuchElementException:
        break

    time.sleep(1)
    button.click()

    page += 1

print page  # total number of pages

driver.close()

Обратите внимание, что вместо time.sleep()Более надежным подходом было бы использование Waits.

Другие вопросы по тегам