遇到问题: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分布式的前篇没有看,但因为跟项目和毕设相关度不大所以以后再看吧。谢谢崔庆才老师,您的博客对我帮助太大了。