【问题标题】:Using Jsoup how do I got through multiple URLS使用 Jsoup 如何通过多个 URL
【发布时间】:2018-02-16 18:05:12
【问题描述】:

我正在创建一个网络 scraper,它通过来自同一域的多个 URL。我有一个带有 URL 列表的文本文件。我使用了 readAllBytes 方法,因此我可以读取文本文件并将其存储在字符串中。 这是我运行程序时遇到的错误。我不确定是什么导致了 URL 中的非法字符。

Illegal character in URL
at sun.net.www.protocol.http.HttpURLConnection.checkURL(HttpURLConnection.java:850)
at sun.net.www.protocol.http.HttpURLConnection.<init>(HttpURLConnection.java:857)
at sun.net.www.protocol.http.Handler.openConnection(Handler.java:62)
at sun.net.www.protocol.http.Handler.openConnection(Handler.java:57)
at java.net.URL.openConnection(URL.java:979)
at com.web.DogsDataExtractorV.GetAllDogsData(DogsDataExtractorV.java:74)
at com.web.DogsDataExtractorV.main(DogsDataExtractorV.java:115)

这是我的代码的一部分,我将文本文件存储在一个字符串中,也是我为 url 指定字符串的地方,

try {
            Path file_Path = Paths.get("/home/c/cerda/DogsData/upload", "dog-links.txt");
            byte[] link_list = Files.readAllBytes(file_Path);
            String Link_String = new String(link_list);
            System.out.println(Link_String);
            GetAllDogsData(Link_String);

        }catch (Exception e) {
            System.out.println(e);

这是我设置在哪里查看信息并将数据保存到的代码部分。

Document doc = Jsoup.parse(file, null);
        Elements resulCharact = doc.select(("span[class=characteristic item-trigger-title]"));
        for (Element link : resulCharact ) {
            writeToFile("../upload/characteristic.txt", link.text()+ "\n");
      }
        Elements resulRating = doc.select(("span[class=star-block stars-column]"));
        for (Element ratings : resulRating) {
            writeToFile("../upload/ratings.txt", ratings.text()+ "\n");

        }

文本文件示例

http://dogtime.com/dog-breeds/boerboel

http://dogtime.com/dog-breeds/bolognese

http://dogtime.com/dog-breeds/border-collie

http://dogtime.com/dog-breeds/border-terrier

http://dogtime.com/dog-breeds/borzoi

http://dogtime.com/dog-breeds/boston-terrier

http://dogtime.com/dog-breeds/bouvier-des-flandres

http://dogtime.com/dog-breeds/boxer

http://dogtime.com/dog-breeds/boykin-spaniel

http://dogtime.com/dog-breeds/bracco-italiano

http://dogtime.com/dog-breeds/briard

该代码适用于一个网址。如果有人能帮忙谢谢。

【问题讨论】:

  • 它说:“URL 中有非法字符”当它抱怨时,您尝试连接的 URL 是什么?
  • 您能否更新问题以显示文本文件的示例?
  • @Justin 我用文本文件的样本和我更改的其他内容更新了我的问题。我仍然对 URL 中的非法字符有同样的问题。

标签: java web-scraping jsoup


【解决方案1】:

您得到的异常清楚地说明了问题 - Illegal character in URL。这意味着您将不是 URL 的内容传递给 URL.openConnection。我怀疑这是因为您读取文件的方式 - 为什么将 \\A 作为分隔符传递?如果那里有多个 URL,那将导致 Scanner 一次返回所有 URL。这就是为什么当文件中只有一个 URL 时它可以工作。

使用分隔文件中 URL 的实际字符,并一一读出。

【讨论】:

  • 现在我得到了这个java.io.IOException: No such file or directory
  • 这不是因为不同的分隔符。此错误表示您的程序在指定位置找不到文件。
  • 只读取第一个 URL。有没有更好的方法来存储文本文件并使其逐行读取?
  • 继续拨打 Scanner 的next()
  • 我稍微更新了我的代码并进行了一些更改,但仍然没有解决我遇到的非法字符问题。
猜你喜欢
  • 2013-12-07
  • 2011-12-06
  • 2019-08-18
  • 1970-01-01
  • 1970-01-01
  • 2012-07-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多