使用Jsoup我如何通过多个URL

时间:2018-02-16 18:05:12

标签: java web-scraping jsoup

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

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

代码适用于一个网址。如果有人可以帮助你,谢谢你。

1 个答案:

答案 0 :(得分:0)

你得到的例外情况清楚地说明问题 - Illegal character in URL。这意味着您将非URL的内容传递给URL.openConnection。我怀疑这是因为您正在阅读文件的方式 - 为什么要将\\A作为分隔符传递?如果其中有多个URL,则会导致Scanner一次性返回所有URL。这就是为什么当文件中只有一个URL时它才能正常工作。

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