遇到问题:python2.x和python3.x有区别。
1. 编码问题,报错ASCII时要在前面加上
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
,路径中有中文字符需要把str类型的转为Unicode类型,使用.decode(‘utf-8’)
2. Print问题,python2.x版本的print没有括号,想要带括号需在所有import之前加上from __future__ import print_function
。
注:未按要求使用Anaconda,因为用pip也能下载安装。
安装MongoDB到C盘。
运行发现代理不好使,保存到mongoDB后不知道怎么查看。
注意:需要先运行第二个代码块即我自己的start queue.py,把地址写进MongoDB,然后再运行多线程+多进程代码即multithreading.py,才能不一直显示“队列没有数据”。
另,MogoQueue.py的pop_title()
函数内,需把return record['主题']
改为return record['主题'.decode('utf-8')]
才能不报错:KeyError。因为python2.7的编码问题,record['主题']
的“主题”两字应转换成utf-8类型。
遇到问题:ImportError: No module named items
解决:http://stackoverflow.com/questions/10570635/scrapy-importerror-no-module-named-items
个人使用了from __future__ import absolute_import
这种方法。
安装一个python操作mysql的包mysql-connector-python-2.1.4
更改sql.py中的sql类的语句为
sql = 'INSERT INTO dd_name (xs_name,xs_author,category,name_id) VALUES (%(xs_name)s,%(xs_author)s,%(category)s,%(name_id)s)'
报错:ProgrammingError: 1045 (28000): Access denied for user ‘ROOT’@’localhost’ (using password: YES)
数据库操作:
用管理员身份打开Cmd
net start mysql
E:
Cd E:\mysql5.7\bin
mysql -hlocalhost -uroot -p123456
show databases;
use test
DROP TABLE IF EXISTS `dd_name`;
CREATE TABLE `dd_name` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`xs_name` varchar(255) DEFAULT NULL,
`xs_author` varchar(255) DEFAULT NULL,
`category` varchar(255) DEFAULT NULL,
`name_id` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=38 DEFAULT CHARSET=utf8mb4;
show tables;
注意分号!!!
第二部分的sql语句:
DROP TABLE IF EXISTS `dd_chaptername`;
CREATE TABLE `dd_chaptername` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`xs_chaptername` varchar(255) DEFAULT NULL,
`xs_content` text,
`id_name` int(11) DEFAULT NULL,
`num_id` int(11) DEFAULT NULL,
`url` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2726 DEFAULT CHARSET=gb18030;
SET FOREIGN_KEY_CHECKS=1;
报错:UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 1-2: ordinal not in range(128)
在前面加上
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
报错:UnicodeDecodeError: ‘utf8’ codec can’t decode bytes in position 0-1: invalid continuation byte,尝试多种方法无果后,把所有的str(…)的字符串都用unicode(str(response.meta['chaptername']).replace('\xa0', ''), errors='ignore')
这种形式替换了。
如:
注意:原本的域名23wx.com改为了23us.com
没有vip卡号所以登不进去。。。
注:刚发现还有一篇scrapy分布式的前篇没有看,但因为跟项目和毕设相关度不大所以以后再看吧。谢谢崔庆才老师,您的博客对我帮助太大了。