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

資訊專欄INFORMATION COLUMN

Python微型異步爬蟲框架

z2xy / 2003人閱讀

摘要:微型異步爬蟲框架基于的異步框架,搭建一個(gè)模塊化的微型異步爬蟲。可以對(duì)該爬蟲的布隆過(guò)濾器進(jìn)行配置,安裝中間件等。回調(diào)函數(shù)整個(gè)項(xiàng)目的主要實(shí)現(xiàn)在于回調(diào)函數(shù)的使用,利用異步請(qǐng)求得到響應(yīng)后馬上調(diào)用其請(qǐng)求綁定的回調(diào)函數(shù)來(lái)實(shí)現(xiàn)爬蟲的異步爬取。

Amipy

Python微型異步爬蟲框架(A micro asynchronous Python website crawler framework)

基于Python 3.5 + 的異步async-await 框架,搭建一個(gè)模塊化的微型異步爬蟲。可以根據(jù)需求控制異步隊(duì)列的長(zhǎng)度和延遲時(shí)間等。配置了可以去重的布隆過(guò)濾器,網(wǎng)頁(yè)內(nèi)容正文過(guò)濾等,完全自主配置使用。

GitHub地址:源碼

適用環(huán)境

windows 7 +

Python 3.5 +

安裝

直接使用pip安裝即可:

pip install amipy
基礎(chǔ)命令

1.查看當(dāng)前路徑下的可用命令,在DOS命令行下輸入:

>amipy

會(huì)出現(xiàn)命令幫助界面。

2.創(chuàng)建一個(gè)新的項(xiàng)目,在DOS命令行下輸入:

>amipy cproject myproject

會(huì)在當(dāng)前路徑下創(chuàng)建一個(gè)Amipy爬蟲項(xiàng)目myproject。如果想要?jiǎng)?chuàng)建在指定目錄下,可以加上附加參數(shù),-d,如:

> amipy cproject myproject -d  D:somefolder

項(xiàng)目myproject便會(huì)在路徑D:somefolder下創(chuàng)建。
項(xiàng)目的目錄結(jié)構(gòu)應(yīng)該如下:

--myproject
    |-spiders
    |   |-__init__.py
    |-__init__.py
    |-settings.py

其中:

settings.py 為整個(gè)項(xiàng)目的配置文件,可以為整個(gè)項(xiàng)目下的爬蟲安裝共有的中間件,控制整個(gè)項(xiàng)目的請(qǐng)求并發(fā)數(shù),設(shè)置日志級(jí)別、文件路徑等。

3.進(jìn)入項(xiàng)目路徑,創(chuàng)建一個(gè)新的爬蟲,在DOS命令行下輸入:

>amipy cspider myspider

此時(shí)在項(xiàng)目myproject目錄下的spiders文件夾中會(huì)創(chuàng)建一個(gè)爬蟲目錄myspider,此時(shí)的項(xiàng)目結(jié)構(gòu)為:

--myproject
    |-spiders
    |   |-__init__.py
    |   |-myspider
    |   |    |-__init__.py
    |   |    |-cookies.info
    |   |    |-item.py
    |   |    |-settings.py
    |   |    |-site_record.info
    |   |    |-spider.py
    |   |    |-url_record.info
    |-__init__.py
    |-settings.py
    |-log.log

其中:

位于myspider文件夾下的settings.py為爬蟲myspider的配置文件,該配置只對(duì)當(dāng)前爬蟲有效。可以對(duì)該爬蟲的布隆過(guò)濾器進(jìn)行配置,安裝中間件等。

cookies.info 為爬蟲的請(qǐng)求cookie保存文件,該爬蟲爬過(guò)的所有網(wǎng)站的cookie會(huì)保存進(jìn)該文件。可以通過(guò)爬蟲配置文件settings.py進(jìn)行路徑加載和保存。

site_record.info 為爬蟲爬取過(guò)的網(wǎng)站的布隆過(guò)濾器記錄文件,方便下次爬取的時(shí)候加載,會(huì)把爬取過(guò)的網(wǎng)站自動(dòng)去掉。防止重復(fù)爬取。

