处理爬回来的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 pymongoconn = pymongo.Connection('192.168.17.129', 27017)db = conn.youyuandb["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 MySQLdbconn = 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
重启成功后,在其他计算机上,便可以登录。