scrapy分页抓取网页(如何抓取目标网站是以Js的方式动态生成数据的网页)
优采云 发布时间: 2022-02-07 12:14scrapy分页抓取网页(如何抓取目标网站是以Js的方式动态生成数据的网页)
我们在爬取数据的时候,如果目标网站是以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