url_record.info 為該爬蟲發(fā)出的請(qǐng)求url+headers+method+數(shù)據(jù)的去重后集合,爬蟲結(jié)束運(yùn)行時(shí),如果配置保存去重url集合。下次爬取時(shí)加載該文件可以自動(dòng)過(guò)濾爬取過(guò)的所有url+headers+method+數(shù)據(jù)。

item.py 為ORM的MongoDB數(shù)據(jù)集合對(duì)象,對(duì)應(yīng)的類屬性可以映射到數(shù)據(jù)庫(kù)集合中的字段,類名為數(shù)據(jù)表名。

spider.py 為當(dāng)前爬蟲的主要文件,自己編寫爬取邏輯,提取規(guī)則和數(shù)據(jù)保存腳本等。

4.運(yùn)行項(xiàng)目下的所有爬蟲,進(jìn)入項(xiàng)目路徑,在DOS命令行下輸入:

>amipy runproject

則該項(xiàng)目下的所有爬蟲會(huì)開始運(yùn)行,如果不想運(yùn)行某個(gè)爬蟲,只需要加上參數(shù) -e,如:

>amipy runproject -e No1spider No2spider

則名為“No1spider”、“No2spider”的爬蟲均不會(huì)運(yùn)行。

5.運(yùn)行指定的爬蟲,進(jìn)入項(xiàng)目路徑,在DOS命令行下輸入:

>amipy runspider myspider01 

則名為“myspider01”的爬蟲便會(huì)被啟動(dòng)。可以加上多個(gè)爬蟲名稱,用空格隔開即可。

6.列出當(dāng)前項(xiàng)目下的所有爬蟲信息。在DOS命令行下輸入:

>amipy list

便會(huì)將當(dāng)前項(xiàng)目下的所有爬蟲信息列出。

使用 Amipy爬蟲編寫流程

編寫自己的爬蟲。【假設(shè)你已經(jīng)安裝前面"基礎(chǔ)命令"創(chuàng)建了一個(gè)項(xiàng)目,并且創(chuàng)建了一個(gè)爬蟲名為myspider】只需要進(jìn)入myspider文件夾,按照需求修改當(dāng)前爬蟲的配置settings.py 以及數(shù)據(jù)存儲(chǔ)需要用到的表模型item.py編寫,編輯文件spider.py,加入爬取規(guī)則邏輯等。

Url類對(duì)象

Url類對(duì)象是一個(gè)規(guī)則匹配類,它提供了許多種模式的url規(guī)則匹配。
比如:

from amipy import Url
# 表示匹配到正則模式"http://www.170mv.com/song.*"的所有鏈接
Url(re="http://www.170mv.com/song.*")
# 表示匹配到正則模式"http://www.170mv.com/song.*"的所有鏈接其回調(diào)函數(shù)為"getmp3"
Url(re="http://www.170mv.com/song/.*",callback="getmp3")
# 表示匹配到地址為http協(xié)議,且路徑為‘/novel/chapter1’,參數(shù)number=2的所有鏈接
Url(scheme="http",path="/novel/chapter1",params="number=2")
# 表示匹配到域名為www.baidu.com的所有鏈接,為該鏈接請(qǐng)求設(shè)置代理為"127.0.0.1:1080"
Url(domain="www.baidu.com",proxy="127.0.0.1:1080")
# 表示匹配到域名為www.baidu.com的所有鏈接,直接扔掉這些鏈接。
Url(domain="www.baidu.com",drop=True)

Url類應(yīng)用的還在于黑白名單屬性中,如在爬蟲類中的屬性:

whitelist = [
        Url(re="http://www.170mv.com/song.*"),
        Url(re="http.*.sycdn.kuwo.cn.*"),]
blacklist = [
        Url(re="http://www.170mv.com/song.*"),
        Url(re="http.*.sycdn.kuwo.cn.*"),]      

表示爬蟲請(qǐng)求的url黑白名單匹配規(guī)則。

必要屬性

打開spider.py ,可以看到有兩個(gè)默認(rèn)的必要屬性:

name 爬蟲的唯一標(biāo)識(shí),項(xiàng)目下不能有該屬性重名的爬蟲。

