国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Python爬蟲建站入門手記——從零開始建立采集站點(二:編寫爬蟲)

Codeing_ls / 3168人閱讀

摘要:接上回第二部分,編寫爬蟲。進入微信嵌套選擇圖片和上傳圖片接口,實現一鍵上傳圖片,遇到問題看吧,我現在已經可以通過爬蟲獲取的提問標題了。微信故意省略想做小偷站的,看到這里基本上就能搞出來了。下一篇,采集入庫

上回,我裝了環境
也就是一對亂七八糟的東西
裝了pip,用pip裝了virtualenv,建立了一個virtualenv,在這個virtualenv里面,裝了Django,創建了一個Django項目,在這個Django項目里面創建了一個叫做web的阿皮皮。

接上回~

第二部分,編寫爬蟲。

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

bashapt-get install vim # 接上回,我們在screen里面是root身份哦~

當然了,現在我要想一個采集的目標,為了方便,我就選擇segmentfault吧,這網站寫博客不錯,就是在海外上傳圖片有點慢。

這個爬蟲,就像我訪問一樣,要分步驟來。 我先看到segmentfault首頁,然后發現里面有很多tags,每個tags下面,才是一個一個的問題的內容。

所以,爬蟲也要分為這幾個步驟來寫。 但是我要反著寫,先寫內容爬蟲,再寫分類爬蟲, 因為我想。

2.1 編寫內容爬蟲

首先,給爬蟲建立個目錄,在項目里面和app同級,然后把這個目錄變成一個python的package

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

以后,這個目錄就叫爬蟲包了

在爬蟲包里面建立一個spider.py用來裝我的爬蟲們

bashvim ~/python_spider/sfspider/spider.py

一個基本的爬蟲,只需要下面幾行代碼:

(代碼下面會提供)
然后呢,就可以玩玩我們的“爬蟲”了。
進入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嵌套選擇圖片和上傳圖片接口,實現一鍵上傳圖片,遇到問題

看吧,我現在已經可以通過爬蟲獲取segmentfault的提問標題了。下一步,為了簡化代碼,我把標題,回答等等的屬性都寫為這個蜘蛛的屬性。代碼如下

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


class SegmentfaultQuestionSpider(object):

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

    @property
    def dom(self): # 獲取html內容
        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): # 讓方法可以通過s.title的方式訪問 可以少打對括號
        return self.dom("h1#questionTitle").text() # 關于選擇器可以參考css selector或者jquery selector, 它們在pyquery下幾乎都可以使用

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

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

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

然后,再把玩一下升級后的蜘蛛。

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

OK,現在我的蜘蛛玩起來更方便了。

2.2 編寫分類爬蟲

下面,我要寫一個抓取標簽頁面的問題的爬蟲。
代碼如下, 注意下面的代碼是添加在已有代碼下面的, 和之前的最后一行之間 要有兩個空行

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/") # 相對鏈接變成絕對鏈接 爽
        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): # 看看還有沒有下一頁,這個有必要
        return bool(self.dom("ul.pagination > li.next")) # 看看有木有下一頁

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

現在可以兩個蜘蛛一起把玩了,就不貼出詳細把玩過程了。。。

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

想做小偷站的,看到這里基本上就能搞出來了。 套個模板 加一個簡單的腳本來接受和返回請求就行了。

未完待續。
下一篇,采集入庫!

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/37502.html

相關文章

  • Python爬蟲建站入門手記——從零開始建立采集站點(一:環境搭建)

    摘要:從今天起,我將在這里更新一個系列的簡單爬蟲到建立網站的實踐手記。內容將會從最簡單的開始,環境搭建,基本爬蟲,入庫,用建立可供用戶訪問的網站,網站部署。第一部分,買,裝環境。我們爬蟲站點的所有文件都放在里面。 從今天起,我將在這里更新一個系列的python簡單爬蟲到建立網站的實踐手記。 內容將會從最簡單的開始,環境搭建,基本爬蟲,入庫,用Django建立可供用戶訪問的網站,網站部署。 ...

    HackerShell 評論0 收藏0
  • Python爬蟲建站入門手記——從零開始建立采集站點(三:采集入庫)

    摘要:進入正題第三部分,采集入庫。內容如下加上這個可以記住問題在的位置,方便以后更新或者其他操作都很直白,關于各個可以看看的文檔。代碼如下添加方法采集當前分頁正在抓取分頁這個地方寫得很笨,之前該在加上這個屬性。 上回,我已經大概把爬蟲寫出來了。 我寫了一個內容爬蟲,一個爬取tag里面內容鏈接的爬蟲 其實還差一個,就是收集一共有哪些tag的爬蟲。但是這里先不說這個問題,因為我上次忘了 這次又不...

    amuqiao 評論0 收藏0
  • [時隔20個月來填坑]Python爬蟲建站入門手記

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

    Lavender 評論0 收藏0
  • Python

    摘要:最近看前端都展開了幾場而我大知乎最熱語言還沒有相關。有關書籍的介紹,大部分截取自是官方介紹。但從開始,標準庫為我們提供了模塊,它提供了和兩個類,實現了對和的進一步抽象,對編寫線程池進程池提供了直接的支持。 《流暢的python》閱讀筆記 《流暢的python》是一本適合python進階的書, 里面介紹的基本都是高級的python用法. 對于初學python的人來說, 基礎大概也就夠用了...

    dailybird 評論0 收藏0
  • scrapy-redis分布式爬蟲框架詳解

    摘要:分布式爬蟲框架詳解隨著互聯網技術的發展與應用的普及,網絡作為信息的載體,已經成為社會大眾參與社會生活的一種重要信息渠道。下載器中間件位于引擎和下載器之間的框架,主要是處理引擎與下載器之間的請求及響應。 scrapy-redis分布式爬蟲框架詳解 隨著互聯網技術的發展與應用的普及,網絡作為信息的載體,已經成為社會大眾參與社會生活的一種重要信息渠道。由于互聯網是開放的,每個人都可以在網絡上...

    myeveryheart 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<