Archive

Archive for the ‘技术爱好’ Category

larbin与mysql连接

May 6th, 2012

先备份。

从src/interf/useroutput.cc 文件的保存格式对应可以看得出来,不同保存模式分别对应哪个代码

defaultuseroutput.cc 对应默认的什么都不做

mirrorsaveuseroutput.cc 对应镜像模式

statsuseroutput.cc 对应状态模式

saveuseroutput.cc 对应一般模式d*****/f*****

修改src/interf/saveuseroutput.cc

实现将网页下载到磁盘,同时将URL和本地地址记录在mysql,是实现本地快照的基础。

indexFds = creat(fileName, S_IRWXU); //creat the save/d***** index file
if (indexFds < 0) {
cerr << "cannot open file " << fileName << "\n";
exit(1);
}

这段代码是生成index文件,在save/d*****/index,这个文件中就是已经下载的网页列表,对应了id,此id就是文件夹的序号。

由于有了导入mysql功能,为了减轻系统负担,所以将此段禁掉,

ecrireBuff(indexFds, buf, s); 是在index文件中写入条目,可以禁掉

ecrireBuff(fd, page->getPage(), page->getLength()); 是在具体的/d*****/f*****文件中写入下载的html代码

数据库中可以设置ID, Html_Link,PhyLoc, Time, Saved等字段,网络URL对应本地地址。

原文地址:http://hi.baidu.com/hustwk/blog/item/8865dc2a4069fb28d42af1b6.html

另外部分修改地址:http://hi.baidu.com/hustwk/blog/item/689d2a3f007b0fe955e72373.html

为了避免文件名判断混乱,在src/types.h中,改为如下:

#define fifoFile “fifofile”
#define fifoFileWait “fifowait”

options.h 中的 defaultuseroutput.cc

#define DEFAULT_OUTPUT 对应着使用src\interf\defaultuseroutput.cc
#define SIMPLE_SAVE 对应着使用src\interf\saveuseroutput.cc
#define MIRROR_SAVE 对应着使用src\interf\mirrorsaveuseroutput.cc
/#define STATS_OUTPUT 对应着使用src\interf\statsuseroutput.cc

我实验室改的是saveuseroutput.cc,在其中加入mysql语句,保证usr/include下有mysql.h等头文件。

编译makefile的代码方面:

在src/Makefile 中 加入“-L/usr/lib/mysql -lmysqlclient ” ,即为如下:

larbin: $(ABS-UTILS-OBJ) $(ABS-FETCH-OBJ) $(ABS-INTERF-OBJ) $(ABS-MAIN-OBJ)
$(CXX) $(MF) $(LIBS) -L/usr/lib/mysql -lmysqlclient \
-o larbin $(ABS-UTILS-OBJ) \
$(ABS-FETCH-OBJ) $(ABS-INTERF-OBJ) $(ABS-MAIN-OBJ) ../adns/libadns.a

在src/larbin.make 中,加入“-I/usr/include/mysql -g”,即为如下:

CXXFLAGS:= -Wno-deprecated -Wall -D_REENTRANT -I- -I$(BASEDIR) -I$(ADNSDIR) -I/usr/include/mysql -g

备份地址 “larbin与爬虫” 分类下的文章

http://hi.baidu.com/hustwk/blog/category/larbin%D3%EB%C5%C0%B3%E6/index/0

技术爱好

larbin 安装配置注意事项

April 20th, 2012

Larbin是国外的一个开源的高效的搜索引擎爬虫工具(crawler)

larbin官方地址: http://larbin.sourceforge.net/

在fedora或者centos编译安装时,总是出现错误。网上说是要把adns文件夹下internal.h文件568-571注释掉,其实把:adns_status adns__parse_domain(adns_state ads, int serv, adns_query qu,
vbuf *vb, parsedomain_flags flags,
const byte *dgram, int dglen, int *cbyte_io, int max);

更正为:adns_status adns__parse_domain(adns_state ads, int serv, adns_query qu,
vbuf *vb, adns_queryflags flags,
const byte *dgram, int dglen, int *cbyte_io, int max);就不会出错了。

安装过程:./configure
make
./larbin
不过在运行larbin之前需要更改一下配置。

主要该两个文件:larbin.conf和options.h
一般在larbin.conf文件里改:
StartUrl :http://www.hfut.edu.cn //爬虫开始爬的起始网址
limitToDomain: .edu .com .cn .net .com.cn //限制爬虫抓取的网址域名后缀。

在options.h里修改:(我的配置是:)//#define DEFAULT_OUTPUT // do nothing…
#define SIMPLE_SAVE // save in files named save/dxxxxxx/fyyyyyy 简单输出一个目录两千个文件,包含索引。//这个很重要,默认是do nothing ,不会有任何结果输出的。

//#define MIRROR_SAVE // save in files (respect sites hierarchy)镜像方式保存
#define STATS_OUTPUT // do some stats on pages输出统计
#define FOLLOW_LINKS // do you want to follow links in pages
#define LINKS_INFO //是不是得到该页面的子连接
#define NO_DUP  //不允许重复
#define EXIT_AT_END //完成时退出
#define COOKIES
#define CGILEVEL 0 处理服务器端程序,也就是但url中包含? & = 之类的querString时也处理。
#define DEPTHBYSITE
#define THREAD_OUTPUT
#define RELOAD
#define GRAPH
#define STATS
#define BIGSTATS
编辑完成后,需要注意的是如果只修改larbin.conf文件,不需要重新编译,如果修改了options.h文件,需要运行 gmake 重新进行编译。

另外,types.h中有些项也可以自行设置,如 maxUrlsBySite ,maxPageSize

技术爱好

Larbin的使用–安装

April 20th, 2012

1、到网上下载 larbin-2.6.3.tar.gz,然后解压。

tar zxvf larbin-2.6.3.tar.gz
2、 到解压的目录,运行配置文件


./configure

却出现以下的错误:


