成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

爬蟲與swift

marser / 1271人閱讀

摘要:分析使用爬蟲爬取網(wǎng)站,并按事先的要求將需要的項(xiàng)目保存到數(shù)據(jù)庫(kù)中,然后再使用框架編寫一個(gè)服務(wù)器講數(shù)據(jù)庫(kù)中的數(shù)據(jù)讀出來(lái),最后用編寫一個(gè)應(yīng)用將數(shù)據(jù)顯示出來(lái)。實(shí)現(xiàn)爬蟲實(shí)現(xiàn)上圖是的文檔結(jié)構(gòu),下面主要介紹幾個(gè)文件。

分析

使用爬蟲爬取網(wǎng)站page,并按事先的要求將需要的項(xiàng)目保存到數(shù)據(jù)庫(kù)中,然后再使用python flask框架編寫一個(gè)web 服務(wù)器講數(shù)據(jù)庫(kù)中的數(shù)據(jù)讀出來(lái),最后用swift編寫一個(gè)應(yīng)用將數(shù)據(jù)顯示出來(lái)。我這里選區(qū)的所要爬取的網(wǎng)站是豆瓣電影網(wǎng)。

技術(shù)選用

爬蟲:使用python的scrapy爬蟲
數(shù)據(jù)庫(kù):使用mongoDB,存儲(chǔ)網(wǎng)頁(yè)只需要key和value形式進(jìn)行存儲(chǔ)就好了,所以在這里選擇mongoDB這種NOSQL數(shù)據(jù)庫(kù)進(jìn)行存儲(chǔ)
服務(wù)器:使用python的flask框架,用了你就知道幾行代碼就能完成很多事情,當(dāng)然特別是flask可以根據(jù)需要組裝空間,超輕量級(jí)。

實(shí)現(xiàn):

scrapy爬蟲實(shí)現(xiàn)


上圖是scrapy的文檔結(jié)構(gòu),下面主要介紹幾個(gè)文件。

a. items.py

from scrapy.item import Item, Field
import scrapy
class TopitmeItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    title = Field()
    dataSrc = Field()
    dataId = Field()
    filmReview = Field()
    startCount = Field()
這里可以把items.py看作是mvc中的model,在items里我們定義了自己需要的模型。

b. pipelines.py

import pymongo
from scrapy.conf import settings
from scrapy.exceptions import DropItem
from scrapy import log
class MongoDBPipeline(object):
    def __init__(self):
        connection = pymongo.MongoClient(
            settings["MONGODB_SERVER"],
            settings["MONGODB_PORT"]
        )
        db = connection[settings["MONGODB_DB"]]
        self.collection = db[settings[‘MONGODB_COLLECTION’]]
    def process_item(self, item, spider):
        valid = True
        for data in item:
            if not data:
                valid = False
                raise DropItem("Missing {0}!".format(data))
        if valid:
            self.collection.insert(dict(item))
            log.msg("Beauty added to MongoDB database!",
                    level=log.DEBUG, spider=spider)
        return item

俗稱管道,這個(gè)文件主要用來(lái)把我們獲取的item類型存入mongodb

c. settings.py

BOT_NAME = "topitme"
SPIDER_MODULES = ["topitme.spiders"]
NEWSPIDER_MODULE = "topitme.spiders"
BOT_NAME = "topitme"
ITEM_PIPELINES = ["topitme.pipelines.MongoDBPipeline",]
MONGODB_SERVER = "localhost"
MONGODB_PORT = 27017
MONGODB_DB = "topitme"
MONGODB_COLLECTION = "beauty"
# Crawl responsibly by identifying yourself (and your website) on the user-agent
#USER_AGENT = "topitme (+http://www.yourdomain.com)"

這里需要設(shè)置一些常量,例如mongodb的數(shù)據(jù)庫(kù)名,數(shù)據(jù)庫(kù)地址和數(shù)據(jù)庫(kù)端口號(hào)等等

d. topitme_scrapy.py

from scrapy import Spider
from scrapy.selector import Selector
from topitme.items import TopitmeItem

import sys
reload(sys)
sys.setdefaultencoding(‘utf8’)#設(shè)置默認(rèn)編碼格式

class topitmeSpider(Spider):
    name = "topitmeSpider"
    allowed_domin =["movie.douban.com"]
    start_urls = [
        "http://movie.douban.com/review/latest/",
    ]
    def parse(self, response):
        results = Selector(response).xpath("http://ul[@class="tlst clearfix"]")
        for result in results:
            item = TopitmeItem()
            # item["title"] = result.xpath("li[@class="ilst"]/a/@src").extract()[0]
            item["title"] = result.xpath("li[@class="ilst"]/a/@title").extract()[0].encode("utf-8")
            item["dataSrc"] = result.xpath("li[@class="ilst"]/a/img/@src").extract()[0]
            item["filmReview"] = result.xpath("li[@class="clst report-link"]/div[@class="review-short"]/span/text()").extract()[0].encode("utf-8")
            item["dataId"] = result.xpath("li[@class="clst report-link"]/div[@class="review-short"]/@id").extract()[0]
            item["dataId"] = result.xpath("li[@class="nlst"]/h3/a/@title").extract()[0]
            item["startCount"] = 0
            yield item

# ul[@class="tlst clearfix"]/li[3]/div[1]
# //ul[@class="tlst clearfix"]/li[@class="ilst"]/a/img/@src

