这不算爬虫吧?!

------------------------------------------------------------------------------------------------------------------

因程序需要,需要拿到一个粤语词典(需要找到任一个汉字的粤语拼音),但是在网上找来找去都没有找到现有的词典。

走投无路下,只能对现有粤语词典网站进行知识“掠夺”:),拿到一个对应表。

于是,码了以下代码:

 1 using System;
 2 using System.Text;
 3 using System.Net;
 4 using System.IO;
 5 using System.Threading;
 6
 7 namespace Yueyu_Dic_Crawler
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13             string[] array = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F" };
14             {
15                 //建立文件,准备输入
16                 FileStream fs = new FileStream(@"C:\Users\Lian\Desktop\Dic\Dictionary.txt", FileMode.Create);
17                 StreamWriter sw = new StreamWriter(fs);
18
19                 //由于此网站URL的特殊性,不用实现真正意义上的爬虫就可以获取信息
20                 //只需要更改URL中间的4位就可以遍历60000+汉字的信息
21                 for (int apple=0;apple<16;apple++)
22                     for (int pear = 0; pear < 16; pear++)
23                         for (int orange = 0; orange < 16; orange++)
24                             for (int peach = 0; peach < 16; peach++)
25                             {
26                                 //没有这个sleep,就要被网站服务器的防护机制给弄炸了:(
27                                 Thread.Sleep(100);
28
29                                 //从0000到FFFF:)
30                                 string url = "http://www.yueyv.cn/?keyword=%" + array[apple] + array[pear] + "%" + array[orange] + array[peach] + "&submit=%B2%E9+%D1%AF";
31
32                                 //Request AND Response
33                                 HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
34                                 request.Method = "GET";
35                                 HttpWebResponse response = (HttpWebResponse)request.GetResponse();
36
37                                 //使用StreamReader读取html源代码
38                                 StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("gb2312"));
39
40                                 //经观察,第370行存储汉字,第394行存储粤语拼音
41                                 string hanzi_line;
42                                 for (int z = 0; z < 369; z++, reader.ReadLine()) ;
43                                 hanzi_line = reader.ReadLine();
44                                 string yuepin_line;
45                                 for (int z = 0; z < 23; z++, reader.ReadLine()) ;
46                                 yuepin_line = reader.ReadLine();
47
48                                 //写入文件
49                                 sw.Write(hanzi_line + "\t" + yuepin_line + "\r\n");
50                                 Console.WriteLine(hanzi_line + "\t" + yuepin_line);
51
52                                 /*@@@@@@[email protected]@@@@@[email protected]@@@@@[email protected]@@@@@*/
53
54                                 //如果不关闭HttpWebResponse,在请求两次后,就收不到回音了= =
55                                 //应该算是C#的特点吧,很关键,花费了很长很长时间。
56                                 response.Close();
57                             }
58                 //清空缓冲区
59                 sw.Flush();
60                 //关闭流
61                 sw.Close();
62                 fs.Close();
63             }
64         }
65     }
66 }

其实,中间还有一些小细节,比如:

1、实际上只有一部分组合存储着信息,如8000-8FFF的组合中,其实只有8140-8FFE有信息(感谢partner);

2、大约将0000-FFFF分成了10块,分了10次才爬下来,因为即使sleep,服务器的防护机制有时间也能把你拦住;

3、没有使用正则表达式,就是用excel简单处理了一下结果:)以后肯定要使用正则表达式:)

4、多音字,只收录了它的第一次读音:)

从昨天中午有这个想法,到今天晚上实现,感触最深的有两点:

一是,这个时代学习东西太方便了,知识的交互太便捷了!

二是,互联网上存储着多少知识和财富啊!!!!!!!!

过几天把这个粤语词典放网上:)应该不犯法吧。。。

        小Lian

                                                                                                                          2017/4/15凌晨

时间: 2024-10-02 16:33:46

这不算爬虫吧?!的相关文章

集算器如何优化复杂报表计算(2)格式布局及过程计算

