爬取动态网页:Selenium

参考:http://blog.csdn.net/wgyscsf/article/details/53454910

概述

  • 在爬虫过程中,一般情况下都是直接解析html源码进行分析解析即可。但是,有一种情况是比较特殊的:网页的数据采用异步加载的,比如ajax加载的数据,在我们“查看网页源代码”是查看不到的。采用常规的爬虫这一块是解析不到的。
  • 第一种解决方案是采用一些第三方的工具,模拟浏览器的行为,去加载数据。比如:SeleniumPhantomJs
    • 优点:不必考虑动态页面的各种变化多端(无论动态数据如何变化,最终呈现在页面上的效果是固定的,我们只关心最终结果。),我们只用关心最终的现实结果即可。可以统一处理。
    • 缺点:性能低下,比如使用Selenium,每次我们都需要去启动一个浏览器进程;配置繁琐,不同的浏览器需要下载不同的驱动以及jar包,并且驱动和jar包之间有严格版本匹配关系,如果不匹配就不能使用(至少本人因为版本匹配的关系,花了很大的时间)。
  • 第二种解决方案是分析页面,找到对应请求接口,直接获取数据。
    • 优点:性能高,使用方便。我们直接获取原数据接口(换句话说就是直接拿取网页这一块动态数据的API接口),肯定会使用方便,并且改变的可能性也比较小。
    • 缺点:缺点也是明显的,如何获取接口API?有些网站可能会考虑到数据的安全性,做各种限制、混淆等。这就需要看开发者个人的基本功了,进行各种分析了。

1、下载安装

谷歌和驱动版本匹配可以参考这篇文章:http://blog.csdn.net/huilan_same/article/details/51896672

chromedriver下载地址(不需要FQ):http://chromedriver.storage.googleapis.com/index.html

将下载的驱动放到谷歌浏览器的安装目录下,如下图

2、导包

3、编写测试代码

package Test;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
public class SeleniumTest {
     public static void main(String[] args) {
            // 第一步: 设置chromedriver地址。一定要指定驱动的位置。
            System.setProperty("webdriver.chrome.driver",
                    "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe");
            // 第二步:初始化驱动
            WebDriver driver = new ChromeDriver();
            // 第三步:获取目标网页
            driver.get("http://blog.csdn.net/wgyscsf/article/details/52835845");
            // 第四步:解析。以下就可以进行解了。使用webMagic、jsoup等进行必要的解析。
            System.out.println("Page title is: " + driver.getTitle());
            //System.out.println("Page title is: " + driver.getPageSource());
        }
}

时间: 2024-08-18 19:24:43

爬取动态网页:Selenium的相关文章

爬取动态网页中关于构造浏览器头的注意事项

在原来爬取动态网页图片中,获取到了图片的实际地址,但是下载下来的图片是损坏的,究其原因,是服务器端阻止了访问,但是观察发现 headers = {'User-Agent': random.choice(UserAgent_List), 'Accept': "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", 'Accept-Encoding': 'gzip', } 浏览器头已经构造好了

python爬取动态网页

静态网页:根据url即可方便的爬取 动态网页:分为两种:一种是通过F12查看控制台的xhr等文件,找到包含所要爬取的内容的文件,发现这个文件的url路径跟页码有联系,那么就可以根据构造的url来进行访问爬取了.还有一种情况是查看了包含所要爬取内容的文件,发现文件url是固定不变的或者跟页码没有关系,这个时候可以通过简单的模拟浏览器点击行为来请求网页再爬取,这种方案执行效率较慢,不适于多页爬取的情况.代码如下: 1 def parse(self, response): 2 print 'parse

爬虫毕设(三):爬取动态网页

动态网页分析 按照上一篇的分析,直接使用XPath找到该标签,然后通过parse提取出数据,在写入到item中就完事了.但是,当信心满满的写完代码后却发现,控制台输入了一个简简单单的[]. 小问号你是否有很多朋友. 一顿操作猛如虎,一看输出数据无.那么这到底是怎么回事呢?我们从头开始分析. 打开NetWork,找到tv/,点开Preview,结果发现只有一个框架,内容却是空白的. 这是由于网页执行js代码,通过Ajax请求数据来重新渲染页面的.所以我们需要找到有数据的那一个请求,然后再对该请求的

利用selenium并使用gevent爬取动态网页数据

首先要下载相应的库 gevent协程库:pip install gevent selenium模拟浏览器访问库:pip install selenium selenium库相应驱动配置  https://www.cnblogs.com/Niuxingyu/p/10490882.html #导包 import gevent #猴子补丁 from gevent import monkey monkey.patch_all() import requests import os import re f

python scrapy爬取动态页面

preface:最近学习工作之外,有个异性朋友需要爬取动态网页的要求,输入关键词爬取某个专利网站在该关键词下的一些专利说明.以往直接python urllib2可破,但是那只是对于静态网页可破,但是对于用js等其他的生成的动态网页的话,则貌似不行(没试过).然后在网上找了些资料,发现scrapy结合selenium包好像可以.(之所以这么说,暂时卤主也还没实现,先记录下来.) #=====================根据官网中简单的介绍作个人理解=======================

scrapy和selenium结合抓取动态网页

1.安装python (我用的是2.7版本的) 2.安装scrapy:   详情请参考 http://blog.csdn.net/wukaibo1986/article/details/8167590 (提示,能下载源码安装的就避免用pip install **) 安装过程中遇到python扩展问题”unable to find vcvarsall.bat“的解决办法: http://blog.csdn.net/ren911/article/details/6448696 3.安装seleniu

Scrapy抓取动态网页

动态网页指几种可能: 1)需要用户交互,如常见的登录操作: 2)网页通过JS/ AJAX动态生成,如一个html里有<div id="test"></div>,通过JS生成<div id="test"><span>aaa</span></div>: 3)点击输入关键字后进行查询,而浏览器url地址不变 本篇文章不借助任何外部工具,实例操作如何以观察网络通信的方法解析动态网页. 环境:Win10

使用scrapy-selenium, chrome-headless抓取动态网页

????在使用scrapy抓取网页时, 如果遇到使用js动态渲染的页面, 将无法提取到在浏览器中看到的内容. 针对这个问题scrapy官方给出的方案是scrapy-selenium, 这是一个把selenium集成到scrapy的开源项目, 它使用selenium抓取已经渲染好(js代码已经执行完成)的动态网页. ????事实上selenium自己也没有渲染动态网页的能力,它还是得依赖浏览器, 用浏览器作为动态网页的渲染引擎. 目前主流的浏览器都能以headless模式运行, 即没有图形界面只有

c#爬取Silverlight网页 2

此前的一篇文章:C#爬取Silverlight网页,描述了如何爬取加密的Silverlight网页,并以北京空气质量官网的破解进行了说明. 按此办法,我想继续破解由中山大学先进技术研究院开发的一系列的Silverlight网站,譬如福建省空气质量实时发布系统,却一无所获.关键在于找到密钥和盐值非常难.有时候reflector并不能工作. 其实我犯了一个错误,被此前的破解思路给羁绊了.下面我们以福建省空气质量实时发布系统为例,讲述如何破解此类的网站. 同北京空气质量站点一样,当用谷歌浏览器F12调