如何下载网页的确切源代码

How to download the exact source code of the webpage

本文关键字:源代码 网页 何下载 下载      更新时间:2023-09-26

我想下载网页的源代码。我使用了网址方法,即网址网址=新网址("http://a.html");

和 Jsoup 方法,但没有获得实际源代码中提到的确切数据。 例如-

<input type="image"
       name="ctl00$dtlAlbums$ctl00$imbAlbumImage"    
       id="ctl00_dtlAlbums_ctl00_imbAlbumImage"
       title="Independence Day Celebr..."
       border="0"         
       onmouseover="AlbumImageSlideShow('ctl00_dtlAlbums_ctl00_imbAlbumImage','ctl00_dtlAlbums_ctl00_hdThumbnails','0','Uploads/imagegallary/135/Thumbnails/IMG_3206.JPG','Uploads/imagegallary/135/Thumbnails/');"
       onmouseout="AlbumImageSlideShow('ctl00_dtlAlbums_ctl00_imbAlbumImage','ctl00_dtlAlbums_ctl00_hdThumbnails','1','Uploads/imagegallary/135/Thumbnails/IMG_3206.JPG','Uploads/imagegallary/135/Thumbnails/');" 
       src="Uploads/imagegallary/135/Thumbnails/IMG_3206.JPG"     
       alt="Independence Day Celebr..." 
       style="height:79px;width:148px;border-width:0px;"
/>

在这个标签中,最后一个属性"style"没有被jsoup的代码检测到。 如果我从 URL 方法下载它,它将样式标签更改为 border="/> 属性。

任何人都可以告诉我下载网页确切源代码的方法吗?我的代码是-

URL url=new URL("http://www.apcob.org/");
InputStream is = url.openStream();  // throws an IOException
BufferedReader  br = new BufferedReader(new InputStreamReader(is));
String line;
File fileDir = new File(contextpath+"''extractedtxt.txt");
Writer fw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileDir), "UTF8"));
while ((line = br.readLine()) != null)
{
 // System.out.println("line'n "+line);
  fw.write("'n"+line);
}
 InputStream in = new FileInputStream(new File(contextpath+"extractedtxt.txt";));
String baseUrl="http://www.apcob.org/";
Document doc=Jsoup.parse(in,"UTF-8",baseUrl);
System.out.println(doc);

我遵循的第二种方法是——

Document doc = Jsoup.connect(url_of_currentpage).get();

我想在java中执行此操作,并且发生此问题的网站名称为"http://www.apcob.org/"。

这可能是由于不同的user agent字符串 - 当您从浏览器浏览页面时,它会发送一个包含浏览器类型的user agent字符串。一些网站使用不同的页面响应不同的浏览器(例如移动设备)。
尝试添加与浏览器相同的user agent字符串。

您尝试下载的页面被javascript代码以某种方式修改。Jsoup是一个html解析器。它不运行javascript。

如果您想获取源代码,就像在 Chrome 中看到的那样,请使用以下工具之一:

  • UI4J
  • HtmlUnit

这三者都可以在页面内解析和运行Javascript代码。

我想这会很好,

public static void main(String[] args) throws Exception {
    //Only If you're using a proxy
    //System.setProperty("java.net.useSystemProxies", "true");
    URL url = new URL("http://www.apcob.org/");
    HttpURLConnection yc = (HttpURLConnection) url.openConnection();
    yc.addRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36");
    BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream()));
    String inputLine;
    while ((inputLine = in.readLine()) != null)
        System.out.println(inputLine);
    in.close();
}

这是一个获取网页的便捷功能。使用此方法获取 HTML 字符串。然后使用 JSOUP 解析要Document String

public static String fetchPage(String urlFullAddress) throws IOException {
//      String proxy = "10.3.100.207";
//      int port = 8080;
        URL url = new URL(urlFullAddress);
        HttpURLConnection connection = null;
//      Proxy proxyConnect = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxy, port));
        connection = (HttpURLConnection) url.openConnection();//proxyConnect);
        connection.setDoOutput(true);
        connection.setDoInput(true);
        connection.addRequestProperty("User-Agent",
                "Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.10')");
        connection.setReadTimeout(5000); // set timeout
        connection.addRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
        connection.addRequestProperty("Accept-Language", "en-US,en;q=0.5");
        connection.addRequestProperty("Accept-Encoding", "gzip, deflate");
        connection.addRequestProperty("connection", "keep-alive");
        System.setProperty("http.keepAlive", "true");
        BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
        String urlString = "";
        String current;
        while ((current = in.readLine()) != null) {
            urlString += current;
        }
        return urlString;   
}

如果问题出在 JSOUP 解析器上,请尝试使用 http://jericho.htmlparser.net/docs/index.html。它按原样解析 HTML,而不更正错误。

我注意到的其他几件事:您没有关闭fw.将UTF8替换为 UTF-8'。如果你需要解析大量的CSS,试试CSS-Parser

当通过http获取网页时,Web服务器通常会以某种方式格式化sorce;你不能使用http获得php文件的确切sorce。据我所知,完成您要求的唯一方法是使用 ftp .