布局格式 横向分栏 大多数报表工具都支持纵向分栏,但几乎没有报表工具支持横向分栏,我们可以用集算器把数据集事先摆好. A B C 1 =db.query("select a,b,c from T ") 2 =A1.step(3,1) =A1.step(3,2)|[null] =A1.step(3,3)|[null] 3 =A2.derive(B2(#).a:a2,B2(#).b:b2,B2(#).c:c2,C2(#).a:a3,C2(#).b:b3,C2(#).c:c3) 这段代码将3

vue.js 入门

简单一句话来描述:vue.js是一个前端框架. 官方文档:https://cn.vuejs.org/v2/guide/index.html 虽然,我以前也会改一些前端样式,但主要是基于HTML和CSS,HTML主要控制页面的结构,CSS主要来控制样式.涉及到JavaScript就比较小白了. 我花了一个下午照着官方文档做练习,当然是只创建一个xxx_demo.html文件,在<script></script> 标签对之间写 Vue.js语法.这不算错,但在工程化的今天,这么学得猴年

web单机优化

又得开始写博客了,目测又要一周一篇了,当然了这不算python跟前端的,个人喜欢notepad++可惜不能放图片,word什么的太讨厌了 为什么要单机优化呢,很简单,因为不论以后是各类集群也好,物理机虚拟机也好,只有将个人优势发挥到最大才能提升整体的最低限度,因为木桶原理嘛:再一个,穷啊,玩linux那就是得优化,极尽的压榨操作系统的性能.集群什么的都是从单机演化出来的,so,优化好单机是你继续下一步的初始条件 我们从一个请求连接的总流程来看一下我们可优化的点(运维角度) 其实这中间的每一个步骤

Smart210学习记录------块设备

转自:http://bbs.chinaunix.net/thread-2017377-1-1.html 本章的目的用尽可能最简单的方法写出一个能用的块设备驱动.所谓的能用,是指我们可以对这个驱动生成的块设备进行mkfs,mount和读写文件.为了尽可能简单,这个驱动的规模不是1000行,也不是500行,而是100行以内. 这里插一句,我们不打算在这里介绍如何写模块,理由是介绍的文章已经满天飞舞了.如果你能看得懂.并且成功地编译.运行了这段代码,我们认为你已经达到了本教程的入学资格,当然,如果你不

李开复:AlphaGo 若打败了世界冠军,意味着什么?

创新工场董事长李开复在知乎就AlphaGo与李世石的人机大战发表了自己看法,他认为四个月前的AlphaGo击败李世石基本不可能,不过这四个月AlphaGo进步很多,比赛应该很精彩.但是,无论这次结果如何,机器1-2年之内必然完胜人类.完胜人类之后呢?可以做个通用的大脑吗?意味着机器可以思考了吗?还有什么问题是机器无法超越人类的? 以下为李开复就“AlphaGo能战胜李世石吗?”在知乎的回答原文: 先直接回答这个问题,下面再分析AlphaGo和人工智能的未来.我认为AlphaGo这次的比赛打败李世

第一章.良好应用程序基石(4)

上次,我们从Guitar类中分离出了GuitarSpec类,可以让用户通过GuitarSpec类来搜索心仪的吉他. 这次用户说了,卖吉他的时候,又多出了一个搜索方法,弦的个数,可以从1到12,我不管反正我就要这个搜索功能,你看着办吧! 上次的GuitarSpec类中,我们并没有提供用户弦的个数这个搜索功能,于是乎,我们在GuitarSpec类中加上一个变量numStrings来存储弦的个数: GuitarSpec.java更新: 这不算完,有没有想到在Inventory.java的search(

Java赋值运算符

很多人都知道赋值运算符就是赋值,把左边算出的答案交给右边,但是这是错误的我们不是学数学,我们学的是编程,他的赋值方式刚好相反.Java里面赋值方式是把右边的值交给左边的变量名.比如:int i = 100; 把100这个值交给了 i 变量,i就拿到了这快100的内存空间地址,不懂什么是内存空间地址没关系以后会讲解,你就可以这样理解为 i 就拿到了100. 如果我把i = 1000;呢?那么i 就重新指向了1000的内存空间地址,原来100的内存空间因为没有了引用关系被垃圾处理机制清除掉.如图4.

DELPHI版传奇引擎学习菜鸟篇(applem2)-03

3.2 Gmain.pas单元 这是引擎控制台的主窗口,就是之前说的那个4500行代码的单元,对大神来说,这不算什么,对我看来说,光是理清里边的关系就很吃力.我知道也许从程序的架构角度去理解会好一些,但咱不懂那些,只好继续以一个菜鸟的方式按单元\按页面逐项查看,期待能获得一些营养. 接口部分也有近500行代码,虽然我是初学delphi,但也知道把所有的功能和定义都放到一个单元对以后维护带来很大不变,这份代码是谁写的我不清楚,但是至少不像比较标准的架构,除了重复的复制代码,就是一些嵌套的过程中的过

java程序员面试----交流项目经验(摘自百度)

1:请你介绍一下你自己这是面试官常问的问题. 2:说说你的家庭面试时询问家庭问题不是非要知道求职者家庭情况,探究隐私,而是要了解家庭背景对求职者的塑造和影响.面试官希望听到的重点也在于家庭对求职者的积极影响. 3:说说你的最大优缺点这个问题的概率很大,面试官喜欢求职者从自己的优点说起,中间加一些小缺点,最后再把问题转回到优点上,突出优点的部分. 4:就你申请的这个职位,你认为你还缺什么?面试官喜欢问求职者的弱点,但精明的求职者一般不直接回答.他们希望看到这样的求职者:继续重复自己的优势,然后说: