Ubuntu Samba服务安装与配置

一. Ubuntu samba配置的安装:

sudo apt-get install samba smbfs smbclient

二. 创建共享目录:

mkdir /home/ly/share
sodu chmod 777 /home/ly/share

三. 创建Ubuntu Samba配置文件:

修改现配置文件

sudo vi /etc/samba/smb.conf

在smb.conf最后添加

[share]
path = /home/ly/share
available = yes
browsealbe = yes
public = yes
writable = yes

其实,更为简单的是在ubuntu下右击文件夹属性,在共享里设置共享,但实质上系统更改了smb.conf文件.

四. 创建Ubuntu samba帐户

sudo touch /etc/samba/smbpasswd
sudo smbpasswd -a ly#ly必须为系统中存在的账户

如果系统中没有ly用户,
sudo useradd ly # 这个用户不能从本地登录 ,samba的密码和系统密码是不一样的

然后会要求你输入samba帐户的密码

如果没有第四步,当你登录时会提示 session setup failed: NT_STATUS_LOGON_FAILURE]

五. 重启Ubuntu samba服务器

sudo service smbd restart

六. Ubuntu Samba配置测试

smbclient //localhost/share

七,Ubuntu Samba配置使用

可以到windows下输入ip使用了,在文件夹处输入 “\\” + “Ubuntu机器的ip或主机名” + “\\” + “share”

Tags: linux

Related posts

发表在 linux | 标签为 | 留下评论

bash 配置history-search-forward|history-search-backward

FreeBSD用的久了,习惯了csh默认就配置好的history -search-forward|history-search-backward。Linux上用户的默认shell是bash,没有配置 history-search-forward|history-search-backward,方法就是在bashrc里加入下面的内容:

