成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

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

Codeing_ls / 3195人閱讀

摘要:接上回第二部分,編寫(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è)Django項(xiàng)目,在這個(gè)Django項(xiàng)目里面創(chuàng)建了一個(gè)叫做web的阿皮皮。

接上回~

第二部分,編寫(xiě)爬蟲(chóng)。

工欲善其事,必先利其器。

bashapt-get install vim # 接上回,我們?cè)趕creen里面是root身份哦~

當(dāng)然了,現(xiàn)在我要想一個(gè)采集的目標(biāo),為了方便,我就選擇segmentfault吧,這網(wǎng)站寫(xiě)博客不錯(cuò),就是在海外上傳圖片有點(diǎn)慢。

這個(gè)爬蟲(chóng),就像我訪問(wèn)一樣,要分步驟來(lái)。 我先看到segmentfault首頁(yè),然后發(fā)現(xiàn)里面有很多tags,每個(gè)tags下面,才是一個(gè)一個(gè)的問(wèn)題的內(nèi)容。

所以,爬蟲(chóng)也要分為這幾個(gè)步驟來(lái)寫(xiě)。 但是我要反著寫(xiě),先寫(xiě)內(nèi)容爬蟲(chóng),再寫(xiě)分類(lèi)爬蟲(chóng), 因?yàn)槲蚁搿?/p> 2.1 編寫(xiě)內(nèi)容爬蟲(chóng)

首先,給爬蟲(chóng)建立個(gè)目錄,在項(xiàng)目里面和app同級(jí),然后把這個(gè)目錄變成一個(gè)python的package

bashmkdir ~/python_spider/sfspider
touch ~/python_spider/sfspider/__init__.py

以后,這個(gè)目錄就叫爬蟲(chóng)包了

在爬蟲(chóng)包里面建立一個(gè)spider.py用來(lái)裝我的爬蟲(chóng)們

bashvim ~/python_spider/sfspider/spider.py

一個(gè)基本的爬蟲(chóng),只需要下面幾行代碼:

(代碼下面會(huì)提供)
然后呢,就可以玩玩我們的“爬蟲(chóng)”了。
進(jìn)入python shell

python>>> from sfspider import spider
>>> s = spider.SegmentfaultQuestionSpider("1010000002542775")
>>> s.url
>>> "http://segmentfault.com/q/1010000002542775"
>>> print s.dom("h1#questionTitle").text()
>>> 微信JS—SDK嵌套選擇圖片和上傳圖片接口,實(shí)現(xiàn)一鍵上傳圖片,遇到問(wèn)題

看吧,我現(xiàn)在已經(jīng)可以通過(guò)爬蟲(chóng)獲取segmentfault的提問(wèn)標(biāo)題了。下一步,為了簡(jiǎn)化代碼,我把標(biāo)題,回答等等的屬性都寫(xiě)為這個(gè)蜘蛛的屬性。代碼如下

python# -*- coding: utf-8 -*-
import requests # requests作為我們的html客戶端
from pyquery import PyQuery as Pq # pyquery來(lái)操作dom


class SegmentfaultQuestionSpider(object):

    def __init__(self, segmentfault_id): # 參數(shù)為在segmentfault上的id
        self.url = "http://segmentfault.com/q/{0}".format(segmentfault_id)
        self._dom = None # 弄個(gè)這個(gè)來(lái)緩存獲取到的html內(nèi)容,一個(gè)蜘蛛應(yīng)該之訪問(wèn)一次

    @property
    def dom(self): # 獲取html內(nèi)容
        if not self._dom:
            document = requests.get(self.url)
            document.encoding = "utf-8"
            self._dom = Pq(document.text)
        return self._dom

    @property 
    def title(self): # 讓方法可以通過(guò)s.title的方式訪問(wèn) 可以少打?qū)ㄌ?hào)
        return self.dom("h1#questionTitle").text() # 關(guān)于選擇器可以參考css selector或者jquery selector, 它們?cè)趐yquery下幾乎都可以使用

    @property
    def content(self):
        return self.dom(".question.fmt").html() # 直接獲取html 膽子就是大 以后再來(lái)過(guò)濾

    @property
    def answers(self):
        return list(answer.html() for answer in self.dom(".answer.fmt").items()) # 記住,Pq實(shí)例的items方法是很有用的

    @property
    def tags(self):
        return self.dom("ul.taglist--inline > li").text().split() # 獲取tags,這里直接用text方法,再切分就行了。一般只要是文字內(nèi)容,而且文字內(nèi)容自己沒(méi)有空格,逗號(hào)等,都可以這樣弄,省事。

然后,再把玩一下升級(jí)后的蜘蛛。

