代码也可以从我的开源项目HtmlExtractor中获取。

当我们在进行数据抓取的时候,如果目标网站是以Js的方式动态生成数据且以滚动页面的方式进行分页,那么我们该如何抓取呢?

如类似今日头条这样的网站:http://toutiao.com/

我们可以使用Selenium来搞定这件事情。Selenium的设计目的虽然是用于Web应用程序的自动化测试,但是却非常适合用来做数据抓取,可以非常简单地绕过网站的反爬虫限制,因为Selenium直接运行在浏览器中,就像真正的用户在操作一样。

使用Selenium,我们不但可以抓取Js动态生成数据的网页,而且可以抓取以滚动页面方式分页的网页。

首先,我们使用maven引入Selenium依赖:

< dependency >
< groupId >org.seleniumhq.selenium</ groupId >
< artifactId >selenium-java</ artifactId >
< version >2.47.1</ version >
</ dependency >

接下来就可以写代码抓取了:

import  org.openqa.selenium.By;
import  org.openqa.selenium.WebDriver;
import  org.openqa.selenium.WebElement;
import  org.openqa.selenium.firefox.FirefoxDriver;
import  java.util.List;
import  java.util.Random;
/**
* 如何抓取Js动态生成数据且以滚动页面方式分页的网页
* 以抓取今日头条为例说明:http://toutiao.com/
* Created by ysc on 10/13/15.
*/
public  class  Toutiao {
public  static  void  main(String[] args)  throws  Exception{
//等待数据加载的时间
//为了防止服务器封锁,这里的时间要模拟人的行为,随机且不能太短
long  waitLoadBaseTime =  3000 ;
int  waitLoadRandomTime =  3000 ;
Random random =  new  Random(System.currentTimeMillis());
//火狐浏览器
WebDriver driver =  new  FirefoxDriver();
//要抓取的网页
driver.get( "http://toutiao.com/" );
//等待页面动态加载完毕
Thread.sleep(waitLoadBaseTime+random.nextInt(waitLoadRandomTime));
//要加载多少页数据
int  pages= 5 ;
for ( int  i= 0 ; i<pages; i++) {
//滚动加载下一页
driver.findElement(By.className( "loadmore" )).click();
//等待页面动态加载完毕
Thread.sleep(waitLoadBaseTime+random.nextInt(waitLoadRandomTime));
}
//输出内容
//找到标题元素
List<WebElement> elements = driver.findElements(By.className( "title" ));
int  j= 1 ;
for ( int  i= 0 ;i<elements.size();i++) {
try  {
WebElement element = elements.get(i).findElement(By.tagName( "a" ));
//输出标题
System.out.println((j++) +  "、"  + element.getText() +  " "  + element.getAttribute( "href" ));
} catch  (Exception e){
System.out.println( "ignore " +elements.get(i).getText()+ " because " +e.getMessage());
}
}
//关闭浏览器
driver.close();
}
}

