网络爬虫java
2016-05-20 12:22:45 0 举报
AI智能生成
网络爬虫java
作者其他创作
大纲/内容
Properties类的对象 propertie
FileInputStream类的对象 inputFile
FileOutputStream类的对象 outputFile
成员变量
propertie = new Properties():Creates an empty property list
读入文件configure.properties
构造函数Configuration()
根据key得到某一属性的值value
String getValue(String key)
RAWSPATH
DICTIONARYPATH
MYSQLLIBPATH
main()
成员函数
Configuration类:从配置文件中获得其他文件路径
scanDict(String dictFile):按行读入dictFile文件并存到哈希表dictionary中
构造函数(空)
DictReader类:将本地词汇文件读入,存到哈希表中,便于查询。
HashSet dict
HashSet stopWordDict
DictReader dictReader
static final int maxLength = 4
static String dictFile = \"\"
static String stopDictFile = \"\"
Configuration conf
dictFile=\"wordlist.txt\"
stopDictFile=\"stopWord.txt\"
dict = dictReader.scanDict(dictFile);
stopWordDict = dictReader.scanDict(stopDictFile);
new Configuration()
构造函数DictSegment()
新建类HtmlParser的对象parser
htmlText =parser.html2Text(htmlDoc)
第一步操作,把html的文件用正则表达式处理,去掉标签等无用信息,保留文本进行操作
cutIntoSentance(htmlText)
循环:cutIntoWord(sentances.get(i)
ArrayList segResult
第二步操作,断句cutIntoSentance,把句子传到cutIntoWord,然后获得返回值
SegmentFile(String htmlDoc): htmlDoc的预处理
ArrayList sentance:存储返回的字符串
cutIntoSentance(String htmlDoc):以。,、;:?!“”‘’《》()-作为定界符分割htmlDoc
cutIntoWord(String sentance):过滤停用词,过滤单字
DictSegment dictSeg = new DictSegment();
DictSegment类:将网页分成词汇,便于提取关键词
分词系统
DBConnection dbc = new DBConnection();
originalPageGetter pageGetter = new originalPageGetter()
DictSegment dictSeg = new DictSegment()
ArrayList segResult:存储网页对应的词组
sql = \"select * from pageindex\":查询语句
函数变量
ResultSet rs = dbc.executeQuery(sql):执行查询,而且将查询结果存储到rs中
rs.getString(\"url\"),fileName=rs.getString(\"raws\"),rs.getString(\"offset\")根据表的列名得到对应的内容
segResult = dictSeg.SegmentFile(htmlDoc):对网站内容进行词汇提取
rs.next():指示每一个数据行,用于循环,在每次循环中:
调用的函数
createForwardIndex()
迭代器(Iterator):对HashMap进行遍历并输出显示
ForwardIndex类:建立url-words的索引
fordwardIndexMap = forwardIndex.createForwardIndex();
InvertedIndex():构造函数
取出url-words键值对
索引中已经含有这个词,不需要加入这个词,需要找到这个词从而把对应的url链接附上,urls.add(url);
遍历words
for循环:遍历原来的正向索引,进行倒排
createInvertedIndex()
return invertedIndexMap
getInvertedIndex()
根据关键词得到链接地址
InvertedIndex类:建立网页倒排索引:word映射urls
建立url=words索引系统
ArrayList results;返回结果列表
DictSegment dictSeg;分词器
ResultGenerator resultGenerator;
调用函数doQuery(request);
getResponse(String request)
1. 关键词分词、剔除停用词,并对分词结果进行查找对应的结果
2. 合并各个分词的结果,返回初步的网页URL信息
3. 根据URL通过数据库获得网页所在位置,从而在RAWs中获得网页内容
doQuery(String request)
Response类:
查询系统
网络爬虫 java
String url=\"\";
String urlFromHead=\"\"
DBConnection dbc = new DBConnection()
MD5 md5 = new MD5()
Configuration conf = new Configuration()
String content = \"\"
Page page = getRawsInfo(url)
page.getRawName()
readRawHead()
content = readRawContent(bfReader);
调用函数
getPage()
readRawHead(文件地址字符流)
根据文件名file,得到文件地址,然后将文件读入,存入bfReader中
readRawContent(文件地址字符流)
content
返回String类型数据
readRawHead(BufferedReader bfReader)
readRawContent(BufferedReader bfReader)得到网页内容信息
sql = select * from pageindex where url='url'
ResultSet rs = dbc.executeQuery(sql);
connent = rs.getString(\"connent\");
offset = Integer.parseInt(rs.getString(\"offset\"));
raws = rs.getString(\"raws\")
循环
getRawsInfo(String url)查询,并存入数据库
originalPageGetter类:根据输入参数从原始raws文件中读取网页的功能
MD5 md5 = new MD5();
int offset;
Page page;
String rootDirectory;
this.rootDirectory = rootName;
page = new Page();
带参构造函数RawsAnalyzer(String rootName)
ArrayList fileNames = getSubFile(rootDirectory);
循环执行createPageIndex(fileName)
createPageIndex()
fileReader = new FileReader(fileName);读入文件
bfReader = new BufferedReader(fileReader);文件字符缓冲流
url = readRawHead(bfReader);
contentMD5 = md5.getMD5ofStr(content);
page.add2DB(dbc);
按行循环读入
createPageIndex(String fileName),重载函数
得到urlLine
readRawContent(BufferedReader bfReader)
static ArrayList getSubFile(String fileName):得到文件的绝对路径
RawsAnalyzer analyzer = new RawsAnalyzer(\"Raws\");
analyzer.createPageIndex();
main()函数
RawsAnalyzer类:实现了从原始网页集合Raws的分析操作。
读取网页和网页分析系统
加载驱动程序;Class.forName()
连接数据库;DriverManager.getConnection()
访问数据库conn.createStatement()
执行查询或更新;executeQuery(),executeUpdate()
DBConnection 类:数据库连接
Pattern类用于创建一个正则表达式,Pattern.compile(String regex)
java正则表达式通过java.util.regex包下的Pattern类与Matcher类实现
作用:去除一些标签,返回文本字符串
html2Text(String inputString),参数是:含html标签的字符串
作用:去除一些无用链接,修复一些相对路径的链接
提取href=\"http://bbs.life.sina.com.cn/\"中的双引号之间的url地址,并存入数组中
ArrayList urlDetector(String htmlDoc)
HtmlParser类:网页处理
用于确保信息传输完整一致而广泛使用的散列算法之一
将数据(如一段文字)运算变为另一固定长度值
消息摘要算法第五版
MD5类:加密
String url
int offset
String connent
String rawName
成员变量:网页存储格式
add2DB(DBConnection dbc)
主要成员函数
Page:将网页存到数据库
\tprivate String title;\tprivate String content;\tprivate String url;\tprivate String date;
\t\tthis.title = title;\t\tthis.content = content;\t\tthis.url = url;\t\tthis.date = date;
Result类
pageGetter = new originalPageGetter()
String regEx_meta = \"\"; meta的正则表达式
ResultGenerator()构造函数
Page page;String content = \"\";String date = \"\";String title = \"\";String shortContent = \"\";
page = pageGetter.getRawsInfo(url);
date = pageGetter.getDate();
子主题
Result generateResult(String url)
ResultGenerator类
HashSet scanDict(String stopDictFile)读入停用词,存在哈希表中
StopWordsMerger类
工具系统
ArrayList urls
ArrayList visitedURLs:已访问过
ArrayList unvisitedURLs:未访问过
if (!urls.contains(url) && !visitedURLs.contains(url)) urls.add(url);
insert(单个url/url数组):插入新的url
urls.isEmpty():等待
url = urls.get(0):取出集合中第一条数据
visitedURLs.add(url);添加
urls.remove(url);移除
getURL():读取url
主要成员函数,这里的函数代码都分别加锁了
Dispatcher类:将新的url添加到对应的数组中
Dispatcher disp
String ID
URLClient client = new URLClient()
WebAnalyzer analyzer = new WebAnalyzer()
在文件夹Raws下创建新文件RAW__ID
向文件中写入
url = disp.getURL()
disp.insert(newURL)
htmlDoc不为空的情况下
htmlDoc = client.getDocumentAt(url)存储url页面内容
run()
Gather类 implements Runnable,实现run()方法就可以实现多线程
URL hostURL = url;
URLConnection conn = hostURL.openConnection();创建连接对象
reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
循环,如果reader.readLine()!=null,那么document.append(line + \"\\");
getDocumentAt(URL url)根据网址得到网页内容
URLClient类
\tArrayList urlInHtmlDoc = (new HtmlParser()).urlDetector(htmlDoc);\t根据网页内容htmlDoc得到这个网页中包含的其他的urls,并将其存入动态数组urlInHtmlDoc中
version:1.0url:http://www.163.comdate:Thu Mar 12 20:55:55 CST 2015IP:111.202.57.27length:625461网页内容
保存在指定文件的格式
WebAnalyzer类
int gatherNum = 5
Dispatcher disp = new Dispatcher(urls);
gather.start();
循环,gatherNum
start()启动线程
ArrayList urls = new ArrayList();
urls.add(new URL(\"http://www.baidu.com\"));向数组中增添url
Spider spider = new Spider(urls);
spider.start();
main()函数
Spider类:爬虫实现
爬虫
0 条评论
回复 删除
下一页