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

資訊專(zhuān)欄INFORMATION COLUMN

Python爬蟲(chóng)建站入門(mén)手記——從零開(kāi)始建立采集站點(diǎn)(三:采集入庫(kù))

amuqiao / 1808人閱讀

摘要:進(jìn)入正題第三部分,采集入庫(kù)。內(nèi)容如下加上這個(gè)可以記住問(wèn)題在的位置,方便以后更新或者其他操作都很直白,關(guān)于各個(gè)可以看看的文檔。代碼如下添加方法采集當(dāng)前分頁(yè)正在抓取分頁(yè)這個(gè)地方寫(xiě)得很笨,之前該在加上這個(gè)屬性。

上回,我已經(jīng)大概把爬蟲(chóng)寫(xiě)出來(lái)了。
我寫(xiě)了一個(gè)內(nèi)容爬蟲(chóng),一個(gè)爬取tag里面內(nèi)容鏈接的爬蟲(chóng)
其實(shí)還差一個(gè),就是收集一共有哪些tag的爬蟲(chóng)。但是這里先不說(shuō)這個(gè)問(wèn)題,因?yàn)槲疑洗瓮?這次又不想弄。。
還有個(gè)原因:如果實(shí)際采集的話(huà),直接用http://segmentfault.com/questions/newest?page=1這個(gè)鏈接 獲取所有問(wèn)題,挨個(gè)爬就行。

進(jìn)入正題

第三部分,采集入庫(kù)。 3.1 定義數(shù)據(jù)庫(kù)(or model or schema)

為了入庫(kù),我需要在Django定義一個(gè)數(shù)據(jù)庫(kù)的結(jié)構(gòu)。(不說(shuō)nosql和mongodb(也是一個(gè)nosql但是很像關(guān)系型)的事)
還記得那個(gè)名叫web的app么,里面有個(gè)叫models.py的文件,我現(xiàn)在就來(lái)編輯它。

bashvim ~/python_spider/web/models.py

內(nèi)容如下:

python# -*- coding: utf-8 -*-
from django.db import models

# Create your models here.


class Tag(models.Model):
    title = models.CharField(max_length=30)

    def __unicode__(self):
        return self.title


class Question(models.Model):
    title = models.CharField(max_length=255)
    content = models.TextField()
    tags = models.ManyToManyField(Tag, related_name="questions")
    sf_id = models.CharField(max_length=16, default="0")?。!〖由线@個(gè)可以記住問(wèn)題在sf的位置,方便以后更新或者其他操作
    update_date = models.DateTimeField(auto_now=True)

    def __unicode__(self):
        return self.title


class Answer(models.Model):
    question = models.ForeignKey(Question, related_name="answers")
    content = models.TextField()

    def __unicode__(self):
        return "To question %s" % self.question.title

都很直白,關(guān)于各個(gè)field可以看看 Django 的文檔。

然后,我需要告訴我的python_spider項(xiàng)目,在運(yùn)行的時(shí)候加載web這個(gè)app(項(xiàng)目不會(huì)自動(dòng)加載里面的app)。

bashvim ~/python_spider/python_spider/settings.py

在INSTALLED_APPS里面加入web:

pythonINSTALLED_APPS = (
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
    "web",
)

下面,就可以用django自動(dòng)生成數(shù)據(jù)庫(kù)schema了

bashcd ~/python_spider
python manage.py makemigrations
python manage.py migrate

現(xiàn)在,我~/python_spider目錄就產(chǎn)生了一個(gè)db.sqlite3文件,這是我的數(shù)據(jù)庫(kù)。
把玩一番我的模型

python>>> from web.models import Answer, Question, Tag
>>> tag = Tag()
>>> tag.title = u"測(cè)試標(biāo)簽"
>>> tag.save()
>>> tag

>>> question = Question(title=u"測(cè)試提問(wèn)", content=u"提問(wèn)內(nèi)容")
>>> question.save()
>>> question.tags.add(tag)
>>> question.save()
>>> answer = Answer(content=u"回答內(nèi)容", question=question)
>>> answer.save()
>>> tag.questions.all() # 根據(jù)tag找question
[]
>>> question.tags.all() # 獲取question的tags
[]
>>> question.answers.all() # 獲取問(wèn)題的答案
[]

以上操作結(jié)果正常,說(shuō)明定義的models是可用的。

3.2 入庫(kù)

接下來(lái),我需要把采集的信息入庫(kù),說(shuō)白了,就是把我自己蜘蛛的信息利用django的ORM存到django連接的數(shù)據(jù)庫(kù)里面,方便以后再用Django讀取用于做站。

