使用python抓取某网站数据
任务:抓取某网站数据(物品,参数,图片)近来对于python的学习热情比较高,感觉用起来比较方便,效率也好,就决定采用python来做上述任务,Mysql来存储数据。
Mysql版本:
mysql-5.1.35-win32.msi管理工具:Navicatfor MySQL
相关模块:
Python 2.5 + MySQLdb(MySQL-python-1.2.2.win32-py2.5.exe)+ BeautifulSoup 3.0
python 2.5Windows安装版下载地址:
http://www.python.org/ftp/python/2.5/python-2.5.msi
MySQLdb下载地址:
http://sourceforge.net/projects/mysql-python/files/mysql-python/1.2.2/MySQL-python-1.2.2.win32-py2.5.exe/download
BeautifulSoup下载地址:
http://www.crummy.com/software/BeautifulSoup/download/3.x/BeautifulSoup-3.0.0.py
BeautifulSoup官网文档:
http://www.crummy.com/software/BeautifulSoup/documentation.zh.html
程序中使用的模块:
traceback:traceback.format_exc() 处理异常时输出错误日志
urllib2:通过url访问相应网站(设置HTTP代理防止被网站封IP导致无法访问)
urlparse:urlparse.urlparse把url解析成六部分,方便处理
urlparse.urljoin(baseUrl,relativeUrl) 根据既存的绝对URL,把一相对URL转换成相应的决定URL(当抓取网站中link等链接使用相对路径,可以非常方便地取得link对应的绝对路径URL)
os:os.path.exists 路径是否存在
os.path.join 把路径和文件名称合成新的路径
os.sep 操作系统分隔符
os.makedirs创建多层次的目录
os.makedir() 创建当层目录
time:time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))取得当前时间
3天半的开发过程中出现了不少问题,记录如下:
1, MySQLdb使用不了。
由于MySQLdb作者不提供对Windows平台python2.7的安装包,作为新手没有办法就只好退回使用python2.5
2, 下载了BeautifulSoup后不知道怎么使用
使用BeautifulSoup时只需要下载BeautifulSoup-3.0.0.py这个文件(注意下载后把版本号删除,这样使用时import BeautifulSoup才不会出错【python文件的文件名就是模块名】)
文件名中删除了-3.0.0后,pydev中报错,不知道什么原因,但可以正常导入使用
3, MySQLdb控制事务时发现不起作用
检查:1,数据库创建时是否允许使用事务2,表创建时是否允许支持事务InnoDB
4, 程序报错:Error No. 1130 Host 'x.x.x.x' is not allowed to connect to thisMySQL server
这是由于mysql服务端root用户所对应的客户端权限设置问题(安装mysql时注意选择允许通过ip访问数据库)。默认所对应的客户端地址只有localhost(也就是服务端的机器),所以要增加相应的地址。下面增加任何地址都可以访问mysql服务端的root用户
# mysql
mysql> grant all privileges on *.* to 'root'@'%' identified by'123456';
或者mysql> grant all privileges on *.* to 'root'@'192.168.1.1'identified by '123456' with grant option;
mysql> flushprivileges;
mysql> exit
5, 程序报错:Error Nr.1045 Access denied for user"root@COMPUTERNAME"(using password: NO)
Root用户没有密码不让访问,设置密码为123456
SET PASSWORD FOR'root'@'localhost' = PASSWORD('123456');
6, 程序插入,读取数据到mysql都是乱码
Python文件设置编码 utf-8 (文件前面加上 # -*- coding: utf-8 -*-)
Python文件保存时的编码utf-8
MySQL数据库charset=utf-8
Python连接MySQL是加上参数 charset=utf8
7, 在eclipse插件pydev中正常,迁移到命令行执行后,显示编码错误,程序无法执行。
追加如下代码:
import sys
#兼容命令行执行
default_encoding = 'utf-8'
ifsys.getdefaultencoding() != default_encoding:
reload(sys)
sys.setdefaultencoding(default_encoding)
8, 代码内部的中文字符串在命令行中显示乱码
使用中文字符串的地方,在字符串前面追加u,表明这是1个unicode字符串,如u'总共’
9, eclipse插件pydev报setdefaultencoding不存在,但是却能正常执行
python解释器启动时会自动删除sys模块的setdefaultencoding()方法, 使得运行时不能调用, 所以需要通过reload(sys)重新加载
python2.3以后的默认编码是ascii
python3.0开始默认编码为utf-8
10,报错:OperationalError: (1040, 'Too many connections')
发现mysql的默认最大连接数为100,出现上述错误的原因mysql事务控制时连接没有及时释放掉
查看mysql当前活动的连接:到mysql安装目录的bin文件夹下运行
mysqladmin-uroot -p123456 -h192.168.3.79 processlist
页:
[1]