资讯专栏INFORMATION COLUMN

pyspider 爬虫教程(三):使用 PhantomJS 渲染带 JS 的页面

zhongmeizhi / 2192人阅读

摘要:英文原文在上两篇教程中,我们学习了怎么从中提取信息,也学习了怎么处理一些请求复杂的页面。在使用之前,你需要安装它安装文档。当你安装了之后,在运行模式的时就会自动启用了。使用当连上代理后,你就能通过在中添加的参数,开启使用抓取。

英文原文:http://docs.pyspider.org/en/latest/tutorial/Render-with-PhantomJS/

在上两篇教程中,我们学习了怎么从 HTML 中提取信息,也学习了怎么处理一些请求复杂的页面。但是有一些页面,它实在太复杂了,无论是分析 API 请求的地址,还是渲染时进行了加密,让直接抓取请求非常麻烦。这时候就是 PhantomJS 大显身手的时候了。

在使用 PhantomJS 之前,你需要安装它(安装文档)。当你安装了之后,在运行 all 模式的 pyspider 时就会自动启用了。当然,你也可以在 demo.pyspider.org 上尝试。

使用 PhantomJS

当 pyspider 连上 PhantomJS 代理后,你就能通过在 self.crawl 中添加 fetch_type="js" 的参数,开启使用 PhantomJS 抓取。例如,在教程二中,我们尝试抓取的 http://movie.douban.com/explore 就可以通过 PhantomJS 直接抓取:

pythonclass Handler(BaseHandler):
    def on_start(self):
        self.crawl("http://movie.douban.com/explore",
                   fetch_type="js", callback=self.phantomjs_parser)

    def phantomjs_parser(self, response):
        return [{
            "title": "".join(
                s for s in x("p").contents() if isinstance(s, basestring)
            ).strip(),
            "rate": x("p strong").text(),
            "url": x.attr.href,
        } for x in response.doc("a.item").items()]
  

我在这里使用了一些 PyQuery 的 API,你可以在 PyQuery complete API 获得完整的 API 手册。

在页面上执行自定义脚本

你会发现,在上面我们使用 PhantomJS 抓取的豆瓣热门电影只有 20 条。当你点击『加载更多』时,能获得更多的热门电影。为了获得更多的电影,我们可以使用 self.crawljs_script 参数,在页面上执行一段脚本,点击加载更多:

python    def on_start(self):
        self.crawl("http://movie.douban.com/explore#more",
                   fetch_type="js", js_script="""
                   function() {
                     setTimeout("$(".more").click()", 1000);
                   }""", callback=self.phantomjs_parser)
  

这个脚本默认在页面加载结束后执行,你可以通过 js_run_at 参数 修改这个行为

由于是 AJAX 异步加载的,在页面加载完成时,第一页的电影可能还没有加载完,所以我们用 setTimeout 延迟 1 秒执行。

你可以间隔一定时间,多次点击,这样可以加载更多页。

由于相同 URL (实际是相同 taskid) 的任务会被去重,所以这里为 URL 加了一个 #more

上面两个例子,都可以在 http://demo.pyspider.org/debug/tutorial_douban_explore 中找到。


中文原文: http://blog.binux.me/2015/01/pyspider-tutorial-level-3-render-with-phantomjs/

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/45325.html

相关文章

  • Python利用Phantomjs抓取渲染JS网页

    摘要:最近需要爬取某网站,无奈页面都是渲染后生成的,普通的爬虫框架搞不定,于是想到用搭一个代理。调用貌似没有现成的第三方库如果有,请告知小,漫步了一圈,发现只有提供了现成的方案。 最近需要爬取某网站,无奈页面都是JS渲染后生成的,普通的爬虫框架搞不定,于是想到用Phantomjs搭一个代理。 Python调用Phantomjs貌似没有现成的第三方库(如果有,请告知小2),漫步了一圈,发现只...

    lowett 评论0 收藏0
  • Python3网络爬虫实战---10、爬虫框架安装:PySpider、Scrapy

    摘要:所以如果对爬虫有一定基础,上手框架是一种好的选择。缺少包,使用安装即可缺少包,使用安装即可上一篇文章网络爬虫实战爬取相关库的安装的安装下一篇文章网络爬虫实战爬虫框架的安装 上一篇文章:Python3网络爬虫实战---9、APP爬取相关库的安装:Appium的安装下一篇文章:Python3网络爬虫实战---11、爬虫框架的安装:ScrapySplash、ScrapyRedis 我们直接...

    张宪坤 评论0 收藏0
  • 高效率爬虫框架之pyspider

    摘要:一个爬虫框架的雏形,应该包含调度器队列请求对象等。我们平时写的爬虫程序,连最基本的框架都不具备。这样,不仅开发效率会提高很多,而且爬虫的健壮性也更强。支持多种消息队列如。将抓取任务分发给进行抓取,执行并得到响应随后将响应发送给。 showImg(https://segmentfault.com/img/remote/1460000015557057); 为什么要使用爬虫框架 在我们平常...

    MasonEast 评论0 收藏0
  • 零基础如何学爬虫技术

    摘要:楚江数据是专业的互联网数据技术服务,现整理出零基础如何学爬虫技术以供学习,。本文来源知乎作者路人甲链接楚江数据提供网站数据采集和爬虫软件定制开发服务,服务范围涵盖社交网络电子商务分类信息学术研究等。 楚江数据是专业的互联网数据技术服务,现整理出零基础如何学爬虫技术以供学习,http://www.chujiangdata.com。 第一:Python爬虫学习系列教程(来源于某博主:htt...

    KunMinX 评论0 收藏0
  • pyspider 实战项目之爬取去哪儿

    摘要:现在我们用一个实战项目,来进一步掌握框架的使用。此次的项目爬取的目标是去哪儿网,我要将所有攻略的作者标题出发日期人均费用攻略正文等保存下来,存储到中。代表当前的爬取速率。 showImg(https://segmentfault.com/img/remote/1460000015563534); 阅读文本大概需要 13 分钟。 通过之前的文章介绍,你现在应该对 pyspider 有了一...

    banana_pi 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<