摘要:分析使用爬蟲爬取網站,并按事先的要求將需要的項目保存到數據庫中,然后再使用框架編寫一個服務器講數據庫中的數據讀出來,最后用編寫一個應用將數據顯示出來。實現爬蟲實現上圖是的文檔結構,下面主要介紹幾個文件。
分析
使用爬蟲爬取網站page,并按事先的要求將需要的項目保存到數據庫中,然后再使用python flask框架編寫一個web 服務器講數據庫中的數據讀出來,最后用swift編寫一個應用將數據顯示出來。我這里選區的所要爬取的網站是豆瓣電影網。
技術選用爬蟲:使用python的scrapy爬蟲
數據庫:使用mongoDB,存儲網頁只需要key和value形式進行存儲就好了,所以在這里選擇mongoDB這種NOSQL數據庫進行存儲
服務器:使用python的flask框架,用了你就知道幾行代碼就能完成很多事情,當然特別是flask可以根據需要組裝空間,超輕量級。
scrapy爬蟲實現
上圖是scrapy的文檔結構,下面主要介紹幾個文件。
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 俗稱管道,這個文件主要用來把我們獲取的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)" 這里需要設置一些常量,例如mongodb的數據庫名,數據庫地址和數據庫端口號等等
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’)#設置默認編碼格式 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 這個文件是爬蟲程序的主要代碼,首先我們定義了一個類名為topitmeSpider的類,繼承自Spider類,然后這個類有3個基礎的屬性,name表示這個爬蟲的名字,等一下我們在命令行狀態啟動爬蟲的時候,爬蟲的名字就是name規定的。 allowed_domin意思就是指在movie.douban.com這個域名爬東西。 start_urls是一個數組,里面用來保存需要爬的頁面,目前我們只需要爬首頁。所以只有一個地址。 然后def parse就是定義了一個parse方法(肯定是override的,我覺得父類里肯定有一個同名方法),然后在這里進行解析工作,這個方法有一個response參數,你可以把response想象成,scrapy這個框架在把start_urls里的頁面下載了,然后response里全部都是html代碼和css代碼。這之中最主要的是涉及一個xpath的東西,XPath即為XML路徑語言,它是一種用來確定XML(標準通用標記語言的子集)文檔中某部分位置的語言。可以通過xpath定位到我們想要獲取的元素。
服務器
使用python的flask框架實現
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兩個參量是為了取得數據庫連接。 findMovie函數響應http request,然后返回數據庫數據,以JSON形式返回
swift
ios的實現就不詳細介紹了,這里寫這部分只是為了,驗證結果。
運行:起服務器:
起數據庫:
運行爬蟲:
訪問服務器:http://localhost:5000/FileReview 可以看到數據已經存儲到數據庫中了
ios運行情況:
下面是原網站網頁展示,可以看到所要的數據存儲到數據庫,并且正常顯示出來
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/45390.html
摘要:坦克大戰上簡介上的坦克大戰相信大家都玩過有逃學玩坦克的可以自己默默的扣一個了我們現在長大了,學習游戲開發了。 寫在前面 上一篇(https://www.tech1024.cn/origi... )說了如何創建項目,并爬去網站內容,下面我們說一下如何保存爬去到的數據 開始爬取 創建Spider,上一篇我們已經創建了ImoocSpider,我們做一下修改,可以連續下一頁爬取。scrapyD...
摘要:作為一種現代語言,它看起來像一種舊語言,因更傾向于做移動和網站開噶。所以,個人覺得每種語言都有其自己的優勢,找到自己的短板并補足自己的短板。總結于哥更推薦想成為某種語言編程大牛的人,不建議只想搬運帶代碼的碼農。 文章首發于終端研發部,轉載,請標明原文鏈接 今天的主題是:探討一下6月份語言排行還有我的最新展望! 最近,編程語言排行榜前幾天發布更新了,在最新的TIOBE編程語言排行榜中,J...
摘要:入門,第一個這是一門很新的語言,年前后正式公布,算起來是比較年輕的編程語言了,更重要的是它是面向程序員的函數式編程語言,它的代碼運行在之上。它通過編輯類工具,帶來了先進的編輯體驗,增強了語言服務。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經到來了,總結過去的 2017,相信小伙們一定有很多收獲...
閱讀 2953·2023-04-25 22:16
閱讀 2109·2021-10-11 11:11
閱讀 3253·2019-08-29 13:26
閱讀 598·2019-08-29 12:32
閱讀 3415·2019-08-26 11:49
閱讀 2996·2019-08-26 10:30
閱讀 1947·2019-08-23 17:59
閱讀 1511·2019-08-23 17:57