Scrapy+Flask+Mongodb+Swift开发全攻略(2)
admin
2023-07-30 21:58:24
0

好的,这期开始之前,我们先要干两件事。第一件事是找到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;\”>

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__\’:    app9.5px !important;\”>Python

相关内容

热门资讯

500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
python绘图库Matplo... 本文简单介绍了Python绘图库Matplotlib的安装,简介如下: matplotlib是pyt...
Prometheus+Graf... 一,Prometheus概述 1,什么是Prometheus?Prometheus是最初在Sound...