入庫(kù)的方法太多了,這里隨便寫(xiě)一種,就是在web app里面建立一個(gè)spider.py, 里面定義兩個(gè)蜘蛛,繼承之前自己寫(xiě)的蜘蛛,再添加入庫(kù)方法。

bashvim ~/python_spider/web/spider.py

代碼如下:

python# -*- coding: utf-8 -*-
from sfspider import spider
from web.models import Answer, Question, Tag


class ContentSpider(spider.SegmentfaultQuestionSpider):

    def save(self): # 添加save()方法
        sf_id = self.url.split("/")[-1] # 1
        tags = [Tag.objects.get_or_create(title=tag_title)[0] for tag_title in self.tags]?。?2
        question, created = Question.objects.get_or_create(
            sf_id=sf_id,
            defaults={"title":self.title, "content":self.content}
        ) # 3
        question.tags.add(*tags) # 4
        question.save()
        for answer in self.answers:
            Answer.objects.get_or_create(content=answer, question=question)
        return question, created


class TagSpider(spider.SegmentfaultTagSpider):

    def crawl(self): # 采集當(dāng)前分頁(yè)
        sf_ids = [url.split("/")[-1] for url in self.questions]
        for sf_id in sf_ids:
            question, created = ContentSpider(sf_id).save()

    def crawl_all_pages(self):
        while True:
            print u"正在抓取TAG:%s, 分頁(yè):%s" % (self.tag_name, self.page) # 5
            self.crawl()
            if not self.has_next_page:
                break
            else:
                self.next_page()
  

這個(gè)地方寫(xiě)得很笨,之前該在SegmentfaultQuestionSpider加上這個(gè)屬性。

創(chuàng)建或者獲取該提問(wèn)的tags

創(chuàng)建或者獲取提問(wèn),采用sf_id來(lái)避免重復(fù)

把tags都添加到提問(wèn),這里用*是因?yàn)檫@個(gè)方法原本的參數(shù)是(tag1, tag2, tag3)。但是我們的tags是個(gè)列表

測(cè)試的時(shí)候方便看看進(jìn)度

然后,測(cè)試下我們的入庫(kù)腳本

bashpython manage.py shell
python>>> from web.spider import TagSpider
>>> t = TagSpider(u"微信")
>>> t.crawl_all_pages()
正在抓取TAG:微信, 分頁(yè):1
正在抓取TAG:微信, 分頁(yè):2
正在抓取TAG:微信, 分頁(yè):3
KeyboardInterrupt # 用control-c中斷運(yùn)行,測(cè)試一下就行:)
>>> from web.models import Tag, Question
>>> Question.objects.all()
[, , , , , , , , , , , , , , , , , , , , "...(remaining elements truncated)..."]
>>> Question.objects.get(pk=5).tags.all() # 數(shù)據(jù)庫(kù)中id=5的question的tags
[, , , ]
3.3 設(shè)置django.contrib.admin來(lái)查看和編輯內(nèi)容

為了更直觀的觀察我采集的數(shù)據(jù),我可以利用django自帶的admin
編輯文件

bashvim ~/python_spider/web/admin.py
pythonfrom django.contrib import admin
from web.models import Tag, Question, Answer

admin.site.register(Tag)
admin.site.register(Question)
admin.site.register(Answer)

然后創(chuàng)建超級(jí)用戶(hù)

bashpython manage.py createsuperuser # 根據(jù)提示創(chuàng)建

啟動(dòng)測(cè)試服務(wù)器

bashpython manage.py runserver 0.0.0.0:80 # 我這是在runabove上,本地直接manage.py runserver

然后,我訪問(wèn)http://192.99.71.91/admin/登錄剛剛創(chuàng)建的賬號(hào),就能對(duì)內(nèi)容進(jìn)行查看和編輯了

OK, 今天的內(nèi)容到此,
下一篇,是編寫(xiě)django的view,套用簡(jiǎn)單的模板來(lái)建站。

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

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

