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

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

37 голосов
/ 13 июля 2011

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

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

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

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

Ответы [ 3 ]

42 голосов
/ 13 июля 2011

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

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

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

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

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

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

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

13 голосов
/ 21 ноября 2014

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!'
0 голосов
/ 13 июля 2011

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

...