urls 起始鏈接種子,爬蟲開始的url列表

這兩個(gè)屬性是必須的。

回調(diào)函數(shù)

整個(gè)項(xiàng)目的主要實(shí)現(xiàn)在于回調(diào)函數(shù)的使用,利用異步請(qǐng)求得到響應(yīng)后馬上調(diào)用其請(qǐng)求綁定的回調(diào)函數(shù)來(lái)實(shí)現(xiàn)爬蟲的異步爬取。
請(qǐng)求后響應(yīng)的回調(diào)函數(shù)(類方法)有:

parse 返回狀態(tài)200,請(qǐng)求正常響應(yīng)正常,可以編寫正常的規(guī)則提取、數(shù)據(jù)保存等。

error 狀態(tài)碼非200,出現(xiàn)異常狀態(tài)碼,編寫錯(cuò)誤處理邏輯等。

exception 請(qǐng)求出現(xiàn)異常,異常自定義處理。

數(shù)據(jù)存儲(chǔ)

Amipy目前只支持MongoDB數(shù)據(jù)庫(kù),默認(rèn)的數(shù)據(jù)庫(kù)設(shè)置在爬蟲配置文件settings.py中。
對(duì)于爬取的數(shù)據(jù)進(jìn)行保存,默認(rèn)只使用MongoDB進(jìn)行數(shù)據(jù)存儲(chǔ)(后續(xù)可以自己擴(kuò)展編寫ORM)。只需要打開item.py,修改其中的示例類,原先為:

from amipy.BaseClass.orm import Model,Field
class DataItemName(Model):
    ...

修改其內(nèi)容為:

from amipy.BaseClass.orm import Model,Field
class MyTableName(Model):
    ID = Field("索引")
    content = Field("內(nèi)容")

則類名 MyTableName為保存在指定數(shù)據(jù)庫(kù)中的數(shù)據(jù)集合名稱,ID為列對(duì)象,名稱為“索引”,以此類推,content也為列對(duì)象,名稱為“內(nèi)容”。
可以按照自己的需求進(jìn)行添加刪減列。

數(shù)據(jù)的保存只需要在回調(diào)函數(shù)中對(duì)對(duì)應(yīng)的列對(duì)象進(jìn)行賦值,而后調(diào)用ORM對(duì)象的save函數(shù)即可。比如在spider.py的爬蟲類中的成功回調(diào)函數(shù)parse中保存爬取到的數(shù)據(jù):

    ...
    def parse(self,response):
        self.item.ID = 200
        self.item.content = "這是內(nèi)容"
        self.item.save()
        ...

則 數(shù)據(jù)集合 MyTableName中會(huì)自動(dòng)保存一行數(shù)據(jù):列“索引”為200,列“內(nèi)容”為“這是內(nèi)容”的數(shù)據(jù)行。引用orm數(shù)據(jù)模型對(duì)象只需要調(diào)用爬蟲類的item屬性,如上面示例中的self.item即是。
獲取其數(shù)據(jù)庫(kù)對(duì)象可以使用:self.item.db來(lái)獲得當(dāng)前爬蟲連接的MongoDB數(shù)據(jù)庫(kù)對(duì)象。
可以通過(guò)

self.item.db.save()
self.item.db.delete()
self.item.db.update()
...

等api來(lái)實(shí)現(xiàn)數(shù)據(jù)庫(kù)操作。

事件循環(huán)loop

Amipy爬蟲的異步請(qǐng)求基于python3的協(xié)程async框架,所以項(xiàng)目全程只有一個(gè)事件循環(huán)運(yùn)行,如果需要添加更多的爬蟲請(qǐng)求,可以通過(guò)回調(diào)函數(shù)傳進(jìn)事件循環(huán),加入請(qǐng)求隊(duì)列。
具體做法便是通過(guò)在爬蟲類的回調(diào)函數(shù)中使用send函數(shù)來(lái)傳遞請(qǐng)求Request對(duì)象:

import amipy
from amipy import Request,send

