前几天看到有人在博问上求所有成语,想到刚好看了jsoup,就动手实践了一下,提问者给出了网站,一看很简单,就两种页面,一种是包含某个字的成语链接页面,一个是具体的包含某个字的成语的页面

  下面是我的代码,用到了jsoup的jar包

package cnblogs.spider;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.util.ArrayList;
import java.util.List; import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements; public class IdiomScratch
{ public static void main(String[] args)
{
final String url = "http://www.hydcd.com/cy/chengyu/cy.htm";
final String urlSub = "http://www.hydcd.com/cy/chengyu/";
BufferedWriter writer = null;
try
{
Document doc = Jsoup.parse(new URL(url).openStream(), "gb18030", "http://www.hydcd.com");
Element cyTable = doc.getElementById("table1");
Elements aElements = cyTable.getElementsByTag("a");
List<String> aHrefs = new ArrayList<String>(); if(null != aElements && aElements.size() > 0)
{
for(int i = 0, size = aElements.size(); i < size; i++)
{
aHrefs.add(urlSub + aElements.get(i).attr("href"));
} File cytxt = new File("c://cengyu.txt");
if(!cytxt.exists())
{
cytxt.createNewFile();
} writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(cytxt)));
String cy = null; for(int i = 0, size = aHrefs.size(); i < size; i++)
{
doc = Jsoup.parse(new URL(aHrefs.get(i)).openStream(), "gb18030", "http://www.hydcd.com");
cyTable = doc.getElementById("table1");
aElements = cyTable.getElementsByTag("a"); if(null != aElements && aElements.size() > 0)
{
int b = 0;
for(int j = 0, size2 = aElements.size(); j < size2; j++)
{
cy = aElements.get(j).text(); writer.write(cy + " ");
b++;
if(b == 8)
{
b = 0;
writer.write("\r\n");
}
} writer.write("\r\n");
if(b != 0)
{
writer.write("\r\n");
}
writer.flush();
}
}
}
}
catch(IOException e)
{
e.printStackTrace();
}
finally
{
if(null != writer)
{
try
{
writer.close();
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
} }

  说一下碰到的坑,一开始没有注意编码问题,得到的txt结果中总有一些乱码,后来看网页源码显示编码是gb2312,就换成了gb2312,但还是不对,一想gb2312是简体字的,肯定不能包含所有的成语中的汉字啊,所有就查了一下汉字的编码,发现有gb18030,就用这个试了一下,果然没有乱码了

  结果如下:

  下面是所有成语的txt文件和代码:

  所有成语+代码

使用jsoup爬取所有成语的更多相关文章

  1. Jsoup爬取带登录验证码的网站

    今天学完爬虫之后想的爬一下我们学校的教务系统,可是发现登录的时候有验证码.因此研究了Jsoup爬取带验证码的网站: 大体的思路是:(需要注意的是__VIEWSTATE一直变化,所以我们每个页面都需要重 ...

  2. jsoup爬取某网站安全数据

    jsoup爬取某网站安全数据 package com.vfsd.net; import java.io.IOException; import java.sql.SQLException; impor ...

  3. 使用Jsoup 爬取网易首页所有的图片

    package com.enation.newtest; import java.io.File; import java.io.FileNotFoundException; import java. ...

  4. java爬虫入门--用jsoup爬取汽车之家的新闻

    概述 使用jsoup来进行网页数据爬取.jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址.HTML文本内容.它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuer ...

  5. 使用Jsoup爬取网站图片

    package com.test.pic.crawler; import java.io.File; import java.io.FileOutputStream; import java.io.I ...

  6. 如何使用Jsoup爬取网页内容

    前言: 这是一篇迟到很久的文章了,人真的是越来越懒,前一阵用jsoup实现了一个功能,个人觉得和selenium的webdriver原理类似,所以今天正好有时间,就又来更新分享了. 实现场景: 爬取博 ...

  7. 利用Jsoup爬取新冠疫情数据并存至数据库

    需要用到的jar包(用来爬取的jsoup,htmlunit-2.37.0-bin以及连接数据库中的mysql.jar) 链接:https://pan.baidu.com/s/1VlylWmlhjd8K ...

  8. 利用jsoup爬取百度网盘资源分享连接(多线程)

    突然有一天就想说能不能用某种方法把百度网盘上分享的资源连接抓取下来,于是就动手了.知乎上有人说过最好的方法就是http://pan.baidu.com/wap抓取,一看果然链接后面的uk值是一串数字, ...

  9. jsoup爬取网站图片

    package com.ij34.JsoupTest; import java.io.File; import java.io.FileOutputStream; import java.io.Inp ...

随机推荐

  1. centos6.5虚拟机快照技术

    一.查看现有磁盘镜像格式与转换 查看磁盘格式 [root@localhost ~]# qemu-img info /var/lib/libvirt/images/centos7.img image: ...

  2. optparse模块解析命令行参数的说明及优化

    一.关于解析命令行参数的方法 关于“解析命令行参数”的方法我们一般都会用到sys.argv跟optparse模块.关于sys.argv,网上有一篇非常优秀的博客已经介绍的很详细了,大家可以去这里参考: ...

  3. [UE4]在当前角色正前方2米处生成一个Actor

  4. jQuery动态创建DOM节点

    var SKU=$("#SKU"); // 通过ID查找到指定表格 var oTable=SKU[0]; // 获取第一个表格 // 获取正文tbody元素 var tBodies ...

  5. C#窗体嵌入SetParent的用法

    模块化的开发,将模块合并到一起的时候,遇到了Mdi不能添加到其它窗口下的问题. 分两种情况: 将mdi窗口A设成普通窗口B的子控件,需要将A的TopLevel设置成false,但是Mdi窗口的TopL ...

  6. python 打印调用栈

    import traceback def BBQ(): traceback.print_stack() 引入 traceback 包,在某个函数中执行 traceback.print_stack().

  7. Maven依赖下载速度慢,不用怕,这么搞快了飞起

    一.背景 众所周知,Maven对于依赖的管理让我们程序员感觉爽的不要不要的,但是由于这货是国外出的,所以在我们从中央仓库下载依赖的时候,速度如蜗牛一般,让人不能忍,并且这也是大多数程序员都会遇到的问题 ...

  8. CMD命令行合并多个txt文件到一个txt文件

    运行->输入CMD回车 输入: Copy G:\MyFolder\*.txt  G:\NewFolder\a.txt 回车即可 意思是将G:\MyFolder\下的所有txt文本内容复制到G:\ ...

  9. Windows2008R2安装Exchange 2010前必须要做的准备工作

    由于WindowsServer2008R2已经包含了KB979099.KB982867.KB979744.KB983440.KB977020这些补丁的内容,所以无须另外下载安装. 详见https:// ...

  10. 7.adb安装

    adb的全称为Android Debug Bridge,中文名“调试桥”顾名思义adb命令是调试手机中应用的一种方法,而且作为Android SDK中的工具,其功能非常强大,用这个命令行工具可以直接操 ...