python>>> from sfspider import spider
>>> s = spider.SegmentfaultQuestionSpider("1010000002542775")
>>> print s.title
>>> 微信JS—SDK嵌套選擇圖片和上傳圖片接口,實(shí)現(xiàn)一鍵上傳圖片,遇到問(wèn)題
>>> print s.content
>>> # [故意省略] #
>>> for answer in s.answers
        print answer
>>> # [故意省略] #
>>> print "/".join(s.tags)
>>> 微信js-sdk/python/微信開(kāi)發(fā)/javascript

OK,現(xiàn)在我的蜘蛛玩起來(lái)更方便了。

2.2 編寫(xiě)分類(lèi)爬蟲(chóng)

下面,我要寫(xiě)一個(gè)抓取標(biāo)簽頁(yè)面的問(wèn)題的爬蟲(chóng)。
代碼如下, 注意下面的代碼是添加在已有代碼下面的, 和之前的最后一行之間 要有兩個(gè)空行

pythonclass SegmentfaultTagSpider(object):

    def __init__(self, tag_name, page=1):
        self.url = "http://segmentfault.com/t/%s?type=newest&page=%s" % (tag_name, page)
        self.tag_name = tag_name
        self.page = page
        self._dom = None

    @property
    def dom(self):
        if not self._dom:
            document = requests.get(self.url)
            document.encoding = "utf-8"
            self._dom = Pq(document.text)
            self._dom.make_links_absolute(base_url="http://segmentfault.com/") # 相對(duì)鏈接變成絕對(duì)鏈接 爽
        return self._dom


    @property
    def questions(self):
        return [question.attr("href") for question in self.dom("h2.title > a").items()]

    @property
    def has_next_page(self): # 看看還有沒(méi)有下一頁(yè),這個(gè)有必要
        return bool(self.dom("ul.pagination > li.next")) # 看看有木有下一頁(yè)

    def next_page(self): # 把這個(gè)蜘蛛殺了, 產(chǎn)生一個(gè)新的蜘蛛 抓取下一頁(yè)。 由于這個(gè)本來(lái)就是個(gè)動(dòng)詞,所以就不加@property了
        if self.has_next_page:
            self.__init__(tag_name=self.tag_name ,page=self.page+1)
        else:
            return None

現(xiàn)在可以兩個(gè)蜘蛛一起把玩了,就不貼出詳細(xì)把玩過(guò)程了。。。

python>>> from sfspider import spider
>>> s = spider.SegmentfaultTagSpider("微信")
>>> question1 = s.questions[0]
>>> question_spider = spider.SegmentfaultQuestionSpider(question1.split("/")[-1])
>>> # [故意省略] #

想做小偷站的,看到這里基本上就能搞出來(lái)了。 套個(gè)模板 加一個(gè)簡(jiǎn)單的腳本來(lái)接受和返回請(qǐng)求就行了。

未完待續(xù)。
下一篇,采集入庫(kù)!

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/37502.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ù),用建立可供用戶訪問(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建立可供用戶訪問(wèn)的網(wǎng)站,網(wǎng)站部署。 ...

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

    摘要:進(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)槲疑洗瓮?這次又不...

    amuqiao 評(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
  • Python

    摘要:最近看前端都展開(kāi)了幾場(chǎng)而我大知乎最熱語(yǔ)言還沒(méi)有相關(guān)。有關(guān)書(shū)籍的介紹,大部分截取自是官方介紹。但從開(kāi)始,標(biāo)準(zhǔn)庫(kù)為我們提供了模塊,它提供了和兩個(gè)類(lèi),實(shí)現(xiàn)了對(duì)和的進(jìn)一步抽象,對(duì)編寫(xiě)線程池進(jìn)程池提供了直接的支持。 《流暢的python》閱讀筆記 《流暢的python》是一本適合python進(jìn)階的書(shū), 里面介紹的基本都是高級(jí)的python用法. 對(duì)于初學(xué)python的人來(lái)說(shuō), 基礎(chǔ)大概也就夠用了...

    dailybird 評(píng)論0 收藏0
  • scrapy-redis分布式爬蟲(chóng)框架詳解

    摘要:分布式爬蟲(chóng)框架詳解隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展與應(yīng)用的普及,網(wǎng)絡(luò)作為信息的載體,已經(jīng)成為社會(huì)大眾參與社會(huì)生活的一種重要信息渠道。下載器中間件位于引擎和下載器之間的框架,主要是處理引擎與下載器之間的請(qǐng)求及響應(yīng)。 scrapy-redis分布式爬蟲(chóng)框架詳解 隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展與應(yīng)用的普及,網(wǎng)絡(luò)作為信息的載體,已經(jīng)成為社會(huì)大眾參與社會(huì)生活的一種重要信息渠道。由于互聯(lián)網(wǎng)是開(kāi)放的,每個(gè)人都可以在網(wǎng)絡(luò)上...

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

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

0條評(píng)論

閱讀需要支付1元查看
<