2014-09-08 4 views
0

Наконец-то я нашел поток на помощь новичков по этому вопросу, но я не продвигаюсь с решением этой проблемы, отчасти потому, что я новичок в программировании :)Рекомендации по очистке и сканирование с помощью функции Javascript onclick()

нить: Newbie: How to overcome Javascript "onclick" button to scrape web page?

у меня аналогичная проблема. На сайте, который я хотел бы очистить, есть много информации о многих деталях, но я хотел бы только скопировать определенную информацию о детали (компания, номер детали и т. Д.). У меня есть два вопроса:

  1. Как получить такую ​​информацию с этого сайта без необходимости вводить информацию для поиска? Использовать сканер?

  2. Номер детали содержит большую часть информации на странице, но есть на странице Функция onclick() Javascript, когда она нажата, открывает небольшое окно, отображающее информацию, которая, кроме того, я хотел бы царапина. Как я могу очистить информацию в этом дополнительном окне?

Я использую import.io, но было предложено переключиться на Selenium и PhantomJS. Я хотел бы приветствовать другие предложения и не слишком сложно (или инструкции, которые были бы замечательными!), Других инструментов. Я был бы очень признателен, если кто-то может помочь мне преодолеть эту проблему или дать инструкции. Спасибо.

ответ

1

Если вы новичок, и вы хотите создать веб-сканер для извлечения данных, то я бы рекомендовал selenium однако, селен WebDriver медленнее, чем scrapy (рамочный питон для кодирования веб-сканеров)

Как были посоветовал использовать селен, я сосредоточусь только на селене, используя питон.

Для вашего первого вопроса: «Как захватить такую ​​информацию с этого сайта»

Предположим, сайт, с которого вы хотите извлечь данные в www.fundsupermart.co.in (выбирается это, чтобы показать, как обрабатывать новое окно поп окна)

с помощью селена можно ползать, написав:

from selenium import webdriver 
driver = webdriver.Firefox() 
driver.get('https://www.fundsupermart.co.in/main/fundinfo/mutualfund-AXIS-BANKING-DEBT-FUND--GROWTH-AXS0077.html') 

Это откроет браузер Firefox WebDrive r и загрузите страницу ссылки, представленной в методе get().

Теперь предположим, что если вы хотите извлечь таблицу, вы можете извлечь ее с помощью своего имени тега, xpath или class_name, используя функции, предоставляемые selenium. Как здесь, если я хочу, чтобы извлечь таблицу под «Инвестиционная цель»: enter image description here

Тогда для этого я буду:

right click -> inspect element -> find the appropriate tag from console -> right click -> copy xpath

Здесь я обнаружил, что <tbody> тег был один из которых я могу извлеките таблицу, чтобы я щелкнул ее правой кнопкой мыши и нажал на копию xpath, поэтому я получил xpath этого тега, т.е.:

xpath=/html/body/table/tbody/tr[2]/td/table/tbody/tr[3]/td/table[2]/tbody/tr/td/table/tbody/tr[1]/td/font/table/tbody/tr[1]/td/table/tbody/tr[5]/td/table/tbody

затем в коде добавить следующую строку:

driver.find_element_by_xpath(xpath).text 

Аналогично можно извлечь и другие данные с любого вебом-сайт также увидеть документ селена here

Для вас второго вопроса : «Как я могу очистить информацию в этом дополнительном окне?»

Для перехода по ссылке вы можете использовать функцию click(), предоставляемую selenium. Предположим, что здесь я хочу нажать на ссылку: Click here for price history тогда я получить XPath (как это было сделано ранее) и добавьте строку:

driver.find_element_by_xpath(xpath).click() 

я открыть новое окно, как это:

enter image description here

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

windows = driver.window_handles 
driver.switch_to_window(windows[1]) 

Теперь, делая это у меня есть переключил WebDriver в новом окне, и теперь я могу извлечь данные, как я делал раньше, и чтобы закрыть это окно и перейти обратно в исходное окно просто добавить:

driver.close() 
driver.switch_to_window(windows[0]) 

Это был очень простой и наивный подход поисковых роботов, используя селен. Урок here действительно хорош и вам очень поможет.