爬虫如何使用phantomjs无头浏览器解决网页源代码经过渲染的问题(以scrapy框架为例)

一.浏览器的构成

  许多开发商提供了商用的浏览器来解释和显示Web文档,而所有这些浏览器几乎都使用相同的体系架构。每一种浏览器(browser)通常由三部分构成:一个控制程序,客户协议和一些解释程序。控制程序从键盘或者鼠标接受输入,并使用客户端程序访问文档。获取文档以后,控制程序使用解释程序将文档显示在屏幕上。客户机协议可以是主流协议之一,如FTP或者HTTP。解释程序可以是HTML,Java或者JavaScript,这取决于文档的类型。

  渲染(计算机术语):渲染在电脑绘图中是指用软件从模型生成图像的过程。模型是用严格定义的语言或者数据结构对于三维物体的描述,它包括几何视点纹理以及照明信息。  

  所以浏览器也存在一个 “ 渲染 ” 的问题:构建网页的代码和服务器所发回的网页源代码不一致。

 

  那么问题来了,如何获得经过浏览器解释后的代码呢?

二.phantomjs的使用

  1.phantomjs简介:

    头浏览器:一个完整的浏览器内核,包括js解析引擎,渲染引擎,请求处理等,但是不包括显示和用户交互页面的浏览器。

  2.PhantomJS的使用场景
   PhantomJS的适用范围就是无头浏览器的适用范围。通常无头浏览器可以用于页面自动化,网页监控,网络爬虫等:

    页面自动化测试:希望自动的登陆网站并做一些操作然后检查结果是否正常。
    网页监控:希望定期打开页面,检查网站是否能正常加载,加载结果是否符合预期。加载速度如何等。
    网络爬虫:获取页面中使用js来下载和渲染信息,或者是获取链接处使用js来跳转后的真实地址。

  3.phantomJs的安装

    安装教程:https://blog.csdn.net/qq_39382769/article/details/79754930

    注意:直接使用pip安装selenium模块的话,很容易发生网络连接的问题,推荐使用清华源

        安装命令:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple selenium (直接复制到cmd敲击回车即可)

        phantomJs的安装官网在国外,国内直接访问,不用vpn的话,很难下载的。所以如果有下载困难的小伙伴,可以在评论区留下自己的邮箱地址,我会定期查看,到时候看到了直接私发给有需要的小伙伴

  4.使用phantomjs获取经过渲染的源代码

    from scrapy.http import HtmlResponse
    from selenium import webdriver
 
    driver = webdriver.PhantomJS()    #此处因为已经提前配置好了系统环境变量,driver为浏览器对象
            driver.get(response.url)      #打开指定的网址
          new_response = HtmlResponse(url=response.url,body=driver.page_source,encoding='utf-8')   #driver . page_source 为所打开网址的代码,这里用scrapy的HtmlResponse方法构建一个新的可以使用各种属性和方法的对象

 

posted @ 2020-03-10 10:35  徐阶  阅读(734)  评论(0编辑  收藏  举报