抓取Js动态生成数据且以滚动页面方式分页的网页相关推荐

  1. 抓取js动态生成的数据分析案例

    需求: 爬取https://www.xuexi.cn/f997e76a890b0e5a053c57b19f468436/data018d244441062d8916dd472a4c6a0a0b.htm ...

  2. js动态生成数据列表

    我们通常会使用table标签来展示数据内容,由于需要展示的数据内容是随时更换的,所以不可能将展示的数据列表写死在html写死在页面中,而是需要我们根据后台传来的数据随时更换,这个时候就需要我们使用js ...

  3. js动态渲染html页面,利用Scrapy-Splash抓取JS动态渲染的网页数据

    随着越来越多的网站开始用JS在客户端浏览器动态渲染网站,导致很多我们需要的数据并不能由原始的html中获取,再加上Scrapy本身并不提供JS渲染解析的功能,通常对这类网站数据的爬取我们一般采用两种方 ...

  4. 写一个静态HTML页面,直接写HTML代码和用JS动态生成代码,哪种方式要好

    如果写一个静态HTML页面,直接写HTML代码和用JS动态生成代码,哪种方式要好点?为什么? 不考虑人力因素(手写HTML太费时间排除),请从读取和解析或者其他的角度分析.谢谢 添加评论 分享 按投票 ...

  5. 2)JS动态生成HTML元素的爬取

    2)JS动态生成HTML元素的爬取 import java.util.List;import org.openqa.selenium.By; import org.openqa.selenium.We ...

  6. js 动态生成html(js根据后台返回数据生成html页面中的table标签)(转义字符)

    js 动态生成html table标签中内容js生成 html代码 js代码 js 动态生成html 触发事件传参字符转义 table标签中内容js生成 html代码 <div><t ...

  7. 通过JS代码动态生成HTML表格(Table),Input框,Button按钮.并且通过Input框的值进行查询动态生成数据填写在指定的表格里

    本人公众号上线啦!!! 公众号与博客名一样:没有腹肌的程序猿 公众号文章类型:工作上所遇到的需求实现方案分享. 此外也会提供一些数据集供大家使用.(这个还在规划中,毕竟打工人时间挺紧的,哈哈哈哈) 到 ...

  8. 通过爬取天猫商品评论实例分析Python爬取ajax动态生成的数据

    本文主要通过爬取天猫商品kindle的评论为例来说明利用python爬取ajax动态生成的数据的方式,本文使用的工具如下: 工具 chrome浏览器[寻找评论的动态链接] python3.5[执行代码 ...

  9. python爬百度新闻_13、web爬虫讲解2—Scrapy框架爬虫—Scrapy爬取百度新闻,爬取Ajax动态生成的信息...

    crapy爬取百度新闻,爬取Ajax动态生成的信息,抓取百度新闻首页的新闻rul地址 有多网站,当你浏览器访问时看到的信息,在html源文件里却找不到,由得信息还是滚动条滚动到对应的位置后才显示信息, ...

  10. python 豆瓣评论分析方法_使用python抓取豆瓣top250电影数据进行分析

    抓取豆瓣Top250电影数据的链接和电影名称 代码如下: import urllib.request as urlrequest from bs4 import BeautifulSoup impor ...

最新文章

  1. JAVA-初步认识-第十一章-异常-概述
  2. java的数据类型、变量类型笔记总结
  3. 计算机主机漏电,电脑机箱漏电怎么办?机箱电源漏电原因及解决方法
  4. Java 实现日期 Date 的赋值
  5. 【数据结构与算法】之深入解析“游乐园的迷宫”的求解思路与算法示例
  6. html 正则表达式验证金额,js金额校验,js正则表达式,包含正负,小数点后两位...
  7. 开发必备知识点--django项目启动时,url加载之前,执行某个.py文件
  8. telnet黑屏就是通_黑屏的智能农贸市场竟通过验收?市场监管部门:工作力度不够 | 电视问政...
  9. python为什么需要编辑器_Python是个什么鬼?为什么设计大牛都在学它?!
  10. [Swift]Array(数组)扩展
  11. 推荐几款好用的MySQL开源客户端,建议收藏
  12. 【干货】32个EMC标准电路分享!
  13. IBM和DoE推出世界上最快的超级计算机
  14. 浅析Promise的then方法
  15. 高等代数 线性空间(第8章)1 线性空间与子空间
  16. 计算机操作系统(慕课版-汤小丹)习题
  17. 移动式无线蓝牙RFID+二维码扫描一体机|读卡器HX-R58C-B在安卓与苹果手机上如何操作?
  18. 开源流媒体服务器ZLMediaKit在Windows上运行、配置、按需拉流拉取摄像头rtsp视频流)并使用http-flv网页播放
  19. Prolog系列学习-1
  20. 人民币贬值不是大问题

热门文章

  1. Netty源码分析第3章(客户端接入流程)----第3节: NioSocketChannel的创建
  2. Xilinx Artix-7 Aurora调试过程中遇到的问题
  3. 浅谈java 之 Map
  4. 学做网站(1):环境搭建
  5. weblogic启动失败:Could not obtain the localhost address 解决办法
  6. 8.确保0对于值类型是有效的
  7. Rainbow分页解决方案
  8. 关于@NotNull 和 @Nullable
  9. Thinking in Java 17.8 理解Map
  10. .Net将Base64字符串转换为Image对象或保存为图片到本地