2

实际上,我的意图是实现 Next from "href="javascript:submitAction_win0(document.win0,'HRS_APPL_WRK_HRS_LST_NEXT')",所以仅举个例子,我以 [this url][1] 为例。从这个 url 中你可以看到页面末尾的 Next,所以如果你观察到它们是通过href="javascript:submitAction_win0(document.win0,'HRS_APPL_WRK_HRS_LST_NEXT')其编写的 htmlhref标记为#,我只是想收集那些 href 标记,即使它们是#

def parse(self,response):
        selector = Selector(response)
        links = []
        for link in selector.css('span.PSEDITBOX_DISPONLY').re('.*>(\d+)<.*'):
		#intjid = selector.css('span.PSEDITBOX_DISPONLY').re('.*>(\d+)<.*')
                abc = 'xxxx'
                #print abc
		yield Request(abc,callback=self.parse_listing_page,dont_filter=True)
                          #meta={"use_splash": False}
                         # ) 

        nav_page = selector.css('div#win0divHRS_APPL_WRK_HRS_LST_NEXT a').extract()
        print nav_page
	for nav_page in nav_page:
       
     ## To pass the url to parse function
                yield Request(urljoin('xxx',nav_page),self.parse,dont_filter=True)

当我运行上面的代码时,我得到的结果是" HTTP status code is not handled or not allowed",我的意思是没有,谁能告诉我如何通过这些""href="javascript:submitAction_win0(document.win0,'HRS_APPL_WRK_HRS_LST_NEXT')""函数实现 Next 以及为什么结果为空。我在 html 中观察到某种奇怪的东西,例如 Next 中的一个页面具有锚标记为"<a id="HRS_APPL_WRK_HRS_LST_NEXT" class="PSHYPERLINK" href="javascript:submitAction_win0(document.win0,'HRS_APPL_WRK_HRS_LST_NEXT');" tabindex="74" ptlinktgt="pt_replace" name="HRS_APPL_WRK_HRS_LST_NEXT"></a>"

提前致谢

输出 :

[u'<a name="HRS_APPL_WRK_HRS_LST_NEXT" id="HRS_APPL_WRK_HRS_LST_NEXT" ptlinktgt="pt_replace" tabindex="74" href="javascript:submitAction_win0(document.win0,\'HRS_APPL_WRK_HRS_LST_NEXT\');" class="PSHYPERLINK">Next</a>']

4

1 回答 1

3

Scrapy 本身不支持 java 脚本调用。但是有一些机制可以用来面对 java 脚本。

  1. Splash - Splash 是一个带有 HTTP API 的 javascript 渲染服务。它是一个带有 HTTP API 的轻量级浏览器,使用 Twisted 和 QT 在 Python 中实现
  2. Scrapyjs - 这个库通过两种不同的机制提供 Scrapy-Javascript 集成:一个 Scrapy 下载处理程序,一个 Scrapy 下载器中间件
  3. SpiderMonkey - 从 Python 执行任意 JavaScript 代码。允许您在 JavaScript VM 中引用任意 Python 对象和函数
  4. spynner -Spynner 是 Python 的有状态编程 Web 浏览器模块。它基于 PyQT 和 WebKit。它支持 Javascript、AJAX 以及 !WebKit 能够处理的所有其他技术(Flash、SVG、...)。Spynner 利用了 JQuery。一个强大的 Javascript 库,使与页面和事件模拟的交互变得非常容易
于 2014-11-20T09:46:23.940 回答