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

时间:2022-07-30 23:52:47

一.浏览器的构成

  许多开发商提供了商用的浏览器来解释和显示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方法构建一个新的可以使用各种属性和方法的对象

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

  1. 爬虫之图片懒加载技术、selenium工具与PhantomJS无头浏览器

    图片懒加载技术 selenium爬虫简单使用 2.1 selenium简介 2.2 selenium安装 2.3 selenium简单使用 2.3.1 selenium使用案例 2.3.2 selen ...

  2. 第三百三十七节,web爬虫讲解2—PhantomJS虚拟浏览器+selenium模块操作PhantomJS

    第三百三十七节,web爬虫讲解2—PhantomJS虚拟浏览器+selenium模块操作PhantomJS PhantomJS虚拟浏览器 phantomjs 是一个基于js的webkit内核无头浏览器 ...

  3. 爬虫之selenium模块;无头浏览器的使用

    一,案例 爬取站长素材中的图片:http://sc.chinaz.com/tupian/gudianmeinvtupian.html import requests from lxml import ...

  4. 基于Python, Selenium, Phantomjs无头浏览器访问页面

    引言: 在自动化测试以及爬虫领域,无头浏览器的应用场景非常广泛,本文将梳理其中的若干概念和思路,并基于代码示例其中的若干使用技巧. 1. 无头浏览器 通常大家在在打开网页的工具就是浏览器,通过界面上输 ...

  5. 十六 web爬虫讲解2—PhantomJS虚拟浏览器+selenium模块操作PhantomJS

    PhantomJS虚拟浏览器 phantomjs 是一个基于js的webkit内核无头浏览器 也就是没有显示界面的浏览器,利用这个软件,可以获取到网址js加载的任何信息,也就是可以获取浏览器异步加载的 ...

  6. 无头浏览器phantomJS

    selenium: 有头浏览器的代表(selenium+python也可实现静默运行 引入python的一个包,包叫:虚拟屏幕pyvirtualdisplay) PhantomJS : 无头浏览器的代 ...

  7. 09 Scrapy框架在爬虫中的使用

    一.简介 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架.它集成高性能异步下载,队列,分布式,解析,持久化等. Scrapy 是基于twisted框架开发而来,twisted是一个 ...

  8. 基于Scrapy框架的Python新闻爬虫

    概述 该项目是基于Scrapy框架的Python新闻爬虫,能够爬取网易,搜狐,凤凰和澎湃网站上的新闻,将标题,内容,评论,时间等内容整理并保存到本地 详细 代码下载:http://www.demoda ...

  9. 爬虫之 图片懒加载, selenium , phantomJs, 谷歌无头浏览器

    一.图片懒加载 懒加载 :    JS 代码  是页面自然滚动    window.scrollTo(0,document.body.scrollHeight)   (重点) bro.execute_ ...

随机推荐

  1. 【BZOJ1503】[HAOI2007]反素数ant 搜索

    结论题...网上讲的好的很多... #include <iostream> using namespace std; ]={,,,,,,,,,},num=; long long ans,n ...

  2. XPath Axes(轴)

    XML 实例文档 我们将在下面的例子中使用此 XML 文档: <?xml version="1.0" encoding="ISO-8859-1"?> ...

  3. jq 确定删除方法与文件删除

    var choice=confirm("您确认要删除吗?", function() { }, null);                if(choice)           ...

  4. HighCharts学习笔记

    目录 xAxis自定义时间刻度的显示 xAxis自定义时间刻度 我们先来看下HighCharts图表的xAxis对象有哪些属性(红色标记重要属性): allowDecimals: Booleancat ...

  5. javascript中apply和eval结合的强大用法

        eval是一个函数,可以接受一个参数,这个参数可以作为js语句被解释性的执行,利用这个特性,eval和apply结合起来,可以大大简化代码  如下例子 <a class="cl ...

  6. nodejs querystring

    Query String querystring.parse(str[, sep][, eq][, options]) querystring.stringify(obj[, sep][, eq][, ...

  7. Ubuntu 16&period;04系统下出现E&colon; 无法下载 http&colon;&sol;&sol;ppa&period;launchpad&period;net&sol;fcitx-team&sol;nightly&sol;ubuntu&sol;dists&sol;xenial&sol;main&sol;binary-amd64&sol;Packages 404 Not Found

    在安装完成Chrome浏览器后,终端执行以下更新命令 sudo apt-get update 时出现E: 无法下载 http://ppa.launchpad.net/fcitx-team/nightl ...

  8. 【洛谷1640】&lbrack;SCOI2010&rsqb;连续攻击游戏

    题目描述 lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备时,他只能使用该装备的某一个属性.并且每种装备 ...

  9. Docker系列05—Docker 存储卷详解

    本文收录在容器技术学习系列文章总目录 1.存储卷介绍 1.1 背景 (1)docker 的 AFUS 分层文件系统 docker镜像由多个只读层叠加面成,启动容器时,docker会加载只读镜像层并在镜 ...

  10. JavaScript经典片段

    typeof jQuery != "undefined" || importjQuery(); 判断jQuery对象是否存在,如果不存在就调用importjQuery()方法加载j ...