java - 如何优化这段丑陋的代码?

标签 java string web-crawler

前几天我提出了一个问题here ,但最后我决定自己做,因为时间问题,现在我有更多的时间来解决它:D我喜欢jSoup,但我有点老派,并且更喜欢自己做(感谢@Bakkal无论如何)。

我设法编写了这段代码,目前它工作正常,但是如果网页构造得不好,它会破坏代码,例如,如果它不以 http 开头,则代码将找不到它,并且如果网址不是以我放入的内容之一结尾,那么它将返回一个非常难看的地址..例如

http://www.google.com/ hey dude how are you? great, eating at jack's

我的结果是:

http://www.google.com/ hey dude how are you? great, eating at jack

我愿意接受任何建议,我将继续提出我的问题,然后发布代码

  1. 如果我没有确切的结尾,代码就会中断
  2. 如果我将空格“”作为分隔符,我将丢失地址中包含空格的所有页面
  3. 我想捕获所有地址,而不仅仅是以 http 开头的地址,例如 www.google.com 是有效地址,contacts.google.com 也是有效地址

谢谢你所做的一切:D

File txtUrlSpecialFile = new File("pepe.txt");
            FileWriter txtUrlSpecial;
            txtUrlSpecial = new FileWriter(txtUrlSpecialFile);
            txtUrlSpecial.write(profundidad-1);

            for(int j=0;j<bigString.length()-5;j++){ //I put 5 but I can put more
                if(bigString.substring(j, j+4).equals("http")){
                    while(bigString.charAt(j)!='"' && bigString.charAt(j)!='<'&& bigString.substring(j, j)!="'"){
                        txtUrlSpecial.write(bigString.charAt(j));
                        j++;
                    }
                    txtUrlSpecial.write(SingletonFunction.getNewLine());
                }
            }
            txtUrlSpecial.close();

最佳答案

如果我理解正确的话,您正在尝试从 HTML 文件中从属性(例如“href”)和文本中试探性地提取 URL。

  • 您希望它能够处理格式错误的 HTML
  • 您希望它能够处理格式错误的网址;例如包含空格的网址
  • 你不希望它犯任何错误;例如你的例子。

我告诉你,你的要求是不可能的。例如,应该从以下文本中提取什么内容:

Go to the URL http://example.com/ this and that.  And if that doesn't work, 
I recommend that you go read the http specification.

“这个和那个”是否应该是 URL 的一部分?你的软件应该如何解决这个问题?如果文档作者的意思与你的启发式所说的相反怎么办?那么“http 规范”呢……这显然不是 URL。

这是另一个稍微微妙的例子:

First, go to the URL http://example.com/index.html.
Then click on the "login" link.

您的软件是否应该提取“http://example.com/index.html .”或“http://example.com/index.html”?根据 URL 规范,两者都是有效的 URL。你的软件可能会去掉最后的“.”。因为它很可能是标点符号,但它可能是错误的。

我的建议:

  1. 不要认为您可以比现有的宽松 HTML 解析器做得更好。无论你来自哪里,你能做到这一点的机会几乎为零。
  2. 不要认为您的软件不会出错。 100% 的准确性要求您的软件能够读取文件创建者的想法。 (可以说,即使这样还不够。)
  3. 注意网址出现的上下文。您需要使用不同的启发式方法从 HTML 属性和文本中提取 URL。
  4. 准确注意什么是合法网址,什么不是合法网址。
  5. 完整阅读并理解 HTML 和 URL/URI 规范的所有相关部分。虽然在格式错误的文档中犯错误是可以接受的,但无法从格式正确的 HTML 文档的属性中提取格式正确的 URL 是不可原谅的。

关于java - 如何优化这段丑陋的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3379786/

相关文章:

java - 发生致命异常

python - 如何使用 Scrapy 抓取下一页

java - 并发任务执行

java - 如果按下按钮,则重新启动我的 GUI

javascript - 用于检查多个匹配项的正则表达式

java - 如何检测字符串是否包含任何从右到左的字符?

python - Scrapy 爬取重复数据

javascript - 使用 Node.js,在 XMLHttpRequest 期间或之后创建一个新的 XMLHttpRequest

java - 从子类中定义的枚举调用方法 - Java

java - 字符串中有多少个非视觉符号