make[2]: 正在进入目录 `/home/byd/test/larbin-2.6.3/src/utils' makedepend -f- -I.. -Y *.cc 2> /dev/null > .depend make[2]: *** [dep-in] 错误 127 make[2]:正在离开目录 `/home/byd/test/larbin-2.6.3/src/utils' make[2]: 正在进入目录 `/home/byd/test/larbin-2.6.3/src/interf' makedepend -f- -I.. -Y *.cc 2> /dev/null > .depend make[2]: *** [dep-in] 错误 127 make[2]:正在离开目录 `/home/byd/test/larbin-2.6.3/src/interf' make[2]: 正在进入目录 `/home/byd/test/larbin-2.6.3/src/fetch' makedepend -f- -I.. -Y *.cc 2> /dev/null > .depend make[2]: *** [dep-in] 错误 127 make[2]:正在离开目录 `/home/byd/test/larbin-2.6.3/src/fetch' make[1]: *** [dep] 错误 2 make[1]:正在离开目录 `/home/byd/test/larbin-2.6.3/src' make: *** [dep] 错误 2

在上面发现有makedepend,于是输入

makedepend

发现没有安装,有如下的提示


The program 'makedepend' is currently not installed. You can install it by typing: sudo apt-get install xutils-dev

于是就输入命令老老实实的安装xutils-dev了


sudo apt-get install xutils-dev

安装之后,./configure成功

3、编译

在目录下输入make进行编译。又出现了一下的错误


parse.c:113: error: conflicting types for ‘adns__parse_domain’ internal.h:569: note: previous declaration of ‘adns__parse_domain’ was here parse.c: In function ‘adns__parse_domain_more’:

于是直接到adns目录找到internal.h文件注释掉568-572行。


//adns_status adns__parse_domain(adns_state ads, int serv, adns_query qu, //vbuf *vb, parsedomain_flags flags, //const byte *dgram, int dglen, int *cbyte_io, int max);

继续make ,又出现一下的错误


sequencer.cc:5: fatal error: iostream.h: 没有那个文件或目录

代码采用的是以前C的编码方式,现在要改成iostream 了。于是将目录下的所有iostream.h 改成iostream。可以采用一下的命令


sed -i -e 's/iostream.h/iostream/g' `grep -rl iostream.h *` 

注意:后面的包含grep 的不是单引号,而是键盘左上角的符号。

继续编译,又出现错误


hashTable.cc:32: error: ‘cerr’ was not declared in this scope hashTable.cc:41: error: ‘cerr’ was not declared in this scope hashTable.cc:42: error: ‘endl’ was not declared in this scope

于是将目录下的所有cerr和 endl改成 std::cerr和std::endl。可以采用类似上面的命令。不过要注意是不是有的endl或cerr已经是std::endl和std::cerr。


sed -i -e 's/cerr/std::cerr/g' `grep -rl cerr *`
sed -i -e 's/endl/std::endl/g' `grep -rl endl *` 

至此编译就没有问题了。

可以发现在目录下已经生成larbin的可执行文件。

输入./larbin就可以运行larbin了。

技术爱好

批处理删除特定时间的备份文件

March 1st, 2012

服务器里有个mysql自动备份的bat

set zhou=%Date:~0,10%
md "E:\mysqlback\%zhou%"
"G:\Program Files\MySQL\MySQL Server 5.0\bin\mysqldump.exe" --opt -Q sbdb -root -password > G:\mysqlback\%zhou%\db.sql

然后计划任务里让这个bat每天执行。

时间久了,备份文件就会越来越多,占据了大量的服务器硬盘。所以需要删除多余的备份。
如果只需要保留最近一个星期的备份,需要如何操作?
代码:

cd /d G:\mysqlback\
for /f "skip=7" %%i in ('dir /tc /o-d /b') do rmdir /s /Q %%i

Read more…

技术爱好

vbs自动关机

October 19th, 2011

一个自动关机的vbs 留作备份
a=hour(now)
b=weekday(now)

select case b
case 1,3,4,5,6,7
if a>=23 then
call shut_down()
end if
end select

private sub shut_down()
Set colOS = GetObject("winmgmts:{(Shutdown)}").ExecQuery("Select * FROM Win32_OperatingSystem")
For Each eOs In colOS
eOs.Win32Shutdown(1)
Next
end sub

下面代码可以写启动项

set ws=createobject("wscript.shell")
ws.Regwrite"HKLM\Software\Microsoft\Windows\CurrentVersion\Run\",wscript.scriptfullname

技术爱好

BT5破解wpa密码

August 24th, 2011

都说破解wpa密码很难,我尝试了一下,确实挺难的。

方法一、用minidwep破解wpa 见 BT5 中文版破解WPA2 WPA简单过程教程

方法二、奶牛博客里提供了命令行下破解wpa的方法 BackTrack5 (BT5)无线密码破解教程之WPA/WPA2-PSK型无线密码破解 这个过程其实跟minidwep是一样的,只是上面图形化了。

方法三、用EWSA 破解 该方法没试过,貌似是windows系统下运行的。

技术爱好 ,

BT5破解wep无线密码

August 24th, 2011

按照前篇日志里的方法制作bt5 u盘启动盘后,进入bt5 运行startx进入图形界面。
下载一个minidwep的安装包 下载

降其放置在root目录下
运行 dpkg -i minidwep-gtk.deb 安装,然后就可以执行minidwep进行wep破解了。

技术爱好 , ,

制作bt5的U盘启动盘

August 24th, 2011

以前做bt4和bt3时参考了很多网上的教程和工具都没成功制作U盘启动盘,今天找到一个用Universal USB Installer 制作BT5的U盘启动盘方法,尝试了下很容易成功了,记录下来分享。

教程详见:制作BT5可保存U盘系统

看看 Universal USB Installer 介绍:Universal USB Installer is a Live Linux USB Creator that allows you to choose from a selection of Linux Distributions to put on your USB Flash Drive.

Universal USB Installer 下载地址 http://www.pendrivelinux.com/universal-usb-installer-easy-as-1-2-3/

技术爱好 , ,

采集时执行执行时间太长的问题

July 29th, 2011

做采集时,一般使用file_get_contents 或者 curl

1、curl可以使用 CURLOPT_TIMEOUT 设置超时时间,如
curl_setopt($ch, CURLOPT_TIMEOUT, 5); 表示5秒钟后停止获取指定页面。
这个问题可以参考 同步的方式执行还是异步的?CURLOPT_TIMEOUT有什么作用

2、使用file_get_contents 没有很好的参数,网上有部分代码可以参考

当你批量抓取的时候经常会出现网络的问题。可以尝试多次抓取
这也提醒我们,做特别需要稳定性的程序是一定要考虑网络的不稳定性
$html = false;
$try_count = 3;
for($i=0; $i<3 and $html === false; $i++){
$html = file_get_contents($url);
}

file_get_contents设置响应时间timeout的方法

技术爱好 ,

mysql的rand()和limit优化

June 29th, 2011

先记录一下,空了整理

mysql limit查询优化

http://soft.zdnet.com.cn/software_zone/2009/0219/1346550.shtml

mysql使用rand随机查询记录效率测试

http://www.cublog.cn/u/8780/showart_430328.html

技术爱好 , , ,