class MySpider(amipy.Spider):
    ...
    
    def parse(self,response):
        ...
        # 加入新的爬蟲請(qǐng)求
        url = "http://www.170mv.com/download/"
        send(Request(self,url))
        ...

可以在項(xiàng)目配置文件settings.py中設(shè)置整個(gè)項(xiàng)目最大的協(xié)程并發(fā)數(shù)CONCURRENCY,以及協(xié)程請(qǐng)求的延時(shí)等。

Telnet連接

Amipy爬蟲內(nèi)置一個(gè)服務(wù)線程,可以通過(guò)Telnet進(jìn)行連接來(lái)查看操作當(dāng)前項(xiàng)目的爬蟲,在啟動(dòng)爬蟲后,可以通過(guò)新開一個(gè)DOS命令窗口,
輸入:

>telnet 127.0.0.1 2232

進(jìn)行Telnet連接至項(xiàng)目服務(wù)線程,可以使用的命令有:

   show spiders         show all running spiders and their conditions.
   list                 list a general situation of all spiders.
   echo                 echo a running spider and its attributes.
   pause                pause a running spider by a give name.
   stop                 stop a running/paused spider by a give name.
   close                close a spider by a give name.
   restart              restart a stopped spider by a give name.
   resume               resume a paused spider by a give name.
   quit                 quit the Spider-Client.
   help                 show all the available commands usage.

舉例,假設(shè)當(dāng)前爬蟲唯一標(biāo)識(shí)名稱為lianjia,則可以通過(guò):

$amipy> pause lianjia

來(lái)暫停爬蟲lianjia的爬取進(jìn)度,在爬蟲將當(dāng)前請(qǐng)求隊(duì)列清空后會(huì)一直暫停,直到收到Telnet端發(fā)出的其他命令。恢復(fù)爬蟲使用:

$amipy> resume lianjia

查看當(dāng)前項(xiàng)目下所有爬蟲:

$amipy> list

詳細(xì)查看則使用:

$amipy> show spiders

開啟關(guān)閉Telnet在項(xiàng)目的配置文件settings.py中設(shè)置SPIDER_SERVER_ENABLE。

爬取去重

Amipy的爬取去重可以分為兩種:

url去重

網(wǎng)頁(yè)內(nèi)容正文去重

兩者皆使用了布隆過(guò)濾器去重,對(duì)于url去重,則是使用url+method+params+data的方式生成摘要進(jìn)行布隆過(guò)濾器去重。
對(duì)于網(wǎng)頁(yè)正文去重則是按照配置文件指定的正文檢測(cè)參數(shù)來(lái)檢測(cè)每個(gè)網(wǎng)頁(yè)的正文內(nèi)容生成摘要存進(jìn)布隆過(guò)濾器,可以在爬蟲的配置文件
settings.py中對(duì)以下幾項(xiàng)進(jìn)行配置來(lái)檢測(cè)網(wǎng)頁(yè)內(nèi)容正文:

# 網(wǎng)頁(yè)內(nèi)容剔除掉哪些標(biāo)簽后再識(shí)別正文
BLOOMFILTER_HTML_EXTRACTS = ["script","style","head"]
# 允許一個(gè)正文內(nèi)容塊中至多空行數(shù)
BLOOMFILTER_HTML_GAP = 3
# 連續(xù)多少行有正文則認(rèn)為是一個(gè)正文塊
BLOOMFILTER_HTML_THRESHOLD = 5
# 每一行正文的字密度
BLOOMFILTER_HTML_DENSITY =45

上面兩種是默認(rèn)的去重方式,還可以指定請(qǐng)求返回的網(wǎng)頁(yè)內(nèi)容的某一部分作為響應(yīng)指紋來(lái)進(jìn)行針對(duì)性的去重。
如果想要自己指定哪個(gè)響應(yīng)內(nèi)容部分作為去重的指紋,可以在將請(qǐng)求Request送進(jìn)協(xié)程隊(duì)列時(shí)指定指紋函數(shù),如:

    ...
    def parse(self,response):
        ...
        send(Request(self,url,fingerprint=self.fingerprint))
        ...
    
    def fingerprint(self,response):
        ...
        # 返回需要作為指紋的文本字符等
        return something
