【问题标题】:Issues in developing web scraper网络爬虫开发中的问题
【发布时间】:2012-04-14 06:24:01
【问题描述】:

我想开发一个平台,用户可以在其中输入 URL,然后我的网站将在 iframe 中打开网页。现在用户只需右键单击即可修改他的网站,我将为他提供“删除此元素”、“复制此元素”等选项。我快结束了。许多网站都在iframe 中完美打开,但对于一些网站,出现了一些错误。我无法确定原因,因此请求您的帮助。

我已经解决了其他问题,例如 XSS 问题。
这是我遵循的程序:-
使用 JavaScript 并将请求发送到我的 Java 服务器,该服务器连接到用户指定的 URL 并获取 HTML,然后使用 Jsoup HTML 解析器将相对 URL 转换为绝对 URL,然后用 Java 将 HTML 保存到我的磁盘。然后我将保存的 HTML 渲染到我的iframe

有什么地方不对吗?
一些网站运行良好,但有些则不然。

例如:-
当我试图打开 http://www.snapdeal.com 它给了我 Uncaught TypeError: Cannot read property 'paddingTop' of undefined 错误。我不明白为什么会这样..

更新 我真的很想知道这是如何实现的? @http://www.proxywebsites.in/browse.php?u=Oi8vd3d3LnNuYXBkZWFsLmNvbQ%3D%3D&b=13&f=norefer

【问题讨论】:

    标签: javascript xss web-scraping jsoup


    【解决方案1】:

    2 期,随便挑一个:

    • 您的服务器端代理代码包含错误
    • 很多网站要么有明确的帧中断代码,要么至少期望是顶级帧。

    【讨论】:

    • 我已经发布了我的服务器端代码,现在在 Lina 的建议下,我没有将页面加载到 iframe 中,而是在浏览器中打开页面,它不适用于少数站点。您对其他可能的错误有任何想法
    【解决方案2】:

    您可以再尝试一件事。在您的代理脚本中,您将网页保存在磁盘上,然后加载到 iframe 中。我认为不要在 iframe 中加载您保存在磁盘上的页面,而是尝试在浏览器中打开该页面。所有那些限制其页面加载到 iframe 的网站现在都将打开而不会出现任何错误。 试试这个,我认为这是一项工作

    【讨论】:

    • 嗨,它现在适用于大多数网站但是 snapdeal.com 仍然抛出同样的错误,它的背景图片没有加载到我的页面中..
    【解决方案3】:

    我的代理服务器端代码:-

    DateFormat df = new SimpleDateFormat("ddMMyyyyHHmmss");
        String dirName = df.format(new Date());
    
        String dirPath = "C:/apache-tomcat-7.0.23/webapps/offlineWeb/" + dirName;
        String serverName = "http://localhost:8080/offlineWeb/" + dirName;
    
        boolean directoryCreated = new File(dirPath).mkdir();
        if (!directoryCreated) 
            log.error("Error in creating directory");
    
        String html = Jsoup.connect(url.toString()).get().html();
        doc = Jsoup.parse(html, url);
    
        links = doc.select("link");
        scripts = doc.select("script");    
        images = doc.select("img");
    
    for (Element element : links) {
            String linkHref = element.attr("abs:href");
            if (linkHref != "") {
                element.attr("href", linkHref);
            }
    }
    
    for (Element element : scripts) {
        String scriptSrc = element.attr("abs:src");
        if (scriptSrc != "") {
            element.attr("src", scriptSrc);
        }
    }
    
    for (Element element : images) {
        String imgSrc = element.attr("abs:src");
            if (imgSrc != "") {
                element.attr("src", imgSrc);
                log.info(imgSrc);
            }
    }
    

    现在我只是返回我保存我的 html 文件的路径 我的服务器代码就是这样

    【讨论】:

    • 您的这么多代码似乎是正确的。可能是某些网站不允许在 iframe 中打开他们的网站。这是我能想到的唯一原因
    猜你喜欢
    • 2019-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-03
    • 2013-08-21
    • 1970-01-01
    • 2015-06-26
    相关资源
    最近更新 更多