0

ちょっと大きな質問で申し訳ありませんが、私は HTML と Java の非常に基本的な知識を持っています。

私の家族の誰かが、サプライヤーからのすべての製品を自分の Web ショップにコピーする必要があります。問題は、彼がすべての記事を 1 つずつ手作業で挿入する必要があることです。私はそれをプログラムに置き換える方法を探しています。

価格計算についてはすでに少し進めていますが、今必要なのは製品の情報だけです。

http://pastebin.com/WVCy55Dj

行 1009 から約 1030 まで。「CatalogusListDetailTest」クラスの 3 つのスパンの 3 つの別個の文字列が必要です。行 987 から約 1000 まで。これらすべての画像を取得する方法が必要です。 Images/Products/Large/"productID"(our first string).jpg この例でわかるように、 _A 、 _B がある場合があるため、存在するかどうかを確認してこれらの画像も取得する方法を探しています。

ここまでできたら、とてもありがたいです!残りは自分で調べます。長い投稿で申し訳ありませんが、できるだけ多くの情報を提供したかったのです。

4

2 に答える 2

0

必要なものにはJTidyを使用できます。

コード例:

public void downloadSinglePage(String pageLink, String targetDir) throws XPathExpressionException, IOException {
                URL url = new URL(pageLink);
                BufferedInputStream page = new BufferedInputStream(url.openStream());

                Tidy tidy = new Tidy();
                tidy.setQuiet(true);
                tidy.setShowWarnings(false);
                Document response = tidy.parseDOM(page, null);

                XPathFactory factory = XPathFactory.newInstance();
                XPath xPath=factory.newXPath();
                NodeList nodes = (NodeList)xPath.evaluate(IMAGE_PATTERN, response, XPathConstants.NODESET);

                String imageURL = (String) nodes.item(0).getNodeValue();
                saveImageNIO(imageURL, targetDir);

        }

どこ

IMAGE_PATTERN = "///a/img/@src";

ただし、パターンは、ページの HTML コードで画像がどのようにネストされているかによって異なります。

NIOを使用して画像を保存する方法:

public void saveImageNIO(String imageURL, String targetDir, String imageName) throws IOException {
            URL url = new URL(imageURL);
            ReadableByteChannel rbc = Channels.newChannel(url.openStream());
            FileOutputStream fos = new FileOutputStream(targetDir + "/" + imageName + ".jpg");
            fos.getChannel().transferFrom(rbc, 0, 1 << 24);
        }
于 2013-03-02T15:07:55.553 に答える
0

HTML パーサーライブラリ Jsoup、ドキュメント リファレンス: http://jsoup.org/cookbook/を確認できます。

編集:製品コードを取得するコード:

    Elements classElements = document.getElementsByClass("CatalogusListDetailTextTitel");
            for (Element classElement : classElements) {
                if (classElement.text().contains("Productcode :")) {
                System.out.println(classElement.parent().ownText());
                }
            }

document要素を使用して一貫した結果を得る代わりに、上記のコードはすべての製品コードを出力します。

于 2013-03-02T12:29:01.410 に答える