好的,这期开始之前,我们先要干两件事。第一件事是找到spiders文件夹里的dbmeizi_scrapy.py。打开他,上一篇教程里,这个爬虫文件是这么写的。
1 2 3 4 5 6 7 8 9 10 |
def parse(self, response): liResults = Selector(response).xpath('//li[@class="span3"]') for li in liResults: for img in li.xpath('.//img'): item = MeiziItem() item['title'] = img.xpath('@data-title').extract() item['dataid'] = img.xpath('@data-id').extract() item['datasrc'] = img.xpath('@data-src').extract() item['startcount'] = 0 yield item |
现在我们需要改成这样.
1 2 3 4 5 6 7 8 9 10 |
def parse(self, response): liResults = Selector(response).xpath('//li[@class="span3"]') for li in liResults: for img in li.xpath('.//img'): item = MeiziItem() item['title'] = img.xpath('@data-title').extract()[0] item['dataid'] = img.xpath('@data-id').extract()[0] item['datasrc'] = img.xpath('@data-src').extract()[0] item['startcount'] = 0 yield item |
why?
很简单,因为用extract这个方法得到的是一个数组,而我们的每一个字段实际上是一个string而非一个array,如果不取第一个值,那么存入mongodb之后,title这个key对应的value是一个数组,这会导致我们将mongodb里的数据转换成json之后需要在客户端再进行分解。很麻烦。
第二件事,是删除我们上一个爬虫爬取的数据。
如图:
ok,重新运行我们的爬虫,scrapy crawl dbmeiziSpider,现在,check一下数据库里的内容,是不是以前的每个字段对应的内容已经从数组变成了string了。
开始编写服务器
激动人心的时刻要开始了,我们要从iOS程序员变成一个菜鸟级别的server端选手。不过能用自己编写的iOS客户端从自己写的server下载数据,也挺爽的,不是么?
在编写服务器端的时候确保你用pip安装了下面几个库。
1.pymongo
2.Flask
我们的服务端代码如下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
from flask import Flask, request import json from bson import json_util from bson.objectid import ObjectId import pymongo app = Flask(__name__) mongoClient = pymongo.MongoClient('localhost', 27017) db = mongoClient['dbmeizi'] def toJson(data): return json.dumps(data, default=json_util.default) @app.route('/meizi/', methods=['GET']) def findmeizi(): if request.method == 'GET': lim = int(request.args.get('limit', 10)) off = int(request.args.get('offset'),0) results = db['meizi'].find().skip(off).limit(lim) json_results= [] for result in results: json_results.append(result) return toJson(json_results) if __name__ == '__main__': appped-line" id="crayon-5812b5654644b264287404-26">if __name__ == '__main__': appyntax crayon-theme-github crayon-font-monaco crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 12px; margin-bottom: 12px; font-size: 13px !important; line-height: 15px !important;">
现在我们需要改成这样.
why? 很简单,因为用extract这个方法得到的是一个数组,而我们的每一个字段实际上是一个string而非一个array,如果不取第一个值,那么存入mongodb之后,title这个key对应的value是一个数组,这会导致我们将mongodb里的数据转换成json之后需要在客户端再进行分解。很麻烦。 第二件事,是删除我们上一个爬虫爬取的数据。 开始编写服务器激动人心的时刻要开始了,我们要从iOS程序员变成一个菜鸟级别的server端选手。不过能用自己编写的iOS客户端从自己写的server下载数据,也挺爽的,不是么? 在编写服务器端的时候确保你用pip安装了下面几个库。 2.Flask 我们的服务端代码如下。
|