好的,这期开始之前,我们先要干两件事。第一件事是找到spiders文件夹里的dbmeizi_scrapy.py。打开他,上一篇教程里,这个爬虫文件是这么写的。
| 12345678910 | 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 |
现在我们需要改成这样.
| 12345678910 | 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
我们的服务端代码如下。
| 123456789101112131415161718192021222324252627 | from flask import Flask, requestimport jsonfrom bson import json_utilfrom bson.objectid import ObjectIdimport 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 我们的服务端代码如下。
|