相關(guān)文章

  • Python爬蟲(chóng)建站入門(mén)手記——從零開(kāi)始建立采集站點(diǎn)(一:環(huán)境搭建)

    摘要:從今天起,我將在這里更新一個(gè)系列的簡(jiǎn)單爬蟲(chóng)到建立網(wǎng)站的實(shí)踐手記。內(nèi)容將會(huì)從最簡(jiǎn)單的開(kāi)始,環(huán)境搭建,基本爬蟲(chóng),入庫(kù),用建立可供用戶(hù)訪問(wèn)的網(wǎng)站,網(wǎng)站部署。第一部分,買(mǎi),裝環(huán)境。我們爬蟲(chóng)站點(diǎn)的所有文件都放在里面。 從今天起,我將在這里更新一個(gè)系列的python簡(jiǎn)單爬蟲(chóng)到建立網(wǎng)站的實(shí)踐手記。 內(nèi)容將會(huì)從最簡(jiǎn)單的開(kāi)始,環(huán)境搭建,基本爬蟲(chóng),入庫(kù),用Django建立可供用戶(hù)訪問(wèn)的網(wǎng)站,網(wǎng)站部署。 ...

    HackerShell 評(píng)論0 收藏0
  • Python爬蟲(chóng)建站入門(mén)手記——從零開(kāi)始建立采集站點(diǎn)(二:編寫(xiě)爬蟲(chóng)

    摘要:接上回第二部分,編寫(xiě)爬蟲(chóng)。進(jìn)入微信嵌套選擇圖片和上傳圖片接口,實(shí)現(xiàn)一鍵上傳圖片,遇到問(wèn)題看吧,我現(xiàn)在已經(jīng)可以通過(guò)爬蟲(chóng)獲取的提問(wèn)標(biāo)題了。微信故意省略想做小偷站的,看到這里基本上就能搞出來(lái)了。下一篇,采集入庫(kù) 上回,我裝了環(huán)境 也就是一對(duì)亂七八糟的東西 裝了pip,用pip裝了virtualenv,建立了一個(gè)virtualenv,在這個(gè)virtualenv里面,裝了Django,創(chuàng)建了一個(gè)...

    Codeing_ls 評(píng)論0 收藏0
  • [時(shí)隔20個(gè)月來(lái)填坑]Python爬蟲(chóng)建站入門(mén)手記

    摘要:大概個(gè)月前已新手的身份寫(xiě)了幾篇入門(mén)的文章爬蟲(chóng)建站入門(mén)手記從零開(kāi)始建立采集站點(diǎn)結(jié)果弄到一半就棄坑了。前兩次的視頻存檔編寫(xiě)爬蟲(chóng)入庫(kù)由于很久沒(méi)有寫(xiě)這些東西了,視頻里面有一半的時(shí)間在和上找資料。。。下面是建立的一個(gè)微信群的二維碼 大概20個(gè)月前已新手的身份寫(xiě)了幾篇入門(mén)的文章:Python爬蟲(chóng)建站入門(mén)手記——從零開(kāi)始建立采集站點(diǎn) 結(jié)果弄到一半就棄坑了。 該填的坑是要填的,于是我最近開(kāi)始在 liv...

    Lavender 評(píng)論0 收藏0
  • 從零開(kāi)始nodejs系列文章

    摘要:從零開(kāi)始系列文章,將介紹如何利做為服務(wù)端腳本,通過(guò)框架開(kāi)發(fā)。框架是基于的引擎,是目前速度最快的引擎。瀏覽器就基于,同時(shí)打開(kāi)個(gè)網(wǎng)頁(yè)都很流暢。標(biāo)準(zhǔn)的開(kāi)發(fā)框架,可以幫助我們迅速建立站點(diǎn),比起的開(kāi)發(fā)效率更高,而且學(xué)習(xí)曲線(xiàn)更低。 從零開(kāi)始nodejs系列文章,將介紹如何利Javascript做為服務(wù)端腳本,通過(guò)Nodejs框架web開(kāi)發(fā)。Nodejs框架是基于V8的引擎,是目前速度最快的Java...

    rickchen 評(píng)論0 收藏0
  • 小程序開(kāi)發(fā)(一):使用scrapy爬蟲(chóng)采集數(shù)據(jù)

    摘要:用途廣泛,可以用于數(shù)據(jù)挖掘監(jiān)測(cè)和自動(dòng)化測(cè)試。運(yùn)行下,發(fā)現(xiàn)數(shù)據(jù)全部存到了數(shù)據(jù)庫(kù)中。提供了一些接口來(lái)查看項(xiàng)目爬蟲(chóng)情況,以及執(zhí)行或者停止執(zhí)行爬蟲(chóng)。完成小程序所需要的所有接口的開(kāi)發(fā),以及使用定時(shí)任務(wù)執(zhí)行爬蟲(chóng)腳本。 過(guò)完年回來(lái),業(yè)余時(shí)間一直在獨(dú)立開(kāi)發(fā)一個(gè)小程序。主要數(shù)據(jù)是8000+個(gè)視頻和10000+篇文章,并且數(shù)據(jù)會(huì)每天自動(dòng)更新。 我會(huì)整理下整個(gè)開(kāi)發(fā)過(guò)程中遇到的問(wèn)題和一些細(xì)節(jié)問(wèn)題,因?yàn)閮?nèi)容會(huì)比...

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

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

0條評(píng)論

amuqiao

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<