处理爬回来的items
在完成前三步骤操作之后,开始第四步
4.启动一个或多个后处理存储:
有缘网的profile爬回来了,这些profile都被保存在redis的youyuan:items队列中。因为配置文件里面没有定制自己的ITEM_PIPELINES,而是使用了RedisPipeline,
于是现在需要另外处理。
在scrapy-youyuan目录下可以看到一个process_items.py文件,这个文件就是scrapy-redis的example提供的从redis读取item进行处理的模版。
修改 process_items.py文件 第50行
name-->username
url-->source_url
Argparse Tutorial文档:
https://docs.python.org/2/howto/argparse.html
try:
name = item.get('username')
url = item.get('source_url')
logger.debug("[%s] Processing item: %s <%s>", source, name, url)
except KeyError:
logger.exception("[%s] Failed to process item:\n%r",
source, pprint.pformat(item))
continue
python process_items.py youyuan:items --host=127.0.0.1 --port=6379 --verbose
运行效果:
存储
假设我们要把youyuan:items中保存的Profile读出来写进Mongodb、mysql,那么我们可以修改模板process_items.py文件,然后保持后台运行就可以不停地入库爬回来的Profile了。
导出MongoDB
- 数据库youyuan、表名Infos
import pymongo
conn = pymongo.Connection('192.168.17.129', 27017)
db = conn.youyuan
db["Infos"].save(item)
执行命令:
python process_items.py youyuan:items -v
设置调试信息:
效果如图:
导出MYSQL
- sql语句:建立数据库youyuan、表名Infos
-- ----------------------------
-- Table structure for Infos
-- ----------------------------
DROP TABLE IF EXISTS `Infos`;
CREATE TABLE `Infos` (
`header_url` varchar(255) DEFAULT NULL,
`pic_urls` text,
`username` varchar(255) DEFAULT NULL,
`monologue` varchar(255) DEFAULT NULL,
`age` varchar(255) DEFAULT NULL,
`source` varchar(255) DEFAULT NULL,
`source_url` varchar(255) DEFAULT NULL,
`crawled` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
`spider` varchar(255) DEFAULT NULL,
`id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=742 DEFAULT CHARSET=utf8;
修改process_items.py
import MySQLdb
conn = MySQLdb.connect(host='192.168.17.129', user='root', passwd='root', db = 'youyuan', port=3306,charset="utf8")
cur = conn.cursor()
sqlstr = '''insert into Infos(header_url,pic_urls,username,monologue,age,source,source_url,crawled,spider)
values('%s','%s','%s','%s','%s','%s','%s','%s','%s')'''%(
item['header_url'],
item['pic_urls'],
item['username'],
item['monologue'],
item['age'],
item['source'],
item['source_url'],
item['crawled'],
item['spider']);
print(sqlstr)
cur.execute(sqlstr)
conn.commit()
cur.close()
Ubuntu 16.04 安装mysql并设置远程访问
安装mysql
- 安装需要使用root账号,安装mysql过程中,需要设置mysql的root账号的密码,不要忽略了。
sudo apt-get install mysql-server apt install mysql-client apt install libmysqlclient-dev
- 以上3个软件包安装完成后,使用如下命令查询是否安装成功:
查询结果如下图所示,表示安装成功。sudo netstat -tap | grep mysql
root@xyz:~# netstat -tap | grep mysql tcp6 0 0 [::]:mysql [::]:* LISTEN 7510/mysqld root@xyz:~#
设置mysql远程访问
编辑mysql配置文件,把其中bind-address = 127.0.0.1注释了
vi /etc/mysql/mysql.conf.d/mysqld.cnf
使用root进入mysql命令行,执行如下2个命令,示例中mysql的root账号密码:root
python@ubuntu:/etc/mysql/conf.d$ mysql -u root -p Enter password: grant all on *.* to root@'%' identified by 'root'; flush privileges;
重启mysql
service mysql restart
重启成功后,在其他计算机上,便可以登录。