這個(gè)文件是爬蟲程序的主要代碼,首先我們定義了一個(gè)類名為topitmeSpider的類,繼承自Spider類,然后這個(gè)類有3個(gè)基礎(chǔ)的屬性,name表示這個(gè)爬蟲的名字,等一下我們?cè)诿钚袪顟B(tài)啟動(dòng)爬蟲的時(shí)候,爬蟲的名字就是name規(guī)定的。
allowed_domin意思就是指在movie.douban.com這個(gè)域名爬東西。
start_urls是一個(gè)數(shù)組,里面用來(lái)保存需要爬的頁(yè)面,目前我們只需要爬首頁(yè)。所以只有一個(gè)地址。
然后def parse就是定義了一個(gè)parse方法(肯定是override的,我覺(jué)得父類里肯定有一個(gè)同名方法),然后在這里進(jìn)行解析工作,這個(gè)方法有一個(gè)response參數(shù),你可以把response想象成,scrapy這個(gè)框架在把start_urls里的頁(yè)面下載了,然后response里全部都是html代碼和css代碼。這之中最主要的是涉及一個(gè)xpath的東西,XPath即為XML路徑語(yǔ)言,它是一種用來(lái)確定XML(標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言的子集)文檔中某部分位置的語(yǔ)言??梢酝ㄟ^(guò)xpath定位到我們想要獲取的元素。

服務(wù)器

使用python的flask框架實(shí)現(xiàn)

from flask import Flask, request
import json
from bson import json_util
from bson.objectid import ObjectId
import pymongo

app = Flask(__name__)

client = pymongo.MongoClient()
db = client["topitme"]
def toJson(data):
    return json.dumps(data, default=json_util.default)

@app.route("/FilmReview", methods=["GET"])

def findMovie():
    if request.method == "GET":
        json_results = []
        for result in results:
            json_results.append(result)
        return toJson(json_results)

if __name__ == "__main__":
    app.run(debug=True)



首先可以看到代碼,client,db兩個(gè)參量是為了取得數(shù)據(jù)庫(kù)連接。
findMovie函數(shù)響應(yīng)http request,然后返回?cái)?shù)據(jù)庫(kù)數(shù)據(jù),以JSON形式返回

swift

ios的實(shí)現(xiàn)就不詳細(xì)介紹了,這里寫這部分只是為了,驗(yàn)證結(jié)果。

運(yùn)行:

起服務(wù)器:

起數(shù)據(jù)庫(kù):

運(yùn)行爬蟲:

訪問(wèn)服務(wù)器:http://localhost:5000/FileReview 可以看到數(shù)據(jù)已經(jīng)存儲(chǔ)到數(shù)據(jù)庫(kù)中了

ios運(yùn)行情況:

下面是原網(wǎng)站網(wǎng)頁(yè)展示,可以看到所要的數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù),并且正常顯示出來(lái)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/45390.html

相關(guān)文章

  • 保存數(shù)據(jù)到MySql數(shù)據(jù)庫(kù)——我用scrapy寫爬蟲(二)

    摘要:坦克大戰(zhàn)上簡(jiǎn)介上的坦克大戰(zhàn)相信大家都玩過(guò)有逃學(xué)玩坦克的可以自己默默的扣一個(gè)了我們現(xiàn)在長(zhǎng)大了,學(xué)習(xí)游戲開發(fā)了。 寫在前面 上一篇(https://www.tech1024.cn/origi... )說(shuō)了如何創(chuàng)建項(xiàng)目,并爬去網(wǎng)站內(nèi)容,下面我們說(shuō)一下如何保存爬去到的數(shù)據(jù) 開始爬取 創(chuàng)建Spider,上一篇我們已經(jīng)創(chuàng)建了ImoocSpider,我們做一下修改,可以連續(xù)下一頁(yè)爬取。scrapyD...

    Kross 評(píng)論0 收藏0
  • 6月份最新語(yǔ)言排行:Java,Python我更看好誰(shuí)?

    摘要:作為一種現(xiàn)代語(yǔ)言,它看起來(lái)像一種舊語(yǔ)言,因更傾向于做移動(dòng)和網(wǎng)站開噶。所以,個(gè)人覺(jué)得每種語(yǔ)言都有其自己的優(yōu)勢(shì),找到自己的短板并補(bǔ)足自己的短板。總結(jié)于哥更推薦想成為某種語(yǔ)言編程大牛的人,不建議只想搬運(yùn)帶代碼的碼農(nóng)。 文章首發(fā)于終端研發(fā)部,轉(zhuǎn)載,請(qǐng)標(biāo)明原文鏈接 今天的主題是:探討一下6月份語(yǔ)言排行還有我的最新展望! 最近,編程語(yǔ)言排行榜前幾天發(fā)布更新了,在最新的TIOBE編程語(yǔ)言排行榜中,J...

    svtter 評(píng)論0 收藏0
  • SegmentFault 技術(shù)周刊 Vol.40 - 2018,來(lái)學(xué)習(xí)一門新的編程語(yǔ)言吧!

    摘要:入門,第一個(gè)這是一門很新的語(yǔ)言,年前后正式公布,算起來(lái)是比較年輕的編程語(yǔ)言了,更重要的是它是面向程序員的函數(shù)式編程語(yǔ)言,它的代碼運(yùn)行在之上。它通過(guò)編輯類工具,帶來(lái)了先進(jìn)的編輯體驗(yàn),增強(qiáng)了語(yǔ)言服務(wù)。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺(jué)已經(jīng)到來(lái)了,總結(jié)過(guò)去的 2017,相信小伙們一定有很多收獲...

    caspar 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<