网页数据抓取怎么写(代码也可以从我的开源项目HtmlExtractor中获取。。 )
优采云 发布时间: 2021-12-14 07:16网页数据抓取怎么写(代码也可以从我的开源项目HtmlExtractor中获取。。
)
代码也可以从我的开源项目HtmlExtractor获取。
我们在抓取数据的时候,如果目标网站是在Js中动态生成数据,通过滚动来分页,那我们怎么抓取呢?
类似于今日头条网站:
我们可以使用 Selenium 来做到这一点。尽管 Selenium 是为 Web 应用程序的自动化测试而设计的,但它非常适合用于数据捕获。可以轻松绕过网站的反爬虫限制,因为Selenium直接运行在浏览器中,就像真实用户在操作一样。
使用Selenium,我们不仅可以抓取Js动态生成的网页,还可以抓取滚动页面分页的网页。
首先我们使用maven来引入Selenium依赖:
< dependency >
< groupId >org.seleniumhq.selenium
< artifactId >selenium-java
< version >2.47.1
接下来就可以编写代码进行捕获了:
<p>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