`

java模拟浏览器抓取网站信息和下载附件

 
阅读更多
package com.teamdev.jxbrowser.chromium.demoTest.Huhehaote;
import java.awt.BorderLayout;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import java.util.logging.Level;

import javax.swing.JFrame;
import javax.swing.WindowConstants;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import com.teamdev.jxbrowser.chromium.Browser;
import com.teamdev.jxbrowser.chromium.BrowserPreferences;
import com.teamdev.jxbrowser.chromium.LoggerProvider;
import com.teamdev.jxbrowser.chromium.events.FinishLoadingEvent;
import com.teamdev.jxbrowser.chromium.events.LoadAdapter;
import com.teamdev.jxbrowser.chromium.swing.BrowserView;
/**
* 爬取食药以及附件信息
* */
public class Test_Jsopu {


public static void main(String[] args) {
//模拟浏览器
LoggerProvider.getBrowserLogger().setLevel(Level.SEVERE);
LoggerProvider.getIPCLogger().setLevel(Level.SEVERE);
LoggerProvider.getChromiumProcessLogger().setLevel(Level.SEVERE);

        final Browser browser = new Browser();
        BrowserView browserView = new BrowserView(browser);
       
        BrowserPreferences preferences = browser.getPreferences();
        preferences.setImagesEnabled(false);
       
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.add(browserView, BorderLayout.CENTER);
        frame.setSize(700, 500);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
try {
//
String url="";
for(int i=0;i<7;i++){
if(i==0){
url="http://www.sda.gov.cn/WS01/CL1698/index.html";
}else{
url="http://www.sda.gov.cn/WS01/CL1698/index_"+i+".html";
}
search(browser,frame,url);
}

} catch (Exception e) {
e.printStackTrace();
}
}
//一次页面检索
public static void search(final Browser br ,JFrame frm,final String url) throws Exception {
new Thread().sleep(3000);
    Document doc = null;
    String attrUrl =url;
System.out.println("attrUrl" + attrUrl);
try{
      invokeAndWaitReady(br, new Runnable() {
    public void run() {
    br.loadURL(url);
    }
});
         } catch (Exception e2) {
e2.printStackTrace();
}
         String html = br.getHTML();
         doc = Jsoup.parse(html);
String text = doc.text();
System.out.println(text);
Elements els= doc.getElementsByAttributeValue("class", "ListColumnClass15");
System.out.println(els.size());
for (Element el : els) {
String title=el.getElementsByTag("a").get(0).text();
String href="http://www.sda.gov.cn/WS01"+el.getElementsByTag("a").attr("href").replace("..", "");
//System.out.println("title="+title);
System.out.println("href="+href);
try {
search2( br,frm,href,title);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
continue;
}
}
}

public static void search2(final Browser br ,JFrame frm,final String url,String title) throws Exception {
new Thread().sleep(3000);
    Document doc = null;
    String attrUrl =url;
System.out.println("attrUrl" + attrUrl);
     try{
    invokeAndWaitReady(br, new Runnable() {
    public void run() {
    br.loadURL(url);
    }
});
      } catch (Exception e2) {
e2.printStackTrace();
}
      String html = br.getHTML();
      doc = Jsoup.parse(html);
        
     
String  strs[]=doc.html().split("line-height:16px");
for(int i=0;i<strs.length;i++){
Thread.sleep(3000);
if(i!=0&&i!=strs.length){
String str="http://www.sda.gov.cn/"+strs[i].split("href=\"")[1].split("\">")[0];
String firlname=strs[i].split("href=\"")[1].split("\">")[1].split("</")[0];

System.out.println("title:"+title);
System.out.println("str:"+str);
System.out.println("firlname:"+firlname);
runDownLoad(title, str,firlname);

}
System.out.println("---------------------------------------");
}





}

public static void invokeAndWaitReady(Browser browser,Runnable runnable) {
    final CountDownLatch latch = new CountDownLatch(1);
    LoadAdapter listener = new LoadAdapter() {
        @Override
        public void onFinishLoadingFrame(FinishLoadingEvent event) {
            if (event.isMainFrame()) {
                latch.countDown();
            }
        }
    };
    browser.addLoadListener(listener);
    try {
        runnable.run();
        try {
            if (!latch.await(60, TimeUnit.SECONDS)) {
                //throw new RuntimeException(new TimeoutException());
            }
        } catch (InterruptedException ignore) {
        ignore.printStackTrace();
            Thread.currentThread().interrupt();
        }
    } finally {
        browser.removeLoadListener(listener);
    }
}


public static void runDownLoad(String title,String fileurl,String filename){ 
         // 构造URL 
        URL url; 
        try { 
            url = new URL(fileurl); 
             // 打开URL连接 
            URLConnection con = (URLConnection)url.openConnection(); 
             // 得到URL的输入流 
            InputStream input = con.getInputStream(); 
            // 设置数据缓冲 
            byte[] bs = new byte[1024 * 2]; 
            // 读取到的数据长度 
            int len; 
            // 输出的文件流保存图片至本地
            String path1 = "c:/aa/"+title;
            File f = new File(path1);
            f.mkdirs();
           // String hzm=fileurl.split("\\.")[fileurl.split("\\.").length-1];
            OutputStream os = new FileOutputStream(path1+"\\"+filename);
         
            while ((len = input.read(bs)) != -1) { 
            os.write(bs, 0, len); 
            } 
            os.close(); 
            input.close(); 
        } catch (MalformedURLException e) { 
            // TODO 自动生成的 catch 块 
            e.printStackTrace(); 
        } catch (IOException e) { 
            // TODO 自动生成的 catch 块 
            e.printStackTrace(); 
        } 
         
    }

}
分享到:
评论

相关推荐

    java模拟微信浏览器访问.rar

    - **HttpURLConnection**:Java标准库提供的基础HTTP客户端,可以用来发送GET和POST请求,模拟浏览器行为。 - **Apache HttpClient**:一个功能强大的HTTP客户端库,提供了更灵活和高效的API来处理HTTP请求。 - *...

    使用PHP curl模拟浏览器抓取网站信息

    本文将详细解释如何使用PHP cURL进行网页抓取和模拟浏览器行为。 首先,了解cURL的基本概念。cURL(Client URL Library)是一个开源的库,支持多种网络协议,如FTP、FTPS、HTTP、HTTPS、GOPHER、TELNET、DICT、FILE...

    模拟浏览器抓取网页内容(审查元素中内容)

    通过webBrowser模拟浏览器,获取网页内容。 大致思路: 1、webBrowser加载网页 (如有Ajax动态加载分页的网站,需要配合页面动作,直到页面加载完成,如:滚动条操作) 2、加载完成后获取webBrowser.Document (配合...

    java模拟http请求登陆抓取海投网信息

    总的来说,这个项目涵盖了网络编程、网页抓取、数据库操作等多个方面,通过Java实现了一个完整的数据抓取和存储流程。在实际应用中,还需要注意遵守相关法律法规,尊重网站的robots.txt协议,以及合理使用抓取技术,...

    java web网站常用抓取其他网站内容

    Java Web网站抓取其他网站内容是一项常见的技术需求,主要用于数据挖掘、信息聚合或者自动化测试等场景。本篇文章将深入探讨如何使用Java在Web环境中抓取其他网站的数据。 首先,我们需要了解的是网页抓取的基本...

    python模拟google浏览器抓取数据

    ### Python 模拟 Google 浏览器抓取数据 ...通过上述步骤,我们就能够利用Python和Selenium来模拟Google浏览器,自动化地抓取网页数据,并将数据保存到本地文件或数据库中。这对于自动化测试、数据抓取等场景非常有用。

    php 模拟浏览器请求网页见容

    当我们需要从网页抓取内容,而直接访问又有困难时,可以利用PHP模拟浏览器请求网页内容。这一技术常被称为“网页抓取”或“屏幕抓取”,在数据分析、信息聚合、自动化测试等场景下非常实用。 首先,模拟浏览器请求...

    浏览器视频抓取插件【亲测可用】

    某些插件甚至可以处理加密的视频流,通过模拟浏览器的行为来获取未加密的链接。 使用这类插件时需要注意版权问题,因为并非所有在线视频都允许下载。尊重他人的知识产权是非常重要的,确保只下载那些允许或鼓励用户...

    java抓取网站数据

    在开始抓取之前,需要对目标网站进行一定的分析,了解其结构和请求方式等信息。 ##### 2.1 目标网站分析 1. **请求URL**:抓取数据的第一步是确定目标URL。例如,在51job网站上搜索Java职位时,请求的URL为`...

    windows10环境下php使用selenium+chromedriver来模拟浏览器抓取(坑已填完)

    整个CSDN都是写的python的,python抓取教程一大堆,没必要再传了,这里讲的是PHP的,但可惜的是,整个网络都没讲到最关键一点,导致一直尝试不成功,初始代码,配置参数和超时都已说明, 压缩包中有文档,填坑的...

    一个用java实现的抓取网站程序

    为应对这些策略,程序可能需要动态改变请求头(如User-Agent)、使用代理IP池进行轮换、设置合理的爬取间隔、模拟浏览器行为等。这些策略的实施,可以使爬虫在面对反爬机制时保持存活,保证数据抓取的连续性。 在...

    模拟浏览器打开相应网页

    在IT行业中,模拟浏览器打开网页是一项常见的任务,尤其在自动化测试、数据抓取或网络爬虫等场景下显得尤为重要。这个过程通常涉及到编程语言(如Python、JavaScript等)中的特定库或工具,它们能够模拟浏览器的行为...

    selenium爬虫使用Microsoft Edge浏览器抓取网页信息

    selenium爬虫使用Microsoft Edge浏览器抓取网页信息示例,功能介绍: 1、使用python+selenium; 2、使用Microsoft Edge浏览器; 3、使用XPATH获取网页元素; 4、获取网页的button,并自动点击,刷新下一页,直到获取...

    java网络爬虫模拟登入抓取数据

    在"GetData_Demo"的示例中,可能包含了使用Java实现的模拟登录和数据抓取代码。通过分析和运行这个示例,你可以更深入地理解如何在实际项目中应用上述概念。这个过程可能涉及网络编程、HTML解析、HTTP协议、Cookie...

    python模拟firefox浏览器抓取数据

    为了实现用Python模拟Firefox浏览器抓取网页数据的功能,我们需要准备并安装一些必要的工具和库。 ##### 1.1 安装 Selenium Selenium 是一个强大的用于Web应用程序测试的工具,它支持多种编程语言(如 Python),...

    Java实现网页抓取

    在IT行业中,网页抓取是一项基础且重要的技能,它允许我们自动地从互联网上获取大量信息,进行数据分析、搜索引擎优化、市场研究等用途。在这个Java实现网页抓取的项目中,我们将探讨如何利用Java编程语言来抓取网页...

    Java网页抓取数据

    以上是Java网页抓取数据的基本知识框架,实践中还需要根据具体需求和目标网站的特点进行灵活调整。`WebpageCaptureDemo`可能是一个示例项目,包含了上述部分或全部技术的应用,通过阅读和学习这个示例,可以更好地...

    java网页抓取数据

    Java网页抓取数据是互联网数据挖掘的一个重要领域,它允许开发者通过编程方式获取网页上的信息,从而实现自动化分析、监控或构建智能应用。在Java中,我们通常使用HTTP客户端库和HTML解析工具来实现这一目标。本文将...

    使用JCEF(chromium内核)开发的抓取数据浏览器,可以用来制作浏览器,也可以用来制作爬虫

    1. **模拟浏览器行为**:使用JCEF,开发者可以模拟真实用户的行为,比如执行JavaScript、处理动态加载的内容,这对于爬取依赖JavaScript的网站尤其有用。 2. **自动化控制**:通过Java接口,可以方便地控制JCEF...

Global site tag (gtag.js) - Google Analytics