Подтвердить что ты не робот

Нажмите кнопку в Scrapy

Я использую Scrapy для сканирования веб-страницы. Некоторая информация, которая мне нужна, только появляется, когда вы нажимаете на определенную кнопку (конечно, также появляется в коде HTML после нажатия).

Я узнал, что Scrapy может обрабатывать формы (например, логины), как показано здесь. Но проблема в том, что нет формы для заполнения, так что это не совсем то, что мне нужно.

Как я могу просто нажать кнопку, которая затем отображает нужную мне информацию?

Нужно ли использовать внешнюю библиотеку, такую ​​как mechanize или lxml?

4b9b3361

Ответ 1

Scrapy не может интерпретировать javascript.

Если вы абсолютно должны взаимодействовать с javascript на странице, вы хотите использовать Selenium.

Если вы используете Scrapy, решение проблемы зависит от того, что делает кнопка.

Если он просто покажет контент, который был ранее скрыт, вы можете очистить данные без проблем, не имеет значения, что он не появится в браузере, HTML все еще существует.

Если он выбирает динамически динамически через AJAX при нажатии кнопки, лучше всего просмотреть HTTP-запрос, который отключается, когда вы нажимаете кнопку с помощью инструмента, такого как Firebug. Затем вы можете просто запросить данные непосредственно с этого URL-адреса.

Нужно ли использовать внешнюю библиотеку, такую ​​как mechanize или lxml?

Если вы хотите интерпретировать javascript, да, вам нужно использовать другую библиотеку, хотя ни один из этих двух не соответствует счету. Ни один из них ничего не знает о javascript. Селен - это путь.

Если вы можете указать URL-адрес страницы, на которой вы работаете на очистке, я могу взглянуть.

Ответ 2

Selenium браузер обеспечивает очень приятное решение. Вот пример (pip install -U selenium):

from selenium import webdriver

class northshoreSpider(Spider):
    name = 'xxx'
    allowed_domains = ['www.example.org']
    start_urls = ['https://www.example.org']

    def __init__(self):
        self.driver = webdriver.Firefox()

    def parse(self,response):
            self.driver.get('https://www.example.org/abc')

            while True:
                try:
                    next = self.driver.find_element_by_xpath('//*[@id="BTN_NEXT"]')
                    url = 'http://www.example.org/abcd'
                    yield Request(url,callback=self.parse2)
                    next.click()
                except:
                    break

            self.driver.close()

    def parse2(self,response):
        print 'you are here!'

Ответ 3

Для правильного и полного использования JavaScript вам необходим полный движок браузера, и это возможно только с Watir/WatiN/Selenium и т.д.