js 抓取网页内容(【手语服务,助力沟通无障碍】(12月29日19:00) )
优采云 发布时间: 2021-12-29 10:07js 抓取网页内容(【手语服务,助力沟通无障碍】(12月29日19:00)
)
【手语服务助沟通障碍】12月29日19:00现场报名>>>
我们在抓取数据的时候,如果目标网站以Js方式动态生成数据,通过滚动页面进行分页,我们如何抓取呢?
比如像今日头条这样的网站:
我们可以使用 Selenium 来做到这一点。尽管 Selenium 被设计用于 Web 应用程序的自动化测试,但它非常适合数据抓取。它可以轻松绕过网站的反爬虫限制,因为 Selenium 直接运行在浏览器中,就像真正的用户在做一样。
使用Selenium,我们不仅可以抓取Js动态生成的网页,还可以抓取滚动分页的网页。
首先我们使用maven来引入Selenium依赖:
org.seleniumhq.selenium
selenium-java
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