`

(转)scrapy结合webkit抓取js生成的页面

阅读更多

1 scedule

scrapy 作为抓取框架,包括了spider,pipeline基础设施

2 webkit

scrapy 本身不能作为js engine,这就导致很多js生成的页面的数据会无法抓取到,因此,一些通用做法是webkit或者xmi_runner(firefox)。通过这个手段可以对于js生成的数据进行抓取。需要安装的包有

python-webkit (相关依赖自行解决)

Xvfb (用于非Xwindow环境)

3 开发downloader middleware

from scrapy.http import Request, FormRequest, HtmlResponse
 
import gtk
import webkit
import jswebkit
import settings
 
class WebkitDownloader( object ):
    def process_request( self, request, spider ):
        if spider.name in settings.WEBKIT_DOWNLOADER:
            if( type(request) is not FormRequest ):
                webview = webkit.WebView()
                webview.connect( 'load-finished', lambda v,f: gtk.main_quit() )
                webview.load_uri( request.url )
                gtk.main()
                js = jswebkit.JSContext( webview.get_main_frame().get_global_context() )
                renderedBody = str( js.EvaluateScript( 'document.body.innerHTML' ) )
                return HtmlResponse( request.url, body=renderedBody )

4 配置

在scrapy的settings.py中加入:

#which spider should use WEBKIT
WEBKIT_DOWNLOADER=['ccb']
 
DOWNLOADER_MIDDLEWARES = {
    'rate_crawler.dowloader.WebkitDownloader': 543,
}   
 
import os
os.environ["DISPLAY"] = ":0"

5 使用

启动 Xvfb (假设DISPLAY=:0)

要与settings.py中的DISPLAY对应(本例中是:0)。

scrapy crawl xxx

分享到:
评论

相关推荐

    Phantomjs抓取渲染JS后的网页(Python代码)

    Phantomjs特别适用于那些需要对JavaScript渲染后的页面进行操作的情况,例如自动化测试、屏幕截图、网页抓取等。 #### 二、Phantomjs与Python结合的应用场景 在实际应用中,Phantomjs经常被用来处理那些普通HTTP...

    scrapy-splash:用于JavaScript集成的Scrapy + Splash

    Scrapy-Splash是一个非常有用的工具,它允许Scrapy爬虫框架与Splash服务器协同工作,以处理依赖于JavaScript的网页。Scrapy是一个强大的Python爬虫框架,而Splash则是一个轻量级的HTTP代理服务器,它支持JavaScript...

    scrapy随机user-agent

    此外,某些网站可能有更复杂的反爬机制,如JavaScript验证、IP封锁等,这时可能需要结合其他技术如Selenium、Splash等来解决。 总的来说,Scrapy随机User-Agent是一个提高爬虫效率和存活率的有效策略,同时也是Web...

    使用Scrapy爬取动态数据

    Scrapy是一个强大的Python...总的来说,通过结合Scrapy和PhantomJS,我们可以有效地抓取那些依赖JavaScript渲染的动态内容。这种方法虽然增加了项目的复杂性,但对于处理那些动态生成数据的网站来说,是非常有价值的。

    phantomjs压缩包

    但PhantomJS能够执行页面上的JavaScript,因此非常适合抓取这些动态生成的内容。它可以与Python的Scrapy框架结合,实现更复杂的网页抓取任务。 7. **性能分析**:由于PhantomJS提供了网页加载时间、资源下载速度等...

    phantomjs-2.1.1-macosx.zip

    通过利用其JavaScript API和Webkit渲染引擎,开发者可以轻松地实现动态网页的抓取、页面渲染和自动化测试。无论你是数据分析师、前端开发者还是自动化测试工程师,PhantomJS都值得你纳入工具箱。

    在scrapy中使用phantomJS实现异步爬取的方法

    对于许多现代网站来说,页面的内容是由 JavaScript 动态生成的。这意味着仅通过 HTTP 请求获取 HTML 文件无法得到完整的页面内容。在这种情况下,使用 PhantomJS 或类似的工具来模拟真实的浏览器行为变得至关重要。...

    python 爬虫ghost.py

    这里提到的"python 爬虫ghost.py"是一种利用Python实现的Ghost浏览器渲染模式的爬虫工具,它允许我们模拟浏览器执行JavaScript,从而获取那些依赖于JavaScript生成的网页内容。 Ghost.py是这个工具的核心库,它是...

    基于Python3的动态网站爬虫,使用selenium+phantomjs实现爬取动态网站, 本项目以爬取今日头条为例.zip

    对于JavaScript生成的内容,确保页面完全加载后再进行抓取。 5. **数据提取**: 可以使用BeautifulSoup或正则表达式等方法从HTML中提取所需信息。例如: ```python from bs4 import BeautifulSoup soup = ...

    Splash-源码.rar

    Splash常被用于数据抓取框架如Scrapy,作为JavaScript渲染中间件,帮助处理动态网站。此外,它也可以作为独立的服务,供其他应用调用。 10. **社区与文档** 作为开源项目,Splash有活跃的开发者社区,提供详细的...

    Python网络爬虫源代码

    Python网络爬虫是一种...在实际应用中,你可能会遇到更多复杂的问题,如动态加载页面、JavaScript渲染等,这需要结合Selenium、Splash等工具进行处理。持续学习和实践,不断提升,才能成为一名优秀的网络爬虫开发者。

    Python爬虫基础知识与实例

    - **Scrapy**:这是一个快速高级的爬虫框架,支持异步处理请求,适用于大规模的数据抓取任务。Scrapy内置了各种中间件,支持数据存储、去重过滤等功能。 #### 三、爬虫实例 下面通过一个简单的例子来展示如何使用...

Global site tag (gtag.js) - Google Analytics