例子 1. 使用Amipy創(chuàng)建鏈家網(wǎng)爬蟲(LianJiaSpider)
爬蟲目的:爬取鏈家網(wǎng)上北京當(dāng)前最新的租房信息,包含“價(jià)格”,“房屋基本信息”、“配套設(shè)施”、“房源描述”、“聯(lián)系經(jīng)紀(jì)人”、“地址和交通”存入MongoDB數(shù)據(jù)庫(kù)中

創(chuàng)建項(xiàng)目

進(jìn)入到D:LianJia路徑,創(chuàng)建Amipy項(xiàng)目LJproject:

D:LianJia> amipy cproject LJproject

創(chuàng)建爬蟲

進(jìn)入到項(xiàng)目路徑D:LianJiaLJproject,創(chuàng)建Amipy爬蟲lianjia:

D:LianJiaLJproject> amipy cspider lianjia

編寫數(shù)據(jù)庫(kù)模型

打開D:LianJiaLJprojectspidersLianjiaitem.py,編寫數(shù)據(jù)保存模型:

#coding:utf-8

from amipy.BaseClass.orm import Model,Field

class LianJiaRenting(Model):
    price = Field("價(jià)格")
    infos = Field("房屋基本信息")
    facility = Field("配套設(shè)施")
    desc = Field("房源描述")
    agent = Field("聯(lián)系經(jīng)紀(jì)人")
    addr = Field("地址與交通")

設(shè)置數(shù)據(jù)庫(kù)連接

打開 D:LianJiaLJprojectspidersLianjiasettings.py,找到MongoDB數(shù)據(jù)庫(kù)連接設(shè)置,進(jìn)行設(shè)置:

# MongoDB settings for data saving.
DATABASE_SETTINGS = {
    "host":"127.0.0.1",
    "port":27017,
    "user":"",
    "password":"",
    "database":"LianJiaDB",
}

要先確保系統(tǒng)安裝好MongoDB數(shù)據(jù)庫(kù)并已經(jīng)開啟了服務(wù)。

編寫爬蟲腳本

打開 D:LianJiaLJprojectspidersLianjiaspider.py,編寫爬蟲采集腳本:

import amipy,re
from amipy import send,Request,Url
from bs4 import BeautifulSoup as bs 

class LianjiaSpider(amipy.Spider):

   name = "lianjia"
   # 設(shè)置爬取初始鏈接
   urls = ["https://bj.lianjia.com/zufang/"]
   # 設(shè)置爬蟲白名單,只允許爬取匹配的鏈接
   whitelist = [
       Url(re="https://bj.lianjia.com/zufang/.*"),
   ]
   # 自定義的屬性
   host ="https://bj.lianjia.com"
   page = 1
   
   # 請(qǐng)求成功回調(diào)函數(shù)
   def parse(self,response):
       soup = bs(response.text(),"lxml")
       item_list = soup("div",class_="content__list--item")
       for i in item_list:
       # 獲取詳情頁(yè)鏈接 并發(fā)送至爬蟲請(qǐng)求隊(duì)列
           url = self.host+i.a["href"]
           send(Request(self,url,callback=self.details))
       # 添加下一頁(yè)
       totalpage = soup("div",class_="content__pg")[0]["data-totalpage"]
       if self.page>=int(totalpage):
           return
       self.page +=1
       send(Request(self,self.host+"/zufang/pg{}/".format(self.page)))
       
   def details(self,response):
       infos = {}
       agent = {}
       facility = []
       soup = bs(response.text(),"lxml")
       infos_li = soup("div",class_="content__article__info")[0].ul("li")
       facility_li = soup("ul",class_="content__article__info2")[0]("li")
       agent_ul = soup("ul",id="agentList")[0]
       addr_li = soup("div",id="around")[0].ul.li
       desc_li = soup("div",id="desc")[0].li
       desc_li.div.extract()
       desc = desc_li.p["data-desc"] if desc_li.p else ""
       for i in infos_li:
           text = i.text
           if ":" in text:
               infos.update({text.split(":")[0]:text.split(":")[1]})
       for i in facility_li[1:]:
           if "_no" not in i["class"][-2]:
               facility.append(i.text)
       for div in agent_ul("div",class_="desc"):
           name = div.a.text
           phone = div("div",class_="phone")[0].text
           agent[name]=phone
       # 數(shù)據(jù)模型對(duì)應(yīng)并保存
       self.item.desc = desc
       self.item.addr = re.sub(r"[
 ]","",addr_li.text) if addr_li else ""
       self.item.price = soup("p",class_="content__aside--title")[0].text
       self.item.infos = infos
       self.item.agent = agent
       self.item.facility = facility
       self.item.save()
