单击Scrapy中的按钮

nae*_*aeg 37 python web-crawler scrapy web-scraping

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

我发现Scrapy可以处理的形式(如登录)如图所示这里.但问题是没有形式可以填写,所以这不是我需要的.

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

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

Aco*_*orn 44

Scrapy无法解释javascript.

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

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

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

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

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

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

如果您可以提供正在进行抓取的页面的URL,我可以查看一下.

  • 这不是我实际问题的真实答案,但它解决了我的问题.我在Chrome中查看了网站请求,并找到了一个链接,该链接在单独的页面中显示了该信息.谢谢!但我不会将你的答案标记为已被接受,因为其他人可能真的需要点击按钮. (2认同)
  • @naeg我认为答案总结得正确。您无法使用 Scrapy 单击按钮。您可以发送请求并接收响应。您可以使用单独的 JavaScript 引擎来解释响应。 (2认同)

Nim*_*ush 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!'
Run Code Online (Sandbox Code Playgroud)