Webページから小説の内容を抽出してテキストファイルとして保存するウィジェット
私は特に小説を読むのが好きで、ネット上には連載されている小説がたくさんあります.例えばこのようなサイトはhttp://www.yi-see.com/art_5165_9215.html 次はWebサイトのスクリーンショットです.
1つの文章には多くのセクションがあります.私はすべてのセクションを下にして、novel.txtなどのテキストファイルにマージしたいと思っています.これで携帯電話に置いて、布団に横になって見ることができます.そこでこんな小さなプログラムを書きました.このウィジェットは、このサイトのレイアウトに対して書かれているだけなので、非常に柔軟ではありません.
このことは複雑に見えますが、まずサイトから各セクションのハイパーリンクを抽出し、各ハイパーリンクに接続し、小説の内容があるラベルを見つけ、コンテンツをローカルファイルにダウンロードする必要があります.どの仕事も実現しにくく、小さなプログラムでは達成できないタスクではありません.しかし、彼女がいたので、すべてが簡単になりました.これが牛迫のHTML分析ライブラリJsoupです.Jsoupインタフェースはとても友好的で、みんなは見てからどういう意味か知っています.
まずJsoupで各小節のURLを抽出する機能を実現する.3段階に分ける
第一歩:ウェブサイトと接続を確立し、コードを一言で解決します.Document doc = Jsoup.connect(url).get();urlはウェブサイトのウェブサイトです.
ステップ2:すべてのハイパーリンクアドレスを抽出し、コードを1つで完了します.Elements links = doc.select("a[href]");このコードは,属性hrefを含むaラベルをすべて抽出することを意味する.
第3歩:第2歩ではすべてのハイパーリンクを抽出しましたが、私たちが望んでいるのは各小節のハイパーリンクです.次はハイパーリンクをフィルタリングし、ウェブサイトのソースコードを観察することで、各小節のアドレスがreadで始まることを発見しました.Jsoup牛が追い詰められているところが体現され、正規表現で要素をフィルタリングする機能を提供しています.Elements links = doc.select("a[href~=read.*]");正規表現の等号の前に~記号を付ける.
次に、抽出されたWebサイトを示します.
(第1節)
(第4節)
(第2節)
(第5節)
(第3節)
(第6節)
ウェブサイトは順番に並べられていないことがわかります.このようにコンテンツを抽出すると、順番に問題が発生し、ウェブサイトを並べ替える必要があります.並べ替えは簡単です.コードを参照してください.
それからホームページの構造を分析して小説の内容の所在のラベルを見つけて、小説の内容がラベルの中にあることを発見して、しかもこのラベルのもう一つの属性は小説の内容を抽出するのもとても簡単です.
text=doc2.select("td[class=ART]").first();
String str=text.html().replaceAll("", "\r");
最後に、コンテンツをローカルファイルに保存するのは簡単です.コードを参照してください.
興味があるかもしれません
1つの文章には多くのセクションがあります.私はすべてのセクションを下にして、novel.txtなどのテキストファイルにマージしたいと思っています.これで携帯電話に置いて、布団に横になって見ることができます.そこでこんな小さなプログラムを書きました.このウィジェットは、このサイトのレイアウトに対して書かれているだけなので、非常に柔軟ではありません.
このことは複雑に見えますが、まずサイトから各セクションのハイパーリンクを抽出し、各ハイパーリンクに接続し、小説の内容があるラベルを見つけ、コンテンツをローカルファイルにダウンロードする必要があります.どの仕事も実現しにくく、小さなプログラムでは達成できないタスクではありません.しかし、彼女がいたので、すべてが簡単になりました.これが牛迫のHTML分析ライブラリJsoupです.Jsoupインタフェースはとても友好的で、みんなは見てからどういう意味か知っています.
まずJsoupで各小節のURLを抽出する機能を実現する.3段階に分ける
第一歩:ウェブサイトと接続を確立し、コードを一言で解決します.Document doc = Jsoup.connect(url).get();urlはウェブサイトのウェブサイトです.
ステップ2:すべてのハイパーリンクアドレスを抽出し、コードを1つで完了します.Elements links = doc.select("a[href]");このコードは,属性hrefを含むaラベルをすべて抽出することを意味する.
第3歩:第2歩ではすべてのハイパーリンクを抽出しましたが、私たちが望んでいるのは各小節のハイパーリンクです.次はハイパーリンクをフィルタリングし、ウェブサイトのソースコードを観察することで、各小節のアドレスがreadで始まることを発見しました.Jsoup牛が追い詰められているところが体現され、正規表現で要素をフィルタリングする機能を提供しています.Elements links = doc.select("a[href~=read.*]");正規表現の等号の前に~記号を付ける.
次に、抽出されたWebサイトを示します.
(第1節)
(第4節)
(第2節)
(第5節)
(第3節)
(第6節)
ウェブサイトは順番に並べられていないことがわかります.このようにコンテンツを抽出すると、順番に問題が発生し、ウェブサイトを並べ替える必要があります.並べ替えは簡単です.コードを参照してください.
それからホームページの構造を分析して小説の内容の所在のラベルを見つけて、小説の内容がラベルの中にあることを発見して、しかもこのラベルのもう一つの属性は小説の内容を抽出するのもとても簡単です.
text=doc2.select("td[class=ART]").first();
String str=text.html().replaceAll("", "\r");
最後に、コンテンツをローカルファイルに保存するのは簡単です.コードを参照してください.
import org.jsoup.Jsoup;
import org.jsoup.helper.Validate;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;
import java.io.PrintWriter;
public class JsoupTest {
public static void main(String[] args) throws IOException {
Validate.isTrue(args.length == 1, "usage: supply url to fetch");
String url = args[0];
PrintWriter output = new PrintWriter("F:/novel.txt","gb2312");
Document doc = Jsoup.connect(url).get();
Elements links = doc.select("a[href~=read.*]");
String stringLink[]=new String[288];
print("
Links: (%d)", links.size());
for (Element link : links) {
String temp=link.text();
int index=Integer.valueOf(temp.substring(1, temp.length()-1));
stringLink[index]=link.attr("abs:href");
}
Document doc2;
Element text;
for(int i=1;i<288;i++)
{
print("%s",stringLink[i]);
doc2=Jsoup.connect(stringLink[i]).get();
text=doc2.select("td[class=ART]").first();
String str=text.html().replaceAll("
", "\r
");
output.write(str);
output.write("
");
output.flush();
}
}