如果在爬蟲配置文件settings.py中設(shè)置遵守目標(biāo)網(wǎng)站機(jī)器人協(xié)議可能會(huì)被禁止采集,可以自行關(guān)閉設(shè)置。
另外,開啟網(wǎng)頁(yè)內(nèi)容相似過(guò)濾BLOOMFILTER_HTML_ON可能會(huì)使爬取的結(jié)果數(shù)較少,爬蟲只會(huì)采集相似度不同的網(wǎng)頁(yè)內(nèi)容的鏈接,
如果需要大批量采集,而網(wǎng)頁(yè)正文較少的,可以關(guān)閉這個(gè)設(shè)置。

代碼比較粗糙,但可以知道Amipy爬蟲基本的實(shí)現(xiàn)流程。

運(yùn)行爬蟲

在項(xiàng)目根路徑下,輸入:

D:LianJiaLJproject> amipy runspider

查看數(shù)據(jù)庫(kù)

進(jìn)入MongoDB數(shù)據(jù)庫(kù):可以看到在數(shù)據(jù)庫(kù)‘LianJiaDB’下的集合“LianJiaRenting”中已經(jīng)保存有我們爬取的數(shù)據(jù),格式如下:

{
    "_id" : ObjectId("5c6541b065b2fd1cf002c565"),
    "價(jià)格" : "7500元/月 (季付價(jià))",
    "房屋基本信息" : {
        "發(fā)布" : "20天前",
        "入住" : "隨時(shí)入住",
        "租期" : "2~3年",
        "看房" : "暫無(wú)數(shù)據(jù)",
        "樓層" : "中樓層/6層",
        "電梯" : "無(wú)",
        "車位" : "暫無(wú)數(shù)據(jù)",
        "用水" : "民水",
        "用電" : "民電",
        "燃?xì)? : "有",
        "采暖" : "集中供暖"
    },
    "配套設(shè)施" : [ 
        "電視", 
        "冰箱", 
        "洗衣機(jī)", 
        "空調(diào)", 
        "熱水器", 
        "床", 
        "暖氣", 
        "寬帶", 
        "衣柜", 
        "天然氣"
    ],
    "房源描述" : "【交通出行】 小區(qū)門口為八里莊南里公交車站,75,675等多路公交經(jīng)過(guò)。地鐵6號(hào)線十里堡站D口,距離地鐵口400米,交通十分方便,便于出行。
【周邊配套】 此房位置棒棒噠,有建設(shè)銀行,中國(guó)銀行,交通銀行,郵政儲(chǔ)蓄,果多美水果超市,購(gòu)物,金旭菜市場(chǎng),娛樂,休閑,便利。旁邊首航超市,姥姥家春餅,味多美蛋糕店,生活方便。
【小區(qū)介紹】 該小區(qū)中此樓是1981建成,安全舒適,小區(qū)內(nèi)主力樓盤為6層板樓,前后無(wú)遮擋,此樓是多見的板樓,樓層高視野好。
", "聯(lián)系經(jīng)紀(jì)人" : { "宋玉恒" : "4000124028轉(zhuǎn)7907" }, "地址與交通" : "距離6號(hào)線-十里堡192m" }

查看當(dāng)前爬取進(jìn)度

新開一個(gè)DOS端口,輸入:

> telnet 127.0.0.1 2232

進(jìn)行Telnet連接,可以使用命令操作查看當(dāng)前爬蟲的爬取狀態(tài)。例如使用echo命令:

$amipy> echo lianjia

可以查看當(dāng)前爬蟲的狀態(tài):

----------------Spider-lianjia-------------------
- Name:lianjia  Status:RUNNING
- Class:LianjiaSpider
- Success:25    Fail:0     Exception:0
- Priority:0
- SeedUrls:["https://bj.lianjia.com/zufang/"]
- Path:D:LianJiaLJprojectspidersLianjia
- Session:
- StartAt:Thu Feb 14 20:30:21 2019
- PausedAt:None
- ResumeAt:None
- StopAt:None
- RestartAt:None
- CloseAt:None
--------------------------------------------------

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

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

相關(guān)文章

  • 獻(xiàn)給正在學(xué)習(xí)python的你,10個(gè)最受歡迎的Python開源框架

    摘要:輕量級(jí)框架是一個(gè)輕量級(jí)框架,包含多維數(shù)據(jù)分析和瀏覽聚合數(shù)據(jù)等工具。創(chuàng)造矢量地圖的輕量級(jí)框架是一個(gè)庫(kù),用來(lái)為生成地圖。異步非阻塞的框架的全稱是,傳說(shuō)中性能高高的框架。 如果你正在學(xué)習(xí)python,那么這10個(gè)開源框架,你可千萬(wàn)別錯(cuò)過(guò),這些框架包括事件I/O,OLAP,Web開發(fā),高性能網(wǎng)絡(luò)通信,測(cè)試,爬蟲等。雖說(shuō)不上是全都有,但也足夠滿足你了。 1.Django: Python Web應(yīng)...

    Paul_King 評(píng)論0 收藏0
  • Python數(shù)據(jù)模型構(gòu)建和遷移方案:SQLAlchemy&Alembic

    摘要:當(dāng)使用到后者這類微型框架時(shí),根據(jù)業(yè)務(wù)場(chǎng)景不同,如果需要處理模型的建立升級(jí)和遷移的問題,可以考慮下接下來(lái)要介紹的和。這時(shí)候檢查數(shù)據(jù)庫(kù),可以發(fā)現(xiàn)生成了張表,升級(jí)工作就完成了。而我在使用的實(shí)際項(xiàng)目中是操作的原生,異步類型的配合使用留待以后探究。 背景 Python的世界里有許多web框架:比如大而全的 Django, 提供了模型定義遷移,到路由處理,再到視圖的渲染等整套功能;比如小巧靈活的F...

    李增田 評(píng)論0 收藏0
  • 基于 asyncio 的Python異步爬蟲框架

    摘要:輕量異步爬蟲框架,基于,目的是讓編寫單頁(yè)面爬蟲更方便更迅速,利用異步特性讓爬蟲更快減少在上的耗時(shí)介紹對(duì)于單頁(yè)面,只要實(shí)現(xiàn)框架定義的就可以實(shí)現(xiàn)對(duì)目標(biāo)數(shù)據(jù)的抓取對(duì)于頁(yè)面目標(biāo)較多,需要進(jìn)行深度抓取時(shí),就派上用場(chǎng)了支持的加載類也可以很好的 aspider A web scraping micro-framework based on asyncio. 輕量異步爬蟲框架aspider,基于asy...

    Vultr 評(píng)論0 收藏0
  • 爬蟲 - 收藏集 - 掘金

    摘要:在這之前,還是有必要對(duì)一些概念超輕量級(jí)反爬蟲方案后端掘金前言爬蟲和反爬蟲日益成為每家公司的標(biāo)配系統(tǒng)。 爬蟲修煉之道——從網(wǎng)頁(yè)中提取結(jié)構(gòu)化數(shù)據(jù)并保存(以爬取糗百文本板塊所有糗事為例) - 后端 - 掘金歡迎大家關(guān)注我的專題:爬蟲修煉之道 上篇 爬蟲修煉之道——編寫一個(gè)爬取多頁(yè)面的網(wǎng)絡(luò)爬蟲主要講解了如何使用python編寫一個(gè)可以下載多頁(yè)面的爬蟲,如何將相對(duì)URL轉(zhuǎn)為絕對(duì)URL,如何限速,...

    1fe1se 評(píng)論0 收藏0

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

0條評(píng)論

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