单击Scrapy中的按钮

时间:2011-07-13 16:45:09

标签: python web-crawler web-scraping scrapy

我正在使用Scrapy抓取网页。当您点击某个按钮时,我只需弹出一些我需要的信息(当然,点击后也会出现在HTML代码中)。

我发现Scrapy可以处理表单(如登录),如here所示。但问题是没有任何形式可以填写,所以这不是我需要的。

如何只需点击一个按钮,然后显示我需要的信息?

我是否必须使用像mechanize或lxml这样的外部库?

3 个答案:

答案 0 :(得分:39)

Scrapy无法解释javascript。

如果您绝对必须与页面上的javascript进行互动,那么您希望使用Selenium。

如果使用Scrapy,问题的解决方案取决于按钮的作用。

如果它只显示以前隐藏的内容,您可以毫无问题地抓取数据,它不会出现在浏览器中,HTML仍然存在。

如果在按下按钮时通过AJAX动态获取内容,最好的办法是查看使用Firebug等工具按下按钮时发出的HTTP请求。然后,您可以直接从该URL请求数据。

  

我是否必须使用像mechanize或lxml这样的外部库?

如果你想解释javascript,是的,你需要使用不同的库,尽管这两个都不符合要求。他们都不知道关于javascript的任何事情。硒是要走的路。

如果您可以提供正在抓取的页面的网址,我可以查看一下。

答案 1 :(得分:13)

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!'

答案 2 :(得分:0)

要正确和完全使用JavaScript,您需要一个完整的浏览器引擎,这只能通过Watir / WatiN / Selenium等实现。