HANLEI'BLOG

迷失的人迷失了,相逢的人会再相逢

pyquery自动闭合空标签的解决办法

用pyquery对像的html方法获取网页内容,如果内容有空的标签如

from pyquery import PyQuery as pq
html="<h3></h3>"
a=pq(html)
print(a.html())

因为<h3></h3>中间没有内容,pyquery会自到闭合标签,输出后就变成了

<h3/>

这样得到的HTML内容很容易显视不正常,格式会乱掉。
解决办法是给html方法加参数如下

from pyquery import PyQuery as pq
html="<h3></h3>"
a=pq(html)
print(a.html(method='html'))

HANLEI 2017 年 05 月 17 日 暂无评论

关于这几天研究"微信公众号采集"的成果报告

生活总是在以为自己快要很得意的时候让你焦头烂额
前些天学习用python做网站采集,有些成果。于是就又想搞微信公众号的采集。因为之前想用PHP做过,研究了一下发现基本不可能。现在有了更专业的工具就又想试试了。因为我只知道搜狗有公众号的搜索,所以就打算从搜狗开始。

到目前为止做了以下工作

  1. 采集时要先访问一下搜狗首页,记录COOKIES,采集时都要带上。因为搜索肉容的链接和图片的访问都要验证COOKIES,没有可不行。

  2. 因为要有目标的采集所以就要用到搜索,但又不能直接跳到搜索结果页(会自动转到首页)。我用phantomjs在搜索首页调用js实现模拟表单提交,结果页就出来了。

  3. 不断的调试,因为还要发到自己的网站后台。

到目前为止的结果
就在刚才出现:"用户您好,您的访问过于频繁,为确认本次访问为正常用户行为,需要您协助验证。"。访问要输验证码。这我就没办法了。

微信公众号采集计划 终止

HANLEI 2017 年 05 月 12 日 暂无评论

python发送POST请求时的cookies和session

需要用python模拟登录后,模拟发表文章。但没学过phthon所以一直在百度。

self.ckjar = cookielib.MozillaCookieJar("cookies.txt")
ckproc = urllib2.HTTPCookieProcessor(self.ckjar)
self.opener = urllib2.build_opener(ckproc)
urllib2.install_opener(self.opener)
post_data = urllib.urlencode({
        'username' : username,
        'password' : password,
})
#发送登录POST
post_url = 'http://www.test.com/login'
req = urllib2.Request(url = post_url, data = post_data)
resp = urllib2.urlopen(req)
tem = resp.read()
resp.close()
self.ckjar.save(ignore_discard=True, ignore_expires=True)

这段代码是为urllib2操作统一添加cookies,可以正常登录并发表文章。又需要上传图片,网上找到代码如下

datagen, headers = multipart_encode({"file": open("test.jpeg", "rb")}) 
post_url = 'http://www.test.com/webuploader.php'
request = urllib2.Request(post_url, datagen, headers)
resp = urllib2.urlopen(request) 

图片可以正常发送,但是没有带cookies登录信息,不明白,找到下面的代码解决了

from poster.encode import multipart_encode  
from poster.streaminghttp import register_openers 

opener = register_openers()
opener.add_handler(urllib2.HTTPCookieProcessor(self.ckjar))
resp = urllib2.urlopen(request)
content = resp.read()

虽然还是有些不明所以,但也没有太多精力去研究,就这样吧。

HANLEI 2017 年 05 月 10 日 暂无评论

lnmp为编译安装的php安装扩展

编译安装PHP的时候没有安装fileinfo扩展,现在需要但不想重新编译安装php,可以使用以下方法。

  1. 跳转到fileinfo源代码目录 cd /root/downloads/php-5.6.9/ext/fileinfo/

  2. 执行 /usr/local/php/bin/phpize

  3. 执行 ./configure --with-php-config=/usr/local/php/bin/php-config

  4. 执行 make && make install

  5. 修改php.ini文件 vi /usr/local/php/etc/php.ini 在末尾增加extension = fileinfo.so即可

  6. 重启php-fpm ,/etc/init.d/php-fpm reload

以上方法同时适应于其它PHP扩展,只要进入相应的扩展目录编译即可。

HANLEI 2017 年 05 月 09 日 暂无评论

linux远程复制文件夹乱码,文件备份迁移的简单方法

事件的详情是这样的,有一台redhat5的服务器想要重装系统,系统的默认字符编码是GBK,服务器内的文件有大量中文文件名都是GBK编码。因为服务器上装有FTP服务,所有我在另一台备份机上安装lftp,通过mirror进行文件夹复制,正常复制完成,检查无错。

$ lftp 192.168.0.111    //连接FTP服务器
lftp 192.168.0.111:~> user admin    //用户登录,输入密码
口令: 
lftp admin@192.168.0.111:~> mirror ./ ./    //将FTP根目录复制到当装目录

系统装完后再利用lftp回拷文件的时候出错了,所有GBK编码的文件都无法复制,错误提示:

mirror: Access failed: 550 Can't change directory to ???: No such file or directory

