处理爬回来的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

  1. try:
  2. name = item.get('username')
  3. url = item.get('source_url')
  4. logger.debug("[%s] Processing item: %s <%s>", source, name, url)
  5. except KeyError:
  6. logger.exception("[%s] Failed to process item:\n%r",
  7. source, pprint.pformat(item))
  8. continue
  1. python process_items.py youyuan:items --host=127.0.0.1 --port=6379 --verbose

运行效果:

处理爬回来的item - 图1

存储

假设我们要把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)

执行命令:

  1. python process_items.py youyuan:items -v

设置调试信息:

处理爬回来的item - 图2

效果如图:

处理爬回来的item - 图3

导出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()

处理爬回来的item - 图4

Ubuntu 16.04 安装mysql并设置远程访问

安装mysql

  • 安装需要使用root账号,安装mysql过程中,需要设置mysql的root账号的密码,不要忽略了。
  1. sudo apt-get install mysql-server
  2. apt install mysql-client
  3. apt install libmysqlclient-dev
  • 以上3个软件包安装完成后,使用如下命令查询是否安装成功:
  1. sudo netstat -tap | grep mysql

查询结果如下图所示,表示安装成功。

  1. root@xyz:~# netstat -tap | grep mysql
  2. tcp6 0 0 [::]:mysql [::]:* LISTEN 7510/mysqld
  3. root@xyz:~#

设置mysql远程访问

  • 编辑mysql配置文件,把其中bind-address = 127.0.0.1注释了
  1. vi /etc/mysql/mysql.conf.d/mysqld.cnf
  • 使用root进入mysql命令行,执行如下2个命令,示例中mysql的root账号密码:root
  1. python@ubuntu:/etc/mysql/conf.d$ mysql -u root -p
  2. Enter password:
  3. grant all on *.* to root@'%' identified by 'root';
  4. flush privileges;
  • 重启mysql
  1. service mysql restart

重启成功后,在其他计算机上,便可以登录。