bind ‘”\e[A”:history-search-backward’
bind ‘”\e[B”:history-search-forward’

\e[A代表UP键,\e[B代表DOWN键

Tags: linux

Related posts

发表在 未分类 | 标签为 | 留下评论

php.ini中设置mysql长连接

PHP长连接只支持module 和fastcgi模式

[MySQL]
mysql.allow_persistent = On ;打开长连接
mysql.max_persistent = -1;长连接数量 -1不限制
mysql.max_links = -1
mysql.default_port = 3306
mysql.default_socket =
mysql.default_host = 192.168.1.13
mysql.default_user = readall
mysql.default_password = readall.2011

php文件:

$strSQL = "select * from ydserver.ry limit 10";
$link = mysql_pconnect() or die('Could not connect: ' .mysql_error());#当连接的时候本函数将先尝试寻找一个在同一个主机上用同样的用户名和密码已经打开的(持久)连接,如果找到,则返回此连接标识而不打开新连接。
#mysql_select_db($dbName);
$result = mysql_query($strSQL);
while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
    var_dump($row);
}
 
#mysql_close($link); #mysql_close不能关闭mysql_pconnect()打开的连接
Tags: mysql, 长连接

Related posts

发表在 未分类 | 标签为 , | 留下评论

LINUX修改、增加IP的方法

静态方法
注意:所有操作均使用root用户
修改ip:
编辑文件/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0 //设备名称,不要修改
BOOTPROTO=static //不要修改
BROADCAST=10.10.22.255 //广播地址,一般为本网段的最后一个IP
IPADDR=10.10.22.145 //ip地址
NETMASK=255.255.255.0 //子网掩码
NETWORK=10.10.22.0 //网段地址
ONBOOT=yes //不要修改
TYPE=Ethernet //不要修改
注意: ifcfg-eth0是第一张网卡,ifcfg-eth1是第二张网卡,依次类推

增加ip:
可以重新编译一个文件,文件名为/etc/sysconfig/network-scripts/ifcfg-eth0:0
也可以直接在/etc/sysconfig/network-scripts/ifcfg-eth0中添加(但是设备eth0一定要有)
DEVICE=eth0:0 //设备名称,不要修改
BOOTPROTO=static //不要修改
BROADCAST=10.10.33.255 //广播地址,一般为本网段的最后一个IP
IPADDR=10.10.33.145 //ip地址
NETMASK=255.255.255.0 //子网掩码
NETWORK=10.10.33.0 //网段地址
ONBOOT=yes //不要修改
TYPE=Ethernet //不要修改

依次类推,如果再增加一个ip,则再增加如下配置:
DEVICE=eth0:1 //设备名称,不要修改
BOOTPROTO=static //不要修改
BROADCAST=10.10.44.255 //广播地址,一般为本网段的最后一个IP
IPADDR=10.10.44.145 //ip地址
NETMASK=255.255.255.0 //子网掩码
NETWORK=10.10.44.0 //网段地址
ONBOOT=yes //不要修改
TYPE=Ethernet //不要修改

同样如果在第二张网卡,则需要增加:
DEVICE=eth1:0 //设备名称,不要修改
BOOTPROTO=static //不要修改
BROADCAST=10.10.33.255 //广播地址,一般为本网段的最后一个IP
IPADDR=10.10.33.145 //ip地址
NETMASK=255.255.255.0 //子网掩码
NETWORK=10.10.33.0 //网段地址
ONBOOT=yes //不要修改
TYPE=Ethernet //不要修改

增加默认网关的方法:
注意一台机器只能有一个缺省网关,否则就应该给出具体的路由方式。
在相关的设备配置中增加一项即可,例如在上述配置中,在第一张网卡的第一个IP增加一个缺省网关:
DEVICE=eth0
BOOTPROTO=static
BROADCAST=10.10.22.255
IPADDR=10.10.22.145
NETMASK=255.255.255.0
NETWORK=10.10.22.0
ONBOOT=yes
TYPE=Ethernet
GATEWAY=10.10.22.3

修改完成后,要想使上述修改生效,则需要重起机器,或者重起网络。
重新启动机器的方法是:reboot
重起网络的方法是:service network restart

以上为静态增加ip的方法,即机器重起后仍然有效的方法。

动态方法
注意:所有操作均使用root用户
修改IP:
ifconfig eth0 10.10.22.145
则直接将第一张网卡的IP修改成10.10.22.145

增加IP:
ifconfig eth0 add 10.10.33.145 //增加一个IP
ifconfig eth0:0 broadcast 10.10.33.255 //修改刚刚增加IP的广播地址

再增加一个IP:
ifconfig eth0:0 add 10.10.44.145
ifconfig eth0:0:1 broadcast 10.10.44.255 //修改刚刚增加IP的广播地址
千万不要如下操作:
ifconfig eth0 add 10.10.44.145
这样就把刚刚加的IP10.10.33.145修改成了10.10.44.145

再增加一个IP:
ifconfig eth0:0:1 add 10.10.55.145
ifconfig eth0:0:1:1 broadcast 10.10.55.255 //修改刚刚增加IP的广播地址

依次类推
上述增加完,立刻生效,但是机器重新启动后,就无效了。

Tags: linux

Related posts

发表在 未分类 | 标签为 | 留下评论

mysqldump导出的文件,恢复出错ERROR 2006 (HY000) at line 186: MySQL server has gone away

vi /etc/my.cnf
msyqld 下添加
max_allowed_packet = 410M
把这个值改大,就可以了。

Tags: mysql

Related posts

发表在 未分类 | 标签为 | 留下评论

HTML字符实体(Character Entities),转义字符串(Escape Sequence)

为什么要用转义字符串?

HTML中<,>,&等有特殊含义(<,>,用于链接签,&用于转义),不能直接使用。这些符号是不显示在我们最终看到的网页里的,那如果我们希望在网页中显示这些符号,该怎么办呢?

这就要说到HTML转义字符串(Escape Sequence)了。

转义字符串(Escape Sequence)也称字符实体(Character Entity)。在HTML中,定义转义字符串的原因有两个:第一个原因是像“<”和“&gt”这类符号已经用来表示HTML标签,因此就不能直接当作文本中的符号来使用。为了在HTML文档中使用这些符号,就需要定义它的转义字符串。当解释程序遇到这类字符串时就把它解释为真实的字符。在输入转义字符串时,要严格遵守字母大小写的规则。第二个原因是,有些字符在ASCII字符集中没有定义,因此需要使用转义字符串来表示。

转义字符串的组成

转义字符串(Escape Sequence),即字符实体(Character Entity)分成三部分:第一部分是一个&符号,英文叫ampersand;第二部分是实体(Entity)名字或者是#加上实体(Entity)编号;第三部分是一个分号。

比如,要显示小于号(<),就可以写 &lt; 或者 &#60; 。

用实体(Entity)名字的好处是比较好理解,一看lt,大概就猜出是less than的意思,但是其劣势在于并不是所有的浏览器都支持最新的Entity名字。而实体(Entity)编号,各种浏览器都能处理。

提示:实体名称(Entity)是区分大小写的。

备注:同一个符号,可以用“实体名称”和“实体编号”两种方式引用,“实体名称”的优势在于便于记忆,但不能保证所有的浏览器都能顺利识别它,而“实体编号”则没有这种担忧,但它实在不方便记忆。

如何显示空格?

通常情况下,HTML会自动截去多余的空格。不管你加多少空格,都被看做一个空格。比如你在两个字之间加了10个空格,HTML会截去9个空格,只保留一个。为了在网页中增加空格,你可以使用&nbsp;表示空格。


HTML特殊转义字符列表

最常用的字符实体
Character Entities

显示 说明 实体名称 实体编号
半方大的空白 &ensp; &#8194;
全方大的空白 &emsp; &#8195;
不断行的空白格 &nbsp; &#160;
< 小于 &lt; &#60;
> 大于 &gt; &#62;
& &符号 &amp; &#38;
" 双引号 &quot; &#34;
© 版权 &copy; &#169;
® 已注册商标 &reg; &#174;
商标(美国) &#8482;
× 乘号 &times; &#215;
÷ 除号 &divide; &#247;

ISO 8859-1 (Latin-1)字符集

HTML 4.01 支持 ISO 8859-1 (Latin-1) 字符集。

备注:为了方便起见,以下表格中,“实体名称”简称为“名称”,“实体编号”简称为“编号”

显示 名称 编号 显示 名称 编号 显示 名称 编号 显示 名称 编号 显示 名称 编号
  &nbsp; &#160; ¡ &iexcl; &#161; ¢ &cent; &#162; £ &pound; &#163; ¤ &curren; &#164;
¥ &yen; &#165; ¦ &brvbar; &#166; § &sect; &#167; ¨ &uml; &#168; © &copy; &#169;
ª &ordf; &#170; « &laquo; &#171; ¬ &not; &#172; ­ &shy; &#173; ® &reg; &#174;
¯ &macr; &#175; ° &deg; &#176; ± &plusmn; &#177; ² &sup2; &#178; ³ &sup3; &#179;
´ &acute; &#180; µ &micro; &#181; &para; &#182; · &middot; &#183; ¸ &cedil; &#184;
¹ &sup1; &#185; º &ordm; &#186; » &raquo; &#187; ¼ &frac14; &#188; ½ &frac12; &#189;
¾ &frac34; &#190; ¿ &iquest; &#191; À &Agrave; &#192; Á &Aacute; &#193; Â &Acirc; &#194;
à &Atilde; &#195; Ä &Auml; &#196; Å &Aring; &#197; Æ &AElig; &#198; Ç &Ccedil; &#199;
È &Egrave; &#200; É &Eacute; &#201; Ê &Ecirc; &#202; Ë &Euml; &#203; Ì &Igrave; &#204;
Í &Iacute; &#205; Î &Icirc; &#206; Ï &Iuml; &#207; Ð &ETH; &#208; Ñ &Ntilde; &#209;
Ò &Ograve; &#210; Ó &Oacute; &#211; Ô &Ocirc; &#212; Õ &Otilde; &#213; Ö &Ouml; &#214;
× &times; &#215; Ø &Oslash; &#216; Ù &Ugrave; &#217; Ú &Uacute; &#218; Û &Ucirc; &#219;
Ü &Uuml; &#220; Ý &Yacute; &#221; Þ &THORN; &#222; ß &szlig; &#223; à &agrave; &#224;
á &aacute; &#225; â &acirc; &#226; ã &atilde; &#227; ä &auml; &#228; å &aring; &#229;
æ &aelig; &#230; ç &ccedil; &#231; è &egrave; &#232; é &eacute; &#233; ê &ecirc; &#234;
ë &euml; &#235; ì &igrave; &#236; í &iacute; &#237; î &icirc; &#238; ï &iuml; &#239;
ð &eth; &#240; ñ &ntilde; &#241; ò &ograve; &#242; ó &oacute; &#243; ô &ocirc; &#244;
õ &otilde; &#245; ö &ouml; &#246; ÷ &divide; &#247; ø &oslash; &#248; ù &ugrave; &#249;
ú &uacute; &#250; û &ucirc; &#251; ü &uuml; &#252; ý &yacute; &#253; þ &thorn; &#254;
ÿ &yuml; &#255;

数学和希腊字母标志
symbols, mathematical symbols, and Greek letters

显示 名称 编号 显示 名称 编号 显示 名称 编号 显示 名称 编号 显示 名称 编号
ƒ &fnof; &#402; Α &Alpha; &#913; Β &Beta; &#914; Γ &Gamma; &#915; Δ &Delta; &#916;
Ε &Epsilon; &#917; Ζ &Zeta; &#918; Η &Eta; &#919; Θ &Theta; &#920; Ι &Iota; &#921;
Κ &Kappa; &#922; Λ &Lambda; &#923; Μ &Mu; &#924; Ν &Nu; &#925; Ξ &Xi; &#926;
Ο &Omicron; &#927; Π &Pi; &#928; Ρ &Rho; &#929; Σ &Sigma; &#931; Τ &Tau; &#932;
Υ &Upsilon; &#933; Φ &Phi; &#934; Χ &Chi; &#935; Ψ &Psi; &#936; Ω &Omega; &#937;
α &alpha; &#945; β &beta; &#946; γ &gamma; &#947; δ &delta; &#948; ε &epsilon; &#949;
ζ &zeta; &#950; η &eta; &#951; θ &theta; &#952; ι &iota; &#953; κ &kappa; &#954;
λ &lambda; &#955; μ &mu; &#956; ν &nu; &#957; ξ &xi; &#958; ο &omicron; &#959;
π &pi; &#960; ρ &rho; &#961; ς &sigmaf; &#962; σ &sigma; &#963; τ &tau; &#964;
υ &upsilon; &#965; φ &phi; &#966; χ &chi; &#967; ψ &psi; &#968; ω &omega; &#969;
? &thetasym; &#977; ? &upsih; &#978; ? &piv; &#982; &bull; &#8226; &hellip; &#8230;
&prime; &#8242; &Prime; &#8243; &oline; &#8254; &frasl; &#8260; &weierp; &#8472;
&image; &#8465; &real; &#8476; &trade; &#8482; &alefsym; &#8501; &larr; &#8592;
&uarr; &#8593; &rarr; &#8594; &darr; &#8595; &harr; &#8596; &crarr; &#8629;
&lArr; &#8656; &uArr; &#8657; &rArr; &#8658; &dArr; &#8659; &hArr; &#8660;
&forall; &#8704; &part; &#8706; &exist; &#8707; &empty; &#8709; &nabla; &#8711;
&isin; &#8712; &notin; &#8713; &ni; &#8715; &prod; &#8719; &sum; &#8721;
&minus; &#8722; &lowast; &#8727; &radic; &#8730; &prop; &#8733; &infin; &#8734;
&ang; &#8736; &and; &#8743; &or; &#8744; &cap; &#8745; &cup; &#8746;
&int; &#8747; &there4; &#8756; &sim; &#8764; &cong; &#8773; &asymp; &#8776;
&ne; &#8800; &equiv; &#8801; &le; &#8804; &ge; &#8805; &sub; &#8834;
&sup; &#8835; &nsub; &#8836; &sube; &#8838; &supe; &#8839; &oplus; &#8853;
&otimes; &#8855; &perp; &#8869; &sdot; &#8901; ? &lceil; &#8968; ? &rceil; &#8969;
? &lfloor; &#8970; ? &rfloor; &#8971; ? &lang; &#9001; ? &rang; &#9002; &loz; &#9674;
&spades; &#9824; &clubs; &#9827; &hearts; &#9829; &diams; &#9830;

重要的国际标记
markup-significant and internationalization characters

显示 名称 编号 显示 名称 编号 显示 名称 编号 显示 名称 编号 显示 名称 编号
&quot; &#34; & &amp; &#38; < &lt; &#60; > &gt; &#62; Œ &OElig; &#338;
œ &oelig; &#339; Š &Scaron; &#352; š &scaron; &#353; Ÿ &Yuml; &#376; ˆ &circ; &#710;
˜ &tilde; &#732; &ensp; &#8194; &emsp; &#8195; &thinsp; &#8201; &zwnj; &#8204;
&zwj; &#8205; &lrm; &#8206; &rlm; &#8207; &ndash; &#8211; &mdash; &#8212;
&lsquo; &#8216; &rsquo; &#8217; &sbquo; &#8218; &ldquo; &#8220; &rdquo; &#8221;
&bdquo; &#8222; &dagger; &#8224; &Dagger; &#8225; &permil; &#8240; &lsaquo; &#8249;
&rsaquo; &#8250; &euro; &#8364;


JavaScript转义符

转义序列 字符
\b 退格
\f 走纸换页
\n 换行
\r 回车
\t 横向跳格 (Ctrl-I)
\' 单引号
\” 双引号
\\ 反斜杠

编程的时候要注意特殊字符的问题,很多运行时出现的问题都是因为特殊字符的出现而引起的。

注意,由于反斜杠本身用作转义符,因此不能直接在脚本中键入一个反斜杠。如果要产生一个反斜杠,必须一起键入两个反斜杠 (\\)。


编码转换(to Unicode)

(程序代码来源于网络)

Js版

<script>

     test = "你好abc"

     str = ""

     for( i=0;    i<test.length; i++ )

     {

      temp = test.charCodeAt(i).toString(16);

      str    += "\\u"+ new Array(5-String(temp).length).join("0") +temp;

     }

     document.write (str)

</script>

vbs版

Function Unicode(str1)

     Dim str,temp

     str = ""

     For i=1    to len(str1)

      temp = Hex(AscW(Mid(str1,i,1)))

      If len(temp) < 5 Then    temp = right("0000" & temp, 4)

      str = str & "\u" & temp

     Next

     Unicode = str

End Function

Function htmlentities(str)

     For i = 1 to Len(str)

         char = mid(str, i, 1)

         If Ascw(char) > 128 then

             htmlentities = htmlentities & "&#" & Ascw(char) & ";"

         Else

             htmlentities = htmlentities & char

         End if

     Next

End Function

coldfusion

function nochaoscode(str)

{

     var new_str = “”;

     for(i=1; i lte len(str);i=i+1){

         if(asc(mid(str,i,1)) lt 128){

             new_str = new_str & mid(str,i,1);

         }else{

             new_str = new_str & “&##” & asc(mid(str,i,1));

         }

     }

     return new_str;

}


附:

在php中我们可以用mbstring的mb_convert_encoding函数实现这个正向及反向的转化。 如:

mb_convert_encoding (“你好”, “HTML-ENTITIES”, “gb2312″); //输出:&#20320;&#22909;

mb_convert_encoding (“&#20320;&#22909;”, “gb2312″, “HTML-ENTITIES”); //输出:你好

如果需要对整个页面转化,则只需要在php文件的头部加上这三行代码:

mb_internal_encoding(“gb2312″); // 这里的gb2312是你网站原来的编码

mb_http_output(“HTML-ENTITIES”);

ob_start(‘mb_output_handler’);

Tags: html, 转义

Related posts

发表在 未分类 | 标签为 , | 留下评论

python中使用nlpbamboo

原文http://blog.elias.cn/archives/399

from ctypes import *
 
# 通过 C 接口载入 libbamboo ,“.dylib”是 Mac OSX 下的动态库后缀, Linux 下应该是“libbamboo.so”:
libbamboo = CDLL('libbamboo.so.2')
# 调用 bamboo_init() 函数得到一个分词器实例:
bamboo_init = libbamboo.bamboo_init
bamboo_init.restype = c_void_p
bamboo_handler = bamboo_init(c_char_p('crf_seg'), None)
# 如果返回的实例是 None (也即 C 中的 Null ),表示实例生成失败,那我们打印出错原因:
if bamboo_handler is None:
    bamboo_strerror = libbamboo.bamboo_strerror
    bamboo_strerror.restype = c_char_p
    print bamboo_strerror()
    print 'ok'
else:
    # 把文本传给分词器准备分词:
    # 待分词的文本必须是 utf-8 编码的 bytes string ,所以我们要把 unicode string encode 一下:
    libbamboo.bamboo_setopt(bamboo_handler, c_long(0), c_char_p(u'我爱北京天安门'.encode('utf-8')))
    # 真正开始分词:
    bamboo_parse = libbamboo.bamboo_parse
    bamboo_parse.restype = c_char_p
    # 下一行得到分词结果(空格分隔),格式还是 utf-8 编码的 bytes string ,我们把它 decode 成 unicode :
    segged = bamboo_parse(bamboo_handler).decode('utf-8')
    print type(segged), len(segged), segged
# 调用 bamboo_clean() 函数释放分词器实例:
 
libbamboo.bamboo_clean(bamboo_handler)
Tags: ctypes, nlpbamboo, python

Related posts

发表在 python | 标签为 , , | 留下评论

在python的urllib2中使用socks代理

今天采集的时候在突然不能访问采集的网站了,使用代理却可以访问。使用plink.exe通过VPS做的socks5代理,找到了这篇文章,解决问题。

python2.5中的urllib2支持http代理,不支持socks代理。假如代码库或者编码时使用了urllib2,同时又要使用socks,就需要第三方的库来实现。幸运的是,已经有人造好了轮子。

SocksiPy是一个socks module。它提供了一个类socket的接口,支持socks4、socks5和http proxy。下载后在代码中引用socks.py即可,也可以写个setup.py文件安装到python的site-packages目录中。
使用时,将下面的代码放在调用urllib2的代码之前即可:

import socks
import socket
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 8080)
socket.socket = socks.socksocket
import urllib2
print urllib2.urlopen('http://panweizeng.com').read()

如果是自己写的程序,也可以尝试使用pycurl这个库。ubuntu使用sudo apt-get install python-pycurl python-pycurl-dbg安装。
示例代码

如果在程序外部使用socks,推荐使用tsocks。ubuntu中直接使用sudo apt-get install tsocks安装。安装完毕以后需要修改/etc/tsocks.conf。
配置样例如下

import pycurl
c = pycurl.Curl()
c.setopt(pycurl.URL, 'http://panweizeng.com')
c.setopt(pycurl.PROXY, '127.0.0.1')
c.setopt(pycurl.PROXYPORT, 8080)
c.setopt(pycurl.PROXYTYPE, pycurl.PROXYTYPE_SOCKS5)
c.perform()

# 默认代理服务器

server = 127.0.0.1
# 代理服务器类型
server_type = 5
# 代理服务器端口
server_port = 8080

使用时,在命令行输入tsocks 程序名即可。例如ubuntu下的epiphany浏览器没有代理设置,如果想使用socks代理,输入tsocks epiphany-browser即可(注意先关闭其他的epiphany实例)

原文地址:http://panweizeng.com/archives/855

Tags: pycurl, socket, urllib2, 代理

Related posts

发表在 未分类 | 标签为 , , , | 留下评论

UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 45-51: ordinal not in range(128)

今天在做采集的时候,测试时结果写入文件出错,
写入文件时出错:
Traceback (most recent call last):
File “C:\Users\liugehao\Downloads\get.py”, line 91, in
#a = get_url(regx1_url,’none’,”http://www.xxx.com/Book/ShowBookList.aspx?pa
ge=2″,site[sitenum]['charset'])
UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 45-51: ordinal not in range(128)

>>>import sys
>>> print sys.getdefaultencoding()
ascii
>>> reload(sys)
>>> sys.setdefaultencoding('UTF-8')

或者更改 \python25\Lib\site.py文件setencoding方法中的encoding变量,我的在文件的第366行:

def setencoding():
    """Set the string encoding used by the Unicode implementation.  The
    default is 'ascii', but if you're willing to experiment, you can
    change this."""
    encoding = "ascii" # Default value set by _PyUnicode_Init()
Tags: 编码

Related posts

发表在 python | 标签为 | 留下评论

网站字数统计

这段代码是公司要请人翻译网站,所以统计了下字数。

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import urllib2,shelve,re
 
#取得汉字正则 unicode
rx = re.compile(u"[\u4E00-\u9FFF\u3400-\u4dbf\uf900-\ufaff\u3040-\u309f\uac00-\ud7af]", re.UNICODE)
 
p1=re.compile('.+?',re.I|re.S)
p2=re.compile('(|\'>|>)',re.I|re.S)#提取链接地址
p3=re.compile('(.*?)')
 
p4 = re.compile('\.\w+$')
 
count=0
filecount=0
def geturl(url):
 
    print url
    global p1,p2,count,filecount,f
 
    if url in f.keys():
        return
    content=urllib2.urlopen(url).read().decode('gbk','ignore')
    urlsplit=url.split('/')
 
    curUrl=url.replace(urlsplit[len(urlsplit)-1],'')
    siteUrl=url.split(urlsplit[3])[0]
    urls=p1.findall(content)
    title=p3.findall(content,1)[0].encode('utf-8')
    c=len(rx.findall(content))
    count+=c
    filecount+=1
    f[url]=[title,c]
    print url,'有汉字:%s\n' % c
    print '-'*20
    for x in urls:
        x1=p2.search(x).group(3)
 
        #extname=p4.findall(x1.strip())[0]
 
        if '.html' not in x1 and '.php' not in x1:
            continue
 
        if 'http:' not in x1:
            if x1[:1]=='/':
                x1=siteUrl+x1[1:]
            else:
                if x1.startswith('./'):
                    x1=curUrl+x1[2:]
                else:
                    x1=curUrl+x1
 
        x1=x1.encode('utf-8')
        #不是www.yundaex.com的站不计数
 
        if not x1.lower().startswith('http://www.yundaex.com'):
            continue
 
        if x1 not in f.keys():
            geturl(x1)
 
def js():
 
    content=urllib2.urlopen('http://www.yundaex.com/www/doc.js').read()
    rx=re.compile('[ |]?www_root\+"(.*\.html)')
    urls=rx.findall(content)
    for url in urls:
        if 'www_root' in url:
            url=url.split('"')[2]
 
        if url!='index.html':
            geturl('http://www.yundaex.com/www/'+url)
 
if __name__=="__main__":
    f=shelve.open('url.dat')
    geturl('http://www.yundaex.com/www/index.html')
    js()
    print "共有文件  %s  汉字  %s " % (filecount,count)
    f1=open('url.txt','w')
    for x in f.keys():
        print >>f1,x,f[x][0],f[x][1]
    print >>f1,"\n\n 共有文件  %s  汉字  %s " % (filecount,count)
    f1.close()
    f.close()
Tags: urllib2

Related posts

发表在 python | 标签为 | 留下评论