BeautifulSoup的innerHTML实现

innerHTML方法用于提取某个标签内部的HTML内容,多数HTML Parser都实现了该方法。

BeautifulSoup暂未提供innerHTML方法,但我们可以通过遍历子元素并拼接html来实现它。

例如,我需要获取豆瓣音乐上某个专辑的描述信息,它位于一个id为info的div中。

参考:http://music.douban.com/subject/1394539/

我需要图示部分的html代码:

info-div

这时只需要一行代码:

album_info = u''.join([unicode(x) for x in soup.find('div', id='info').contents]).strip()

值得注意的是,豆瓣音乐的网页编码是utf8,需要先decode utf8再parse。

而在Beautiful内部,所有对象都是unicode object。

contents属性返回所有child element的列表。

因为我是在windows中文版的系统下写这段脚本,当需要在命令提示符下输出内容的时候,还必须先encode gbk。

print album_info.encode('gbk', 'ignore')

 

参考链接:

http://stackoverflow.com/questions/8112922/beautifulsoup-innerhtml

扫描"豆瓣音乐"所有专辑的简单Python脚本

我需要一些音乐数据,而 豆瓣音乐 上相关数据是非常齐全的。

即使是十分小众、鲜有人听过的专辑,豆瓣也提供了较为详细的描述。

摆在我面前的第一个问题是,如何将豆瓣音乐上的专辑一网打尽,一个不遗漏地抓取到。

我们观察某个专辑的页面: http://music.douban.com/subject/1415369/

看到subject后跟着一串数字ID,这时候一个简单的思路已经出来了:

将id从1不断递增,扫描完所有的ID,检查哪些ID是存在的

又观察到大多数专辑页面上存在相关推荐,也就是那个“喜欢某某专辑的人也喜欢… …”。

这里存在一对N的超链接映射,最终形成了网络,于是可以有第二个思路:

将某个专辑加入队列,从它出发,通过 “也喜欢” 来获取新专辑,并将这些新专辑加入队尾

每完成一次操作,就从队列中删除队首的专辑

循环上面的过程,直到处理完队列中的所有元素

最终获取到的就是包含第一个元素的网

当然,上面的思路是有缺陷的,那些孤立的专辑无法被包括进来。

继续阅读扫描"豆瓣音乐"所有专辑的简单Python脚本

解决Ubuntu下pymssql访问SQL Server返回None的Bug

前几天帮朋友写了段python脚本,爬网上的一些数据。

他使用SQL Server作为db back-end,代码里我使用到pymssql。

大约三四百万条记录,但目标站点做了数据防爬取,一个IP访问频次有限制。

我在自己的VPS上也拷贝了一个副本,同时运行。

随后发现程序在VPS上运行异常,在shell中导入后测试,发现SELCET语句竟然每次都是返回None。

这确实是个BUG,不过并非我的SQL语句有问题,而是pymssql自身的BUG。见:

https://bugs.launchpad.net/ubuntu/+source/pymssql/+bug/918896

apt-get install python-pymssql

安装的版本较低,是1.02。

而我在自己的PC上安装的是2.0.0。

上面的链接中也提到了快速解决的方法,依次执行:

apt-get remove python-pymssql

apt-get install python-pip

pip install pymssql

第一个Tkinter程序,sibDomains工具

前两天看了Python的界面开发包Tkinter(Tk interface)。
某种程度上,它算是Python的标准UI库,无需另外安装。
今天尝试写了第一个小程序,用来查询跟指定域名host在同一DNS server的域名列表。
实际上它等同于nslookup中ls命令的作用。但为了安全,绝大部分DNS服务器都会禁止ls的。

sibDomains
继续阅读第一个Tkinter程序,sibDomains工具

python MySQLdb API手册

python访问MySQL server,可以使用 _mysql模块, 也可使用进一步封装过的MySQLdb包。

若使用MySQLdb,则需要单独安装。

今天发现MySQLdb的API手册居然被墙了… …

它的原始链接是: http://mysql-python.sourceforge.net/MySQLdb-1.2.2/

我把这个手册下载并上传到自己的博客上,供需要的朋友参考。

https://www.lijiejie.com/python/MySQLdb/

 

继续阅读python MySQLdb API手册