`
desert3
  • 浏览: 2142105 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

使用python抓取某网站数据

阅读更多

任务:抓取某网站数据(物品,参数,图片)

近来对于 python 的学习热情比较高,感觉用起来比较方便,效率也好,就决定采用 python 来做上述任务, Mysql 来存储数据。

 

Mysql 版本:

mysql-5.1.35-win32.msi 管理工具: Navicat for 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 this MySQL 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> flush privileges;

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'

if sys.getdefaultencoding() != default_encoding:

    reload(sys)

sys.setdefaultencoding (default_encoding)

8, 代码内部的中文字符串在命令行中显示乱码

使用中文字符串的地方,在字符串前面追加 u ,表明这是 1 unicode 字符串,如u'总共’

9, eclipse 插件pydev setdefaultencoding 不存在,但是却能正常执行

python 解释器启动时会自动删除 sys 模块的 setdefaultencoding() 方法 , 使得运行时不能调用 , 所以需要通过 reload(sys) 重新加载

python 2.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

0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics