0
点赞
收藏
分享

微信扫一扫

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


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

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

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

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



抓取Js动态生成数据且以滚动页面方式分页的网页_System



    1. <dependency>
    2. <groupId>org.seleniumhq.selenium</groupId>
    3. <artifactId>selenium-java</artifactId>
    4. <version>2.47.1</version>
    5. </dependency>



      

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



    抓取Js动态生成数据且以滚动页面方式分页的网页_System


    1. import
    2. import
    3. import
    4. import
    5.   
    6. import
    7. import
    8.   
    9. /**
    10.  * 如何抓取Js动态生成数据且以滚动页面方式分页的网页
    11.  * 以抓取今日头条为例说明:http://toutiao.com/
    12.  * Created by ysc on 10/13/15.
    13.  */
    14. public class
    15. public static void main(String[] args) throws
    16.   
    17. //等待数据加载的时间
    18. //为了防止服务器封锁,这里的时间要模拟人的行为,随机且不能太短
    19. long waitLoadBaseTime = 3000;  
    20. int waitLoadRandomTime = 3000;  
    21. new
    22.   
    23. //火狐浏览器
    24. new
    25. //要抓取的网页
    26. "http://toutiao.com/");  
    27.   
    28. //等待页面动态加载完毕
    29.         Thread.sleep(waitLoadBaseTime+random.nextInt(waitLoadRandomTime));  
    30.   
    31. //要加载多少页数据
    32. int pages=5;  
    33. for(int i=0; i<pages; i++) {  
    34. //滚动加载下一页
    35. "loadmore")).click();  
    36. //等待页面动态加载完毕
    37.             Thread.sleep(waitLoadBaseTime+random.nextInt(waitLoadRandomTime));  
    38.         }  
    39.   
    40. //输出内容
    41. //找到标题元素
    42. "title"));  
    43. int j=1;  
    44. for(int i=0;i<elements.size();i++) {  
    45. try
    46. "a"));  
    47. //输出标题
    48. "、" + element.getText() + " " + element.getAttribute("href"));  
    49. catch
    50. "ignore "+elements.get(i).getText()+" because "+e.getMessage());  
    51.             }  
    52.         }  
    53.   
    54. //关闭浏览器
    55.         driver.close();  
    56.     }  
    57. }



     


    举报

    相关推荐

    0 条评论