处理爬回来的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
  1. 数据库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

  1. 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

  1. 安装需要使用root账号,安装mysql过程中,需要设置mysql的root账号的密码,不要忽略了。
    sudo apt-get install mysql-server
    apt install mysql-client
    apt install libmysqlclient-dev
    
  2. 以上3个软件包安装完成后,使用如下命令查询是否安装成功:
    sudo netstat -tap | grep mysql
    
    查询结果如下图所示,表示安装成功。
    root@xyz:~# netstat -tap | grep mysql
    tcp6       0      0 [::]:mysql              [::]:*                  LISTEN      7510/mysqld     
    root@xyz:~#
    

设置mysql远程访问

  1. 编辑mysql配置文件,把其中bind-address = 127.0.0.1注释了

     vi /etc/mysql/mysql.conf.d/mysqld.cnf
    
  2. 使用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;
    
  3. 重启mysql

     service mysql restart
    

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