编码的问题,因为文件中的GBK和UTF8都存在,没有找到好的解决方法,只好另找途径。结果发现了比FTP更有效的复制方法:scp

scp -r /home/test/ root@192.168.1.100:/root/

scp是通过SSH登录复制,复制文件夹要加-r
两个参数分别是本地路径和远程路径,执行下载文件,颠倒后为上传文件。命令执行后会提示输入远程用户的密码。拷贝过程不受编码影响。
如果sshd的端口号不是默认的22需要指定端口号

scp -r -P33222 /home/test/ root@192.168.1.100:/root/

HANLEI 2017 年 05 月 02 日 暂无评论

phantomjs错误cannot connect to X server处理方法

安装phantomjs后运行出错:cannot connect to X server
下面是解决方法:

$: Xvfb :2 -screen 0 800x600x24 2> /dev/null &
$: export DISPLAY=:2.0

也适用于其它程序的报错,解决的思路就是建立一个虚拟的图形界面然后设置为当前输出界面。

HANLEI 2017 年 05 月 02 日 暂无评论

nginx+php网站偶尔出现No input file specified.

没有预见性的,不定时的就会出现No input file specified.然后一刷新又正常了。
网上查找到了相关的处理方法
PHP偶尔出现No input file specified.错误

我的错误日志没有错误记录,不过我的问题也应该出在php-fpm进程太多。删除进程并重起php-fpm后一切回归正常。

HANLEI 2017 年 04 月 02 日 暂无评论

PHP跨根目录访问脚本的权限问题

关与这个标题总结不知道对不对,其实我遇到的问题更具体一些。

我的服务器安装的是lnmp.org的一键安装包,新建主机后会分配一个目录,这个目录就是网站的根目录/site。现在我要安装一个thinkphp5的网站,它的网站根目录需要设为/site/public,由/site/public/index.php来加载/site/app等其它目录的脚本。于是我在nging配置文件中将网站root根目录改为/site/public。然后就出问题,网站无法访问。分析后发现public下的脚本没有权限加载app等目录的脚本,只有根目录public下的文件权限。

经过查找资料发现这是PHP的一个安全隔离防跨站的功能,要在php.ini内设置站点可访问目录

open_basedir=/home/www/www.aaa.com:/tmp/:/proc/

lnmp在“/usr/local/nginx/conf/fastcgi.conf”这个文件中对此参数进行了统一设置

fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_root/:/tmp/:/proc/";

找到了问题所在只要稍作修改就可以了,我将fastcgi.conf内的设置注释掉,然后在vhost的配置文件单独加入

fastcgi_param PHP_ADMIN_VALUE "open_basedir=/home/wwwroot/site/:/tmp/:/proc/";

HANLEI 2017 年 04 月 01 日 暂无评论

yum提示“段错误 (core dumped)”的解决方法

换了国内的YUM源,结果出现错误无法运行。以为是YUM源的问题,换回旧的源还是出错,百度了一下发现大都是因为zlib的库文件存在多个版本而导至的,正好前两天因为版本需要编译安装了新版的zlib,所以基本确定问题所在了。

[root@mail ~]# yum makecache
Loading "security" plugin
Loading "installonlyn" plugin
Loading "rhnplugin" plugin
This system is not registered with RHN.
RHN support will be disabled.
Setting up repositories
base                      100% |=========================| 1.1 kB    00:00     
updates                   100% |=========================| 1.9 kB    00:00     
addons                    100% |=========================| 1.9 kB    00:00     
extras                    100% |=========================| 2.1 kB    00:00     
primary.xml.gz            100% |=========================| 1.3 MB    00:00     
段错误

然而按网上的提示处理后,还是出错,将RPM包卸载后问题依旧,最终重新装回系统的zlib RPM包,然后动新版的zlib编译目录将新版zlib卸载后终于恢复了正常。

[root@mail zlib-1.2.11]# make uninstall
cd /usr/local/include && rm -f zlib.h zconf.h
cd /usr/local/lib && rm -f libz.a; \
        if test -n "libz.so.1.2.11" -a -f libz.so.1.2.11; then \
          rm -f libz.so.1.2.11 libz.so libz.so.1; \
        fi
cd /usr/local/share/man/man3 && rm -f zlib.3
cd /usr/local/lib/pkgconfig && rm -f zlib.pc

HANLEI 2017 年 03 月 31 日 暂无评论

网站程序由WordPress更换为Typecho

可能因为WordPress是国外的产品吧,总是觉的哪里不得劲,随然有很多主题和插件但很多都有加载的资愿被墙的情况,风格上也没有特别喜欢的,可能真的是国介文化有距离吧。

在无意间看到Typecho时感觉挻不错,于是就路转粉了。因为每次换程序和换服务器都会记录一下,所以这次也不例外,而且这次不但换了程序,连服务器也一并换了。上篇文不是说我买了个VPS吗,现在BLOG就暂时在这儿安家了。

HANLEI 2017 年 03 月 23 日 暂无评论