From bc001eea791899a44aa8a6c6a893eb5b193781fe Mon Sep 17 00:00:00 2001 From: Marvin Zhang Date: Thu, 30 May 2019 11:47:17 +0800 Subject: [PATCH 01/13] updated ConfigList --- frontend/src/components/Config/ConfigList.vue | 25 ++++++++++++++++--- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/frontend/src/components/Config/ConfigList.vue b/frontend/src/components/Config/ConfigList.vue index 1b0e9d58..f147cdc0 100644 --- a/frontend/src/components/Config/ConfigList.vue +++ b/frontend/src/components/Config/ConfigList.vue @@ -9,11 +9,15 @@ :header-cell-style="{background:'rgb(48, 65, 86)',color:'white'}" border> + @@ -236,6 +240,19 @@ export default { this.extractFieldsLoading = false }) }) + }, + renderHeader (h, { column }) { + return h( + 'el-input', + { + 'v-model': 'column.label', + on: { + change: () => { + } + } + }, + column.label + ) } }, created () { @@ -244,7 +261,7 @@ export default { this.spiderForm.fields = [] for (let i = 0; i < 3; i++) { this.spiderForm.fields.push({ - name: `field_${i + 1}`, + name: 'field_' + (i + 1), type: 'css', extract_type: 'text' }) @@ -256,7 +273,7 @@ export default { this.spiderForm.detail_fields = [] for (let i = 0; i < 3; i++) { this.spiderForm.detail_fields.push({ - name: `field_${i + 1}`, + name: 'field_' + (i + 1), type: 'css', extract_type: 'text' }) From 7db25ee47f1d0c50f64d7b5c2a91115adfec0377 Mon Sep 17 00:00:00 2001 From: Marvin Zhang Date: Sat, 1 Jun 2019 21:38:56 +0800 Subject: [PATCH 02/13] change default FLASK_HOST to 0.0.0.0 --- crawlab/config/config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crawlab/config/config.py b/crawlab/config/config.py index 4f0a85db..e235d400 100644 --- a/crawlab/config/config.py +++ b/crawlab/config/config.py @@ -51,5 +51,5 @@ MONGO_DB = 'crawlab_test' # Flask 变量 DEBUG = False -FLASK_HOST = '127.0.0.1' +FLASK_HOST = '0.0.0.0' FLASK_PORT = 8000 From 17b33299533e14c6da24e6f3b80df9c18ee60177 Mon Sep 17 00:00:00 2001 From: Marvin Zhang Date: Mon, 3 Jun 2019 12:55:46 +0800 Subject: [PATCH 03/13] updated settings --- crawlab/spiders/spiders/settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crawlab/spiders/spiders/settings.py b/crawlab/spiders/spiders/settings.py index d78d9281..83685fec 100644 --- a/crawlab/spiders/spiders/settings.py +++ b/crawlab/spiders/spiders/settings.py @@ -19,7 +19,7 @@ NEWSPIDER_MODULE = 'spiders.spiders' # USER_AGENT = 'spiders (+http://www.yourdomain.com)' # Obey robots.txt rules -ROBOTSTXT_OBEY = spider.get('obey_robots_txt') or True +ROBOTSTXT_OBEY = spider.get('obey_robots_txt') if spider.get('obey_robots_txt') is not None else True # Configure maximum concurrent requests performed by Scrapy (default: 16) # CONCURRENT_REQUESTS = 32 From 5dc38372e7071878dbab04c3255caebc300174b0 Mon Sep 17 00:00:00 2001 From: Marvin Zhang Date: Tue, 4 Jun 2019 07:55:51 +0800 Subject: [PATCH 04/13] updated auto field extraction --- crawlab/routes/spiders.py | 73 +++++++++++++++++++++--- frontend/src/api/request.js | 2 - frontend/src/i18n/zh.js | 2 + frontend/src/views/spider/SpiderList.vue | 19 ++++-- 4 files changed, 81 insertions(+), 15 deletions(-) diff --git a/crawlab/routes/spiders.py b/crawlab/routes/spiders.py index 0bfe8e4c..0f1772e9 100644 --- a/crawlab/routes/spiders.py +++ b/crawlab/routes/spiders.py @@ -371,7 +371,6 @@ class SpiderApi(BaseApi): # make source / destination src = os.path.join(dir_path, os.listdir(dir_path)[0]) - # src = dir_path dst = os.path.join(PROJECT_DEPLOY_FILE_FOLDER, str(spider.get('_id'))) # logging info @@ -511,11 +510,15 @@ class SpiderApi(BaseApi): return sel + @staticmethod + def _get_children(sel): + return [tag for tag in sel.getchildren() if type(tag) != etree._Comment] + @staticmethod def _get_text_child_tags(sel): tags = [] for tag in sel.iter(): - if tag.text is not None and tag.text.strip() != '': + if type(tag) != etree._Comment and tag.text is not None and tag.text.strip() != '': tags.append(tag) return tags @@ -530,6 +533,19 @@ class SpiderApi(BaseApi): return tags + @staticmethod + def _get_next_page_tag(sel): + next_page_text_list = [ + '下一页', + '下页', + 'next page', + 'next', + ] + for tag in sel.iter(): + if tag.text is not None and tag.text.lower().strip() in next_page_text_list: + return tag + return None + def preview_crawl(self, id: str): spider = db_manager.get(col_name='spiders', id=id) @@ -601,7 +617,7 @@ class SpiderApi(BaseApi): # iterate all child nodes in a top-down direction for tag in sel.iter(): # get child tags - child_tags = tag.getchildren() + child_tags = [t for t in tag.getchildren() if type(t) != etree._Comment] if len(child_tags) < threshold: # if number of child tags is below threshold, skip @@ -622,7 +638,7 @@ class SpiderApi(BaseApi): max_tag = None max_num = 0 for tag in list_tag_list: - _child_text_tags = self._get_text_child_tags(tag[0]) + _child_text_tags = self._get_text_child_tags(self._get_children(tag)[0]) if len(_child_text_tags) > max_num: max_tag = tag max_num = len(_child_text_tags) @@ -630,16 +646,24 @@ class SpiderApi(BaseApi): # get list item selector item_selector = None if max_tag.get('id') is not None: - item_selector = f'#{max_tag.get("id")} > {max_tag.getchildren()[0].tag}' + item_selector = f'#{max_tag.get("id")} > {self._get_children(max_tag)[0].tag}' elif max_tag.get('class') is not None: if len(sel.cssselect(f'.{max_tag.get("class")}')) == 1: - item_selector = f'.{max_tag.get("class")} > {max_tag.getchildren()[0].tag}' + item_selector = f'.{max_tag.get("class")} > {self._get_children(max_tag)[0].tag}' # get list fields fields = [] if item_selector is not None: - for i, tag in enumerate(self._get_text_child_tags(max_tag[0])): - if tag.get('class') is not None: + first_tag = self._get_children(max_tag)[0] + for i, tag in enumerate(self._get_text_child_tags(first_tag)): + if len(first_tag.cssselect(f'{tag.tag}')) == 1: + fields.append({ + 'name': f'field{i + 1}', + 'type': 'css', + 'extract_type': 'text', + 'query': f'{tag.tag}', + }) + elif tag.get('class') is not None: cls_str = '.'.join([x for x in tag.get("class").split(' ') if x != '']) # print(tag.tag + '.' + cls_str) if len(tag.cssselect(f'{tag.tag}.{cls_str}')) == 1: @@ -650,7 +674,7 @@ class SpiderApi(BaseApi): 'query': f'{tag.tag}.{cls_str}', }) - for i, tag in enumerate(self._get_a_child_tags(max_tag[0])): + for i, tag in enumerate(self._get_a_child_tags(self._get_children(max_tag)[0])): # if the tag is , extract its href if tag.get('class') is not None: cls_str = '.'.join([x for x in tag.get("class").split(' ') if x != '']) @@ -662,9 +686,19 @@ class SpiderApi(BaseApi): 'query': f'{tag.tag}.{cls_str}', }) + # get pagination tag + pagination_selector = None + pagination_tag = self._get_next_page_tag(sel) + if pagination_tag is not None: + if pagination_tag.get('id') is not None: + pagination_selector = f'#{pagination_tag.get("id")}' + elif pagination_tag.get('class') is not None and len(sel.cssselect(f'.{pagination_tag.get("id")}')) == 1: + pagination_selector = f'.{pagination_tag.get("id")}' + return { 'status': 'ok', 'item_selector': item_selector, + 'pagination_selector': pagination_selector, 'fields': fields } @@ -801,3 +835,24 @@ class SpiderManageApi(Resource): 'status': 'ok', 'message': 'success' } + + def upload(self): + args = self.parser.parse_args() + f = request.files[0] + + if get_file_suffix(f.filename) != 'zip': + return { + 'status': 'ok', + 'error': 'file type mismatch' + }, 400 + + # save zip file on temp folder + file_path = '%s/%s' % (PROJECT_TMP_FOLDER, f.filename) + with open(file_path, 'wb') as fw: + fw.write(f.stream.read()) + + # unzip zip file + dir_path = file_path.replace('.zip', '') + if os.path.exists(dir_path): + shutil.rmtree(dir_path) + unzip_file(file_path, dir_path) diff --git a/frontend/src/api/request.js b/frontend/src/api/request.js index 1bc4d57e..aa165df0 100644 --- a/frontend/src/api/request.js +++ b/frontend/src/api/request.js @@ -1,8 +1,6 @@ import axios from 'axios' let baseUrl = process.env.VUE_APP_BASE_URL ? process.env.VUE_APP_BASE_URL : 'http://localhost:8000/api' -// console.log(process.env) -// const baseUrl = process.env.API_BASE_URL || 'http://localhost:8000/api' const request = (method, path, params, data) => { return new Promise((resolve, reject) => { diff --git a/frontend/src/i18n/zh.js b/frontend/src/i18n/zh.js index 18813c3a..86bdda1a 100644 --- a/frontend/src/i18n/zh.js +++ b/frontend/src/i18n/zh.js @@ -58,6 +58,8 @@ export default { 'Extract Fields': '提取字段', 'Download': '下载', 'Download CSV': '下载CSV', + 'Upload Zip File': '上传Zip文件', + 'Upload': '上传', // 主页 'Total Tasks': '总任务数', diff --git a/frontend/src/views/spider/SpiderList.vue b/frontend/src/views/spider/SpiderList.vue index fd8be0e0..a756d550 100644 --- a/frontend/src/views/spider/SpiderList.vue +++ b/frontend/src/views/spider/SpiderList.vue @@ -81,9 +81,16 @@ width="40%" :visible.sync="addCustomizedDialogVisible" :before-close="onAddCustomizedDialogClose"> -

- {{$t('Please go to the source folder of your spiders, create a sub-folder and add your spider codes into it')}} -

+ + + + {{$t('Upload')}} + + + @@ -213,6 +220,7 @@ import { mapState } from 'vuex' +import ElUploadDrag from 'element-ui/packages/upload/src/upload-dragger' export default { name: 'SpiderList', @@ -244,7 +252,8 @@ export default { ], spiderFormRules: { name: [{ required: true, message: 'Required Field', trigger: 'change' }] - } + }, + fileList: [] } }, computed: { @@ -480,6 +489,8 @@ export default { }) } }) + }, + onUploadSuccess () { } }, created () { From a51183d083bef7707c5e71f0bec8d47a64a7da44 Mon Sep 17 00:00:00 2001 From: Marvin Zhang Date: Tue, 4 Jun 2019 13:09:57 +0800 Subject: [PATCH 05/13] updated ConfigList: allow edit field name on preview --- crawlab/flower.py | 12 ++-- frontend/src/components/Config/ConfigList.vue | 55 ++++++++++++------- frontend/src/i18n/zh.js | 2 + 3 files changed, 46 insertions(+), 23 deletions(-) diff --git a/crawlab/flower.py b/crawlab/flower.py index 18f94ef8..818d96f7 100644 --- a/crawlab/flower.py +++ b/crawlab/flower.py @@ -3,14 +3,18 @@ import sys import subprocess # make sure the working directory is in system path -file_dir = os.path.dirname(os.path.realpath(__file__)) -root_path = os.path.abspath(os.path.join(file_dir, '..')) -sys.path.append(root_path) +FILE_DIR = os.path.dirname(os.path.realpath(__file__)) +ROOT_PATH = os.path.abspath(os.path.join(FILE_DIR, '..')) +sys.path.append(ROOT_PATH) + from utils.log import other from config import BROKER_URL if __name__ == '__main__': - p = subprocess.Popen(['celery', 'flower', '-b', BROKER_URL], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + p = subprocess.Popen([sys.executable, '-m', 'celery', 'flower', '-b', BROKER_URL], + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + cwd=ROOT_PATH) for line in iter(p.stdout.readline, 'b'): if line.decode('utf-8') != '': other.info(line.decode('utf-8')) diff --git a/frontend/src/components/Config/ConfigList.vue b/frontend/src/components/Config/ConfigList.vue index 7bef92d5..af833edc 100644 --- a/frontend/src/components/Config/ConfigList.vue +++ b/frontend/src/components/Config/ConfigList.vue @@ -5,17 +5,25 @@ :title="$t('Preview Results')" width="90%" :before-close="onDialogClose"> + + + + + - + @@ -138,7 +146,8 @@ export default { extractFieldsLoading: false, previewLoading: false, saveLoading: false, - dialogVisible: false + dialogVisible: false, + columnsDict: {} } }, computed: { @@ -193,6 +202,9 @@ export default { }, onDialogClose () { this.dialogVisible = false + this.fields.forEach(f => { + f.name = this.columnsDict[f.name] + }) }, onPreview () { this.onSave() @@ -200,6 +212,9 @@ export default { this.previewLoading = true this.$store.dispatch('spider/getPreviewCrawlData') .then(() => { + this.fields.forEach(f => { + this.columnsDict[f.name] = f.name + }) this.dialogVisible = true }) .catch(() => { @@ -245,18 +260,8 @@ export default { this.$st.sendEv('爬虫详情-配置', '提取字段') }) }, - renderHeader (h, { column }) { - return h( - 'el-input', - { - 'v-model': 'column.label', - on: { - change: () => { - } - } - }, - column.label - ) + onDeleteField (index) { + this.fields.splice(index, 1) } }, created () { @@ -285,7 +290,7 @@ export default { } if (!this.spiderForm.crawl_type) this.$set(this.spiderForm, 'crawl_type', 'list') - if (!this.spiderForm.start_url) this.$set(this.spiderForm, 'start_url', 'http://example.com') + // if (!this.spiderForm.start_url) this.$set(this.spiderForm, 'start_url', 'http://example.com') if (!this.spiderForm.item_selector_type) this.$set(this.spiderForm, 'item_selector_type', 'css') if (!this.spiderForm.pagination_selector_type) this.$set(this.spiderForm, 'pagination_selector_type', 'css') if (this.spiderForm.obey_robots_txt === undefined) this.$set(this.spiderForm, 'obey_robots_txt', true) @@ -319,4 +324,16 @@ export default { color: #606266; font-size: 14px; } + + .el-table.table-header >>> td { + padding: 0; + } + + .el-table.table-header >>> .cell { + padding: 0; + } + + .el-table.table-header >>> .el-input .el-input__inner { + border-radius: 0; + } diff --git a/frontend/src/i18n/zh.js b/frontend/src/i18n/zh.js index 86bdda1a..c4b95f78 100644 --- a/frontend/src/i18n/zh.js +++ b/frontend/src/i18n/zh.js @@ -122,6 +122,8 @@ export default { 'Query': '查询', 'Extract Type': '提取类别', 'CSS Selector': 'CSS选择器', + 'CSS': 'CSS', + 'XPath': 'Xpath', 'Crawl Type': '抓取类别', 'List Only': '仅列表', 'Detail Only': '仅详情页', From a3a5916d8f4809d325974d09fbacb80290b941f8 Mon Sep 17 00:00:00 2001 From: Marvin Zhang Date: Tue, 4 Jun 2019 13:40:37 +0800 Subject: [PATCH 06/13] added pagination for SpiderList --- frontend/src/views/spider/SpiderList.vue | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/frontend/src/views/spider/SpiderList.vue b/frontend/src/views/spider/SpiderList.vue index a756d550..afc4d365 100644 --- a/frontend/src/views/spider/SpiderList.vue +++ b/frontend/src/views/spider/SpiderList.vue @@ -220,7 +220,6 @@ import { mapState } from 'vuex' -import ElUploadDrag from 'element-ui/packages/upload/src/upload-dragger' export default { name: 'SpiderList', @@ -270,6 +269,9 @@ export default { } return true }) + .filter((d, index) => { + return (this.pagination.pageSize * (this.pagination.pageNum - 1)) <= index && (index < this.pagination.pageSize * this.pagination.pageNum) + }) // .filter(d => { // if (!this.filter.keyword) return true // for (let i = 0; i < this.columns.length; i++) { @@ -399,7 +401,7 @@ export default { }) }, onView (row) { - this.$router.push(`/spiders/${row._id}`) + this.$router.push('/spiders/' + row._id) this.$st.sendEv('爬虫', '查看') }, onPageChange () { @@ -465,7 +467,7 @@ export default { page_size: 100 }).then(response => { const data = response.data.items.map(d => { - d.value = `${d.name} | ${d.domain}` + d.value = d.name + ' | ' + d.domain return d }) callback(data) From 44a941c72abc2b97ca34c831e780112c5cd4b657 Mon Sep 17 00:00:00 2001 From: Marvin Zhang Date: Tue, 4 Jun 2019 20:26:33 +0800 Subject: [PATCH 07/13] fixed send user stats issue --- frontend/src/main.js | 16 +++++++++------- frontend/src/views/spider/SpiderList.vue | 2 +- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/frontend/src/main.js b/frontend/src/main.js index a3008fae..f71efae5 100644 --- a/frontend/src/main.js +++ b/frontend/src/main.js @@ -33,13 +33,15 @@ Vue.use(ElementUI, { locale }) Vue.config.productionTip = false // 百度统计 -window._hmt = window._hmt || []; -(function () { - let hm = document.createElement('script') - hm.src = 'https://hm.baidu.com/hm.js?c35e3a563a06caee2524902c81975add' - let s = document.getElementsByTagName('script')[0] - s.parentNode.insertBefore(hm, s) -})() +if (localStorage.getItem('useStats') !== '0') { + window._hmt = window._hmt || []; + (function () { + let hm = document.createElement('script') + hm.src = 'https://hm.baidu.com/hm.js?c35e3a563a06caee2524902c81975add' + let s = document.getElementsByTagName('script')[0] + s.parentNode.insertBefore(hm, s) + })() +} // inject request api Vue.prototype.$request = request diff --git a/frontend/src/views/spider/SpiderList.vue b/frontend/src/views/spider/SpiderList.vue index afc4d365..4b9fa610 100644 --- a/frontend/src/views/spider/SpiderList.vue +++ b/frontend/src/views/spider/SpiderList.vue @@ -401,7 +401,7 @@ export default { }) }, onView (row) { - this.$router.push('/spiders/' + row._id) + this.$router.push('/spiders/' + row._id) this.$st.sendEv('爬虫', '查看') }, onPageChange () { From dd08a8b0dc50b06a1b5fa9f7eabfb87fd4bdb7fa Mon Sep 17 00:00:00 2001 From: Marvin Zhang Date: Tue, 4 Jun 2019 20:45:56 +0800 Subject: [PATCH 08/13] added upload functionality --- crawlab/routes/spiders.py | 15 +++++++++++++-- frontend/src/views/spider/SpiderList.vue | 10 +++++++++- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/crawlab/routes/spiders.py b/crawlab/routes/spiders.py index 0f1772e9..de5feb94 100644 --- a/crawlab/routes/spiders.py +++ b/crawlab/routes/spiders.py @@ -837,8 +837,7 @@ class SpiderManageApi(Resource): } def upload(self): - args = self.parser.parse_args() - f = request.files[0] + f = request.files['file'] if get_file_suffix(f.filename) != 'zip': return { @@ -856,3 +855,15 @@ class SpiderManageApi(Resource): if os.path.exists(dir_path): shutil.rmtree(dir_path) unzip_file(file_path, dir_path) + + # copy to source folder + output_path = os.path.join(PROJECT_SOURCE_FILE_FOLDER, f.filename.replace('.zip', '')) + print(output_path) + if os.path.exists(output_path): + shutil.rmtree(output_path) + shutil.copytree(dir_path, output_path) + + return { + 'status': 'ok', + 'message': 'success' + } diff --git a/frontend/src/views/spider/SpiderList.vue b/frontend/src/views/spider/SpiderList.vue index 4b9fa610..0c0cd0c6 100644 --- a/frontend/src/views/spider/SpiderList.vue +++ b/frontend/src/views/spider/SpiderList.vue @@ -87,7 +87,7 @@ :action="$request.baseUrl + '/spiders/manage/upload'" :on-success="onUploadSuccess" :file-list="fileList"> - {{$t('Upload')}} + {{$t('Upload')}} @@ -493,6 +493,14 @@ export default { }) }, onUploadSuccess () { + // clear fileList + this.fileList = [] + + // fetch spider list + this.$store.dispatch('spider/getSpiderList') + + // close popup + this.addCustomizedDialogVisible = false } }, created () { From 86c51be85e90f64953a09abe45657e086b36a88f Mon Sep 17 00:00:00 2001 From: Marvin Zhang Date: Tue, 4 Jun 2019 21:12:08 +0800 Subject: [PATCH 09/13] updated Jenkinsfile --- CHANGELOG.md | 7 ++++++- Jenkinsfile | 3 ++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8c08a065..4a1f36f6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,11 @@ # 0.2.3 (unreleased) ### Features / Enhancement -- **CLI**. Allow user to use command-line interface to execute Crawlab programs. +- **CLI**: Allow user to use command-line interface to execute Crawlab programs. +- **Upload Spider**: Allow user to upload Customized Spider to Crawlab. +- **Edit Fields on Preview**: Allow user to edit fields when previewing data in Configurable Spider. + +### Bugs ### +- **Spiders Pagination** # 0.2.2 (2019-05-30) ### Features / Enhancement diff --git a/Jenkinsfile b/Jenkinsfile index 5ca0b085..45203c6f 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -50,7 +50,8 @@ pipeline { stage('Deploy') { steps { echo 'Deploying....' - sh "${NODE_HOME}/bin/node ${NODE_HOME}/bin/pm2 restart app" + sh "${NODE_HOME}/bin/node ${NODE_HOME}/bin/pm2 delete app" + sh "${NODE_HOME}/bin/node ${NODE_HOME}/bin/pm2 start ${ROOT_DIR}/crawlab/app.py" sh "${NODE_HOME}/bin/node ${NODE_HOME}/bin/pm2 restart run_flower" sh "${NODE_HOME}/bin/node ${NODE_HOME}/bin/pm2 restart run_worker" } From 0363d5636e630e0a0a0bfc8a9f349f2f2240bd35 Mon Sep 17 00:00:00 2001 From: Marvin Zhang Date: Tue, 4 Jun 2019 21:15:54 +0800 Subject: [PATCH 10/13] added upload functionality --- frontend/src/views/spider/SpiderList.vue | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/frontend/src/views/spider/SpiderList.vue b/frontend/src/views/spider/SpiderList.vue index 0c0cd0c6..985a0d7a 100644 --- a/frontend/src/views/spider/SpiderList.vue +++ b/frontend/src/views/spider/SpiderList.vue @@ -497,7 +497,9 @@ export default { this.fileList = [] // fetch spider list - this.$store.dispatch('spider/getSpiderList') + setTimeout(() => { + this.$store.dispatch('spider/getSpiderList') + }, 500) // close popup this.addCustomizedDialogVisible = false From a9c6d65fef4805f9f0f37d7521e8a59d7e2c5be3 Mon Sep 17 00:00:00 2001 From: Marvin Zhang Date: Tue, 4 Jun 2019 21:20:38 +0800 Subject: [PATCH 11/13] updated Jenkinsfile --- Jenkinsfile | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 45203c6f..2e3c7ee6 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -50,10 +50,7 @@ pipeline { stage('Deploy') { steps { echo 'Deploying....' - sh "${NODE_HOME}/bin/node ${NODE_HOME}/bin/pm2 delete app" - sh "${NODE_HOME}/bin/node ${NODE_HOME}/bin/pm2 start ${ROOT_DIR}/crawlab/app.py" - sh "${NODE_HOME}/bin/node ${NODE_HOME}/bin/pm2 restart run_flower" - sh "${NODE_HOME}/bin/node ${NODE_HOME}/bin/pm2 restart run_worker" + sh "${NODE_HOME}/bin/node ${NODE_HOME}/bin/pm2 reload all" } } } From f39c20bbd234e0363e8363d68d5ae642277d9e89 Mon Sep 17 00:00:00 2001 From: Marvin Zhang Date: Tue, 4 Jun 2019 23:43:47 +0800 Subject: [PATCH 12/13] updated auto field extraction --- crawlab/routes/spiders.py | 21 +++- frontend/src/components/Config/ConfigList.vue | 109 +++++++++++------- frontend/src/i18n/zh.js | 1 + frontend/src/store/modules/spider.js | 3 +- 4 files changed, 83 insertions(+), 51 deletions(-) diff --git a/crawlab/routes/spiders.py b/crawlab/routes/spiders.py index de5feb94..91ab8608 100644 --- a/crawlab/routes/spiders.py +++ b/crawlab/routes/spiders.py @@ -103,6 +103,9 @@ class SpiderApi(BaseApi): # whether to obey robots.txt ('obey_robots_txt', bool), + + # item threshold to filter out non-relevant list items + ('item_threshold', int), ) def get(self, id=None, action=None): @@ -508,6 +511,13 @@ class SpiderApi(BaseApi): # get html parse tree sel = etree.HTML(r.content) + # remove unnecessary tags + unnecessary_tags = [ + 'script' + ] + for t in unnecessary_tags: + etree.strip_tags(sel, t) + return sel @staticmethod @@ -613,11 +623,11 @@ class SpiderApi(BaseApi): return sel list_tag_list = [] - threshold = 10 + threshold = spider.get('item_threshold') or 10 # iterate all child nodes in a top-down direction for tag in sel.iter(): # get child tags - child_tags = [t for t in tag.getchildren() if type(t) != etree._Comment] + child_tags = self._get_children(tag) if len(child_tags) < threshold: # if number of child tags is below threshold, skip @@ -634,7 +644,6 @@ class SpiderApi(BaseApi): list_tag_list.append(tag) # find the list tag with the most child text tags - _tag_list = [] max_tag = None max_num = 0 for tag in list_tag_list: @@ -648,8 +657,9 @@ class SpiderApi(BaseApi): if max_tag.get('id') is not None: item_selector = f'#{max_tag.get("id")} > {self._get_children(max_tag)[0].tag}' elif max_tag.get('class') is not None: - if len(sel.cssselect(f'.{max_tag.get("class")}')) == 1: - item_selector = f'.{max_tag.get("class")} > {self._get_children(max_tag)[0].tag}' + cls_str = '.'.join([x for x in max_tag.get("class").split(' ') if x != '']) + if len(sel.cssselect(f'.{cls_str}')) == 1: + item_selector = f'.{cls_str} > {self._get_children(max_tag)[0].tag}' # get list fields fields = [] @@ -665,7 +675,6 @@ class SpiderApi(BaseApi): }) elif tag.get('class') is not None: cls_str = '.'.join([x for x in tag.get("class").split(' ') if x != '']) - # print(tag.tag + '.' + cls_str) if len(tag.cssselect(f'{tag.tag}.{cls_str}')) == 1: fields.append({ 'name': f'field{i + 1}', diff --git a/frontend/src/components/Config/ConfigList.vue b/frontend/src/components/Config/ConfigList.vue index af833edc..0362b72f 100644 --- a/frontend/src/components/Config/ConfigList.vue +++ b/frontend/src/components/Config/ConfigList.vue @@ -25,7 +25,7 @@ min-width="100px"> @@ -34,8 +34,8 @@ - - + + - + @@ -55,10 +55,8 @@ - - - - + + - - + + + + + @@ -207,24 +209,28 @@ export default { }) }, onPreview () { - this.onSave() - .then(() => { - this.previewLoading = true - this.$store.dispatch('spider/getPreviewCrawlData') + this.$refs['form'].validate(res => { + if (res) { + this.onSave() .then(() => { - this.fields.forEach(f => { - this.columnsDict[f.name] = f.name - }) - this.dialogVisible = true + this.previewLoading = true + this.$store.dispatch('spider/getPreviewCrawlData') + .then(() => { + this.fields.forEach(f => { + this.columnsDict[f.name] = f.name + }) + this.dialogVisible = true + }) + .catch(() => { + this.$message.error(this.$t('Something wrong happened')) + }) + .finally(() => { + this.previewLoading = false + }) + this.$st.sendEv('爬虫详情-配置', '预览') }) - .catch(() => { - this.$message.error(this.$t('Something wrong happened')) - }) - .finally(() => { - this.previewLoading = false - }) - this.$st.sendEv('爬虫详情-配置', '预览') - }) + } + }) }, onCrawl () { this.$confirm(this.$t('Are you sure to run this spider?'), this.$t('Notification'), { @@ -240,28 +246,42 @@ export default { }) }, onExtractFields () { - this.onSave() - .then(() => { - this.extractFieldsLoading = true - this.$store.dispatch('spider/extractFields') - .then(response => { - if (response.data.item_selector) { - this.$set(this.spiderForm, 'item_selector', response.data.item_selector) - this.$set(this.spiderForm, 'item_selector_type', 'css') - } + this.$refs['form'].validate(res => { + if (res) { + this.onSave() + .then(() => { + this.extractFieldsLoading = true + this.$store.dispatch('spider/extractFields') + .then(response => { + if (response.data.item_selector) { + this.$set(this.spiderForm, 'item_selector', response.data.item_selector) + this.$set(this.spiderForm, 'item_selector_type', 'css') + } - if (response.data.fields && response.data.fields.length) { - this.spiderForm.fields = response.data.fields - } + if (response.data.fields && response.data.fields.length) { + this.spiderForm.fields = response.data.fields + } + + if (response.data.pagination_selector) { + this.spiderForm.pagination_selector = response.data.pagination_selector + } + }) + .finally(() => { + this.extractFieldsLoading = false + }) + this.$st.sendEv('爬虫详情-配置', '提取字段') }) - .finally(() => { - this.extractFieldsLoading = false - }) - this.$st.sendEv('爬虫详情-配置', '提取字段') - }) + } + }) }, onDeleteField (index) { this.fields.splice(index, 1) + }, + getDisplayStr (value) { + if (!value) return value + value = value.trim() + if (value.length > 20) return value.substr(0, 20) + '...' + return value } }, created () { @@ -293,7 +313,8 @@ export default { // if (!this.spiderForm.start_url) this.$set(this.spiderForm, 'start_url', 'http://example.com') if (!this.spiderForm.item_selector_type) this.$set(this.spiderForm, 'item_selector_type', 'css') if (!this.spiderForm.pagination_selector_type) this.$set(this.spiderForm, 'pagination_selector_type', 'css') - if (this.spiderForm.obey_robots_txt === undefined) this.$set(this.spiderForm, 'obey_robots_txt', true) + if (this.spiderForm.obey_robots_txt == null) this.$set(this.spiderForm, 'obey_robots_txt', true) + if (this.spiderForm.item_threshold == null) this.$set(this.spiderForm, 'item_threshold', 10) } } diff --git a/frontend/src/i18n/zh.js b/frontend/src/i18n/zh.js index c4b95f78..fb49de32 100644 --- a/frontend/src/i18n/zh.js +++ b/frontend/src/i18n/zh.js @@ -60,6 +60,7 @@ export default { 'Download CSV': '下载CSV', 'Upload Zip File': '上传Zip文件', 'Upload': '上传', + 'Item Threshold': '子项阈值', // 主页 'Total Tasks': '总任务数', diff --git a/frontend/src/store/modules/spider.js b/frontend/src/store/modules/spider.js index 831c0d0e..25f1260f 100644 --- a/frontend/src/store/modules/spider.js +++ b/frontend/src/store/modules/spider.js @@ -110,7 +110,8 @@ const actions = { item_selector_type: state.spiderForm.item_selector_type, pagination_selector: state.spiderForm.pagination_selector, pagination_selector_type: state.spiderForm.pagination_selector_type, - obey_robots_txt: state.spiderForm.obey_robots_txt + obey_robots_txt: state.spiderForm.obey_robots_txt, + item_threshold: state.spiderForm.item_threshold }) .then(() => { dispatch('getSpiderList') From 665f957038192815418edf8868916ec9836ac63d Mon Sep 17 00:00:00 2001 From: Marvin Zhang Date: Tue, 4 Jun 2019 23:47:38 +0800 Subject: [PATCH 13/13] updated docs --- docs/Architecture/App.html | 2 +- docs/Architecture/Celery.html | 2 +- docs/Architecture/index.html | 2 +- docs/Concept/Deploy.html | 2 +- docs/Concept/Node.html | 2 +- docs/Concept/Spider.html | 2 +- docs/Concept/Task.html | 2 +- docs/Concept/index.html | 2 +- docs/Examples/index.html | 2 +- docs/QuickStart/Installation.html | 2 +- docs/QuickStart/Run.html | 11 ++++------- docs/QuickStart/index.html | 2 +- docs/index.html | 2 +- docs/search_index.json | 2 +- gitbook/QuickStart/Run.md | 12 +++--------- 15 files changed, 20 insertions(+), 29 deletions(-) diff --git a/docs/Architecture/App.html b/docs/Architecture/App.html index 56e27371..0cb7c156 100644 --- a/docs/Architecture/App.html +++ b/docs/Architecture/App.html @@ -397,7 +397,7 @@ diff --git a/docs/Architecture/Celery.html b/docs/Architecture/Celery.html index 2f2bea93..252ebe69 100644 --- a/docs/Architecture/Celery.html +++ b/docs/Architecture/Celery.html @@ -397,7 +397,7 @@ diff --git a/docs/Architecture/index.html b/docs/Architecture/index.html index c271a5db..ff7b9d52 100644 --- a/docs/Architecture/index.html +++ b/docs/Architecture/index.html @@ -397,7 +397,7 @@ diff --git a/docs/Concept/Deploy.html b/docs/Concept/Deploy.html index f788cb78..e4e24233 100644 --- a/docs/Concept/Deploy.html +++ b/docs/Concept/Deploy.html @@ -399,7 +399,7 @@ diff --git a/docs/Concept/Node.html b/docs/Concept/Node.html index 4a40be7c..843a9f3a 100644 --- a/docs/Concept/Node.html +++ b/docs/Concept/Node.html @@ -398,7 +398,7 @@ diff --git a/docs/Concept/Spider.html b/docs/Concept/Spider.html index 1bfba7ec..4db586a8 100644 --- a/docs/Concept/Spider.html +++ b/docs/Concept/Spider.html @@ -403,7 +403,7 @@ diff --git a/docs/Concept/Task.html b/docs/Concept/Task.html index d31824cc..2554b943 100644 --- a/docs/Concept/Task.html +++ b/docs/Concept/Task.html @@ -398,7 +398,7 @@ diff --git a/docs/Concept/index.html b/docs/Concept/index.html index 92e359c1..a6a8fa6d 100644 --- a/docs/Concept/index.html +++ b/docs/Concept/index.html @@ -397,7 +397,7 @@ diff --git a/docs/Examples/index.html b/docs/Examples/index.html index af2ddff6..9e7c85b0 100644 --- a/docs/Examples/index.html +++ b/docs/Examples/index.html @@ -397,7 +397,7 @@ diff --git a/docs/QuickStart/Installation.html b/docs/QuickStart/Installation.html index 3e23c4a9..9fddabdf 100644 --- a/docs/QuickStart/Installation.html +++ b/docs/QuickStart/Installation.html @@ -408,7 +408,7 @@ npm install diff --git a/docs/QuickStart/Run.html b/docs/QuickStart/Run.html index c8beac8f..dfbd9374 100644 --- a/docs/QuickStart/Run.html +++ b/docs/QuickStart/Run.html @@ -385,16 +385,13 @@ FLASK_HOST = '127.0.0.1' FLASK_PORT = 8000

启动后端API,也就是一个Flask App,可以直接启动,或者用gunicorn代替。

-
python app.py
-
-

启动Flower服务(抱歉目前集成Flower到App服务中,必须单独启动来获取节点信息,后面的版本不需要这个操作)。

-
python ./bin/run_flower.py
+
python manage.py app
 

启动本地Worker。在其他节点中如果想只是想执行任务的话,只需要启动这一个服务就可以了。

-
python ./bin/run_worker.py
+
python manage.py worker
 

启动前端服务器。

-
cd ../frontend
+
cd frontend
 npm run serve
 
@@ -440,7 +437,7 @@ npm run serve diff --git a/docs/QuickStart/index.html b/docs/QuickStart/index.html index 0885c354..d04cd0b6 100644 --- a/docs/QuickStart/index.html +++ b/docs/QuickStart/index.html @@ -401,7 +401,7 @@ diff --git a/docs/index.html b/docs/index.html index c9f4837f..db12fef7 100644 --- a/docs/index.html +++ b/docs/index.html @@ -548,7 +548,7 @@ MONGO_DB = 'crawlab_test' diff --git a/docs/search_index.json b/docs/search_index.json index fa5dd752..8673f89d 100644 --- a/docs/search_index.json +++ b/docs/search_index.json @@ -1 +1 @@ -{"index":{"version":"0.5.12","fields":[{"name":"title","boost":10},{"name":"keywords","boost":15},{"name":"body","boost":1}],"ref":"url","documentStore":{"store":{"./":["#","'192.168.99.100'","'crawlab_test'","'test'","(中文)","./bin/run_app.py来启动应用。","./bin/run_flower.pi","./bin/run_worker.pi","27017","=","[","[x]","]","admin的单页应用。其中重用了很多el","app.pi","app或python","cd","class","col","col_nam","col_name:","crawlab","crawlab使用起来很方便,也很通用,可以适用于几乎任何主流语言和框架。它还有一个精美的前端界面,让用户可以方便的管理和运行爬虫。","crawlab的架构跟celery非常相似,但是加入了包括前端、爬虫、flower在内的额外模块,以支持爬虫管理的功能。","db","db[col_name]","def","demo","document","element","english","exampl","frontend","gerapi","import","instal","item","item,","item['task_id']","juejinpipeline(object):","manage.pi","mongo","mongo[mongo_db]","mongo_db","mongo_host","mongo_port","mongocli","mongoclient(host=mongo_host,","mongodb","mysql数据库支持","n","n/a","npm","os","os.environ.get('crawlab_collection')","os.environ.get('crawlab_task_id')","pip","pipelin","port=mongo_port)","process_item(self,","pymongo","python","python3","r","redi","requirements.txt","return","run","scrapi","scrapyd","scrapydweb","self.col.save(item)","serv","spider):","spiderkeep","todo","ui的控件来支持相应的展示。","y","与其他框架比较","与其他框架的集成","中间者","中间者跟celery中定义的一样,作为运行异步任务的队列。","以下是crawlab跟scrapy集成的例子,利用了crawlab传过来的task_id和collection_name。","任务","任务数据统计","任务是利用python的subprocess模块中的popen来实现的。任务id将以环境变量crawlab_task_id的形式存在于爬虫任务运行的进程中,并以此来关联抓取数据。","任务被触发并被节点执行。用户可以在任务详情页面中看到任务到状态、日志和抓取结果。","任务详情","依赖于scrapyd","全局搜索","分布式","前端","前端其实就是一个基于vue","后台应用","后端","启动flower服务","启动worker","启动后端api","因为很多现有当平台都依赖于scrapyd,限制了爬虫的编程语言以及框架,爬虫工程师只能用scrapy和python。当然,scrapy是非常优秀的爬虫框架,但是它不能做一切事情。","在config.py文件中,修改变量project_source_file_folder作为爬虫项目所在的目录。crawlab后台程序会自动发现这些爬虫项目并储存到数据库中。是不是很方便?","在你的爬虫程序中,你需要将crawlab_task_id的值以task_id作为可以存入数据库中。这样crawlab就直到如何将爬虫任务与抓取数据关联起来了。当前,crawlab只支持mongodb。","基于celery的爬虫分布式爬虫管理平台,支持多种编程语言以及多种爬虫框架.","多语言支持","安装","安装前台类库","安装后台类库","快速开始","截图","所有爬虫需要在抓取前被部署当相应当节点中。在\"爬虫详情\"页面点击\"deploy\"按钮,爬虫将被部署到所有有效到节点中。","抓取结果","文件管理","更多爬虫例子","架构","查看演示","框架","概览","爬虫","爬虫列表","爬虫详情","登录和用户管理","简介","管理平台","类型","网络服务","自动发现","节点","节点其实就是celery中的worker。一个节点运行时会连接到一个任务队列(例如redis)来接收和运行任务。所有爬虫需要在运行时被部署到节点上,用户在部署前需要定义节点的ip地址和端口。","节点监控","表格过滤","要求","请更改配置文件config.py,配置api和数据库连接.","运行前端","运行爬虫","这是一个flask应用,提供了必要的api来支持常规操作,例如crud、爬虫部署以及任务运行。每一个节点需要启动flask应用来支持爬虫部署。运行python","部署爬虫","部署爬虫之后,你可以在\"爬虫详情\"页面点击\"run\"按钮来启动爬虫。一个爬虫任务将被触发,你可以在任务列表页面中看到这个任务。","配置","重跑任务","限制以及有一些爬虫管理框架了,因此为啥还要用crawlab?","首页"],"QuickStart/":["安装","快速开始","运行"],"QuickStart/Installation.html":["#","cd","clone","frontend","git","https://github.com/tikazyq/crawlab","instal","npm","pip","r","requirements.txt","安装","安装前台类库","安装后台类库","安装类库","最快安装crawlab的方式是克隆一份代码到本地"],"QuickStart/Run.html":["#","'/tmp'","'/users/yeqing/projects/crawlab/spiders'","'/var/crawlab'","'/var/logs/crawlab'","'127.0.0.1'","'192.168.99.100'","'asia/shanghai'","'crawlab_test'","'crawlab_test',","'database':","'http://localhost:5555/api'","'mongodb://192.168.99.100:27017/'","'redis://192.168.99.100:6379/0'","'taskmeta_collection':","'tasks_celery',","../frontend","./bin/run_flower.pi","./bin/run_worker.pi","27017","8000","=","app.pi","app,可以直接启动,或者用gunicorn代替。","broker_url","cd","celeri","celery_enable_utc","celery_mongodb_backend_set","celery_result_backend","celery_timezon","celery后台url","databas","debug","flask","flask_host","flask_port","flower","flower_api_endpoint","flower服务地址","mongo_db","mongo_host","mongo_port","npm","project","project_deploy_file_fold","project_logs_fold","project_source_file_fold","project_tmp_fold","python","run","serv","true","variabl","{","}","中间者url,连接redi","临时文件目录","启动flower服务(抱歉目前集成flower到app服务中,必须单独启动来获取节点信息,后面的版本不需要这个操作)。","启动前端服务器。","启动后端api,也就是一个flask","启动本地worker。在其他节点中如果想只是想执行任务的话,只需要启动这一个服务就可以了。","在运行之前需要对crawlab进行一些配置,配置文件为config.py。","日志目录","爬虫源码根目录","爬虫部署根目录","运行"],"Concept/":["概念"],"Concept/Node.html":["节点","节点其实就是celery中的worker。一个节点运行时会连接到一个任务队列(例如redis)来接收和运行任务。所有爬虫需要在运行时被部署到节点上,用户在部署前需要定义节点的ip地址和端口。"],"Concept/Spider.html":["在config.py文件中,修改变量project_source_file_folder作为爬虫项目所在的目录。crawlab后台程序会自动发现这些爬虫项目并储存到数据库中。是不是很方便?","所有爬虫需要在抓取前被部署当相应当节点中。在\"爬虫详情\"页面点击\"deploy\"按钮,爬虫将被部署到所有有效到节点中。","爬虫","自动发现","运行爬虫","部署爬虫","部署爬虫之后,你可以在\"爬虫详情\"页面点击\"run\"按钮来启动爬虫。一个爬虫任务将被触发,你可以在任务列表页面中看到这个任务。"],"Concept/Task.html":["任务","任务被触发并被节点执行。用户可以在任务详情页面中看到任务到状态、日志和抓取结果。"],"Concept/Deploy.html":["所有爬虫在运行前需要被部署当相应当节点中。","部署","部署时,爬虫会被打包到相应的目录中,方便环境隔离,开发环境的爬虫和生产环境的爬虫需要打包部署来实现隔离。"],"Architecture/":["架构"],"Architecture/Celery.html":["celeri"],"Architecture/App.html":["app"],"Examples/":["exampl"]},"length":13},"tokenStore":{"root":{"2":{"7":{"0":{"1":{"7":{"docs":{"./":{"ref":"./","tf":0.00510204081632653},"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.01}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"8":{"0":{"0":{"0":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.01}}},"docs":{}},"docs":{}},"docs":{}},"docs":{},"#":{"docs":{"./":{"ref":"./","tf":0.03571428571428571},"QuickStart/Installation.html":{"ref":"QuickStart/Installation.html","tf":0.1111111111111111},"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.12}}},"'":{"1":{"2":{"7":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},".":{"1":{"docs":{},"'":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.01}}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}},"9":{"2":{"docs":{},".":{"1":{"6":{"8":{"docs":{},".":{"9":{"9":{"docs":{},".":{"1":{"0":{"0":{"docs":{},"'":{"docs":{"./":{"ref":"./","tf":0.00510204081632653},"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.01}}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{},"c":{"docs":{},"r":{"docs":{},"a":{"docs":{},"w":{"docs":{},"l":{"docs":{},"a":{"docs":{},"b":{"docs":{},"_":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"'":{"docs":{"./":{"ref":"./","tf":0.00510204081632653},"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.01}},",":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.01}}}}}}}}}}}}}}}},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"'":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}},"a":{"docs":{},"s":{"docs":{},"k":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"a":{"docs":{},"_":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{},"l":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"'":{"docs":{},":":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.01}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"_":{"docs":{},"c":{"docs":{},"e":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},"y":{"docs":{},"'":{"docs":{},",":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.01}}}}}}}}}}}}}}}},"/":{"docs":{},"t":{"docs":{},"m":{"docs":{},"p":{"docs":{},"'":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.01}}}}}},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"/":{"docs":{},"y":{"docs":{},"e":{"docs":{},"q":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"/":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"s":{"docs":{},"/":{"docs":{},"c":{"docs":{},"r":{"docs":{},"a":{"docs":{},"w":{"docs":{},"l":{"docs":{},"a":{"docs":{},"b":{"docs":{},"/":{"docs":{},"s":{"docs":{},"p":{"docs":{},"i":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"'":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.01}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"v":{"docs":{},"a":{"docs":{},"r":{"docs":{},"/":{"docs":{},"c":{"docs":{},"r":{"docs":{},"a":{"docs":{},"w":{"docs":{},"l":{"docs":{},"a":{"docs":{},"b":{"docs":{},"'":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.01}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"s":{"docs":{},"/":{"docs":{},"c":{"docs":{},"r":{"docs":{},"a":{"docs":{},"w":{"docs":{},"l":{"docs":{},"a":{"docs":{},"b":{"docs":{},"'":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.01}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"s":{"docs":{},"i":{"docs":{},"a":{"docs":{},"/":{"docs":{},"s":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},"h":{"docs":{},"a":{"docs":{},"i":{"docs":{},"'":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.01}}}}}}}}}}}}}}}},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{},"b":{"docs":{},"a":{"docs":{},"s":{"docs":{},"e":{"docs":{},"'":{"docs":{},":":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.01}}}}}}}}}}}},"h":{"docs":{},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"a":{"docs":{},"l":{"docs":{},"h":{"docs":{},"o":{"docs":{},"s":{"docs":{},"t":{"docs":{},":":{"5":{"5":{"5":{"5":{"docs":{},"/":{"docs":{},"a":{"docs":{},"p":{"docs":{},"i":{"docs":{},"'":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.01}}}}}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}}}}}}}}}}}}}}}}},"m":{"docs":{},"o":{"docs":{},"n":{"docs":{},"g":{"docs":{},"o":{"docs":{},"d":{"docs":{},"b":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"1":{"9":{"2":{"docs":{},".":{"1":{"6":{"8":{"docs":{},".":{"9":{"9":{"docs":{},".":{"1":{"0":{"0":{"docs":{},":":{"2":{"7":{"0":{"1":{"7":{"docs":{},"/":{"docs":{},"'":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.01}}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"1":{"9":{"2":{"docs":{},".":{"1":{"6":{"8":{"docs":{},".":{"9":{"9":{"docs":{},".":{"1":{"0":{"0":{"docs":{},":":{"6":{"3":{"7":{"9":{"docs":{},"/":{"0":{"docs":{},"'":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.01}}}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}}}}}}}}},"(":{"docs":{},"中":{"docs":{},"文":{"docs":{},")":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}},".":{"docs":{},"/":{"docs":{},"b":{"docs":{},"i":{"docs":{},"n":{"docs":{},"/":{"docs":{},"r":{"docs":{},"u":{"docs":{},"n":{"docs":{},"_":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{},".":{"docs":{},"p":{"docs":{},"y":{"docs":{},"来":{"docs":{},"启":{"docs":{},"动":{"docs":{},"应":{"docs":{},"用":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}}}}}},"f":{"docs":{},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"p":{"docs":{},"i":{"docs":{"./":{"ref":"./","tf":0.00510204081632653},"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.01}}}}}}}}}}},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"p":{"docs":{},"i":{"docs":{"./":{"ref":"./","tf":0.00510204081632653},"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.01}}}}}}}}}}}}}}}}}}}},".":{"docs":{},"/":{"docs":{},"f":{"docs":{},"r":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"d":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.01}}}}}}}}}}}}},"=":{"docs":{"./":{"ref":"./","tf":0.04591836734693878},"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.16}}},"[":{"docs":{"./":{"ref":"./","tf":0.04591836734693878}},"x":{"docs":{},"]":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}},"]":{"docs":{"./":{"ref":"./","tf":0.04591836734693878}}},"a":{"docs":{},"d":{"docs":{},"m":{"docs":{},"i":{"docs":{},"n":{"docs":{},"的":{"docs":{},"单":{"docs":{},"页":{"docs":{},"应":{"docs":{},"用":{"docs":{},"。":{"docs":{},"其":{"docs":{},"中":{"docs":{},"重":{"docs":{},"用":{"docs":{},"了":{"docs":{},"很":{"docs":{},"多":{"docs":{},"e":{"docs":{},"l":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"p":{"docs":{"Architecture/App.html":{"ref":"Architecture/App.html","tf":11}},".":{"docs":{},"p":{"docs":{},"i":{"docs":{"./":{"ref":"./","tf":0.00510204081632653},"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.01}}}}},"或":{"docs":{},"p":{"docs":{},"y":{"docs":{},"t":{"docs":{},"h":{"docs":{},"o":{"docs":{},"n":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"直":{"docs":{},"接":{"docs":{},"启":{"docs":{},"动":{"docs":{},",":{"docs":{},"或":{"docs":{},"者":{"docs":{},"用":{"docs":{},"g":{"docs":{},"u":{"docs":{},"n":{"docs":{},"i":{"docs":{},"c":{"docs":{},"o":{"docs":{},"r":{"docs":{},"n":{"docs":{},"代":{"docs":{},"替":{"docs":{},"。":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.01}}}}}}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"d":{"docs":{"./":{"ref":"./","tf":0.01020408163265306},"QuickStart/Installation.html":{"ref":"QuickStart/Installation.html","tf":0.05555555555555555},"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.01}}},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}},"o":{"docs":{},"n":{"docs":{},"e":{"docs":{"QuickStart/Installation.html":{"ref":"QuickStart/Installation.html","tf":0.05555555555555555}}}}}},"o":{"docs":{},"l":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}},"_":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{"./":{"ref":"./","tf":0.01020408163265306}},"e":{"docs":{},":":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}},"r":{"docs":{},"a":{"docs":{},"w":{"docs":{},"l":{"docs":{},"a":{"docs":{},"b":{"docs":{"./":{"ref":"./","tf":0.01020408163265306}},"使":{"docs":{},"用":{"docs":{},"起":{"docs":{},"来":{"docs":{},"很":{"docs":{},"方":{"docs":{},"便":{"docs":{},",":{"docs":{},"也":{"docs":{},"很":{"docs":{},"通":{"docs":{},"用":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"适":{"docs":{},"用":{"docs":{},"于":{"docs":{},"几":{"docs":{},"乎":{"docs":{},"任":{"docs":{},"何":{"docs":{},"主":{"docs":{},"流":{"docs":{},"语":{"docs":{},"言":{"docs":{},"和":{"docs":{},"框":{"docs":{},"架":{"docs":{},"。":{"docs":{},"它":{"docs":{},"还":{"docs":{},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{},"精":{"docs":{},"美":{"docs":{},"的":{"docs":{},"前":{"docs":{},"端":{"docs":{},"界":{"docs":{},"面":{"docs":{},",":{"docs":{},"让":{"docs":{},"用":{"docs":{},"户":{"docs":{},"可":{"docs":{},"以":{"docs":{},"方":{"docs":{},"便":{"docs":{},"的":{"docs":{},"管":{"docs":{},"理":{"docs":{},"和":{"docs":{},"运":{"docs":{},"行":{"docs":{},"爬":{"docs":{},"虫":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"架":{"docs":{},"构":{"docs":{},"跟":{"docs":{},"c":{"docs":{},"e":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},"y":{"docs":{},"非":{"docs":{},"常":{"docs":{},"相":{"docs":{},"似":{"docs":{},",":{"docs":{},"但":{"docs":{},"是":{"docs":{},"加":{"docs":{},"入":{"docs":{},"了":{"docs":{},"包":{"docs":{},"括":{"docs":{},"前":{"docs":{},"端":{"docs":{},"、":{"docs":{},"爬":{"docs":{},"虫":{"docs":{},"、":{"docs":{},"f":{"docs":{},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{},"e":{"docs":{},"r":{"docs":{},"在":{"docs":{},"内":{"docs":{},"的":{"docs":{},"额":{"docs":{},"外":{"docs":{},"模":{"docs":{},"块":{"docs":{},",":{"docs":{},"以":{"docs":{},"支":{"docs":{},"持":{"docs":{},"爬":{"docs":{},"虫":{"docs":{},"管":{"docs":{},"理":{"docs":{},"的":{"docs":{},"功":{"docs":{},"能":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.01},"Architecture/Celery.html":{"ref":"Architecture/Celery.html","tf":11}}},"y":{"docs":{},"_":{"docs":{},"e":{"docs":{},"n":{"docs":{},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{},"e":{"docs":{},"_":{"docs":{},"u":{"docs":{},"t":{"docs":{},"c":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.01}}}}}}}}}}}},"m":{"docs":{},"o":{"docs":{},"n":{"docs":{},"g":{"docs":{},"o":{"docs":{},"d":{"docs":{},"b":{"docs":{},"_":{"docs":{},"b":{"docs":{},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{},"e":{"docs":{},"n":{"docs":{},"d":{"docs":{},"_":{"docs":{},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.01}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{},"_":{"docs":{},"b":{"docs":{},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{},"e":{"docs":{},"n":{"docs":{},"d":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.01}}}}}}}}}}}}}}}},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},"z":{"docs":{},"o":{"docs":{},"n":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.01}}}}}}}}}},"后":{"docs":{},"台":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.01}}}}}}}}}}}}},"d":{"docs":{},"b":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}},"[":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{},"_":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"]":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}}}}},"e":{"docs":{},"f":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}},"m":{"docs":{},"o":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}},"b":{"docs":{},"u":{"docs":{},"g":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.01}}}}}},"o":{"docs":{},"c":{"docs":{},"u":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{},"b":{"docs":{},"a":{"docs":{},"s":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.01}}}}}}}}},"e":{"docs":{},"l":{"docs":{},"e":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}},"n":{"docs":{},"g":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"h":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}},"x":{"docs":{},"a":{"docs":{},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{"./":{"ref":"./","tf":0.00510204081632653},"Examples/":{"ref":"Examples/","tf":11}}}}}}}},"f":{"docs":{},"r":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"d":{"docs":{"./":{"ref":"./","tf":0.01020408163265306},"QuickStart/Installation.html":{"ref":"QuickStart/Installation.html","tf":0.05555555555555555}}}}}}}}},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"k":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.01}},"_":{"docs":{},"h":{"docs":{},"o":{"docs":{},"s":{"docs":{},"t":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.01}}}}}},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.01}}}}}}}}}},"o":{"docs":{},"w":{"docs":{},"e":{"docs":{},"r":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.01}},"_":{"docs":{},"a":{"docs":{},"p":{"docs":{},"i":{"docs":{},"_":{"docs":{},"e":{"docs":{},"n":{"docs":{},"d":{"docs":{},"p":{"docs":{},"o":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.01}}}}}}}}}}}}}}},"服":{"docs":{},"务":{"docs":{},"地":{"docs":{},"址":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.01}}}}}}}}}}}},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},"a":{"docs":{},"p":{"docs":{},"i":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}},"i":{"docs":{},"t":{"docs":{"QuickStart/Installation.html":{"ref":"QuickStart/Installation.html","tf":0.05555555555555555}}}}},"i":{"docs":{},"m":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"./":{"ref":"./","tf":0.01020408163265306}}}}}}},"n":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"l":{"docs":{"./":{"ref":"./","tf":0.01020408163265306},"QuickStart/Installation.html":{"ref":"QuickStart/Installation.html","tf":0.1111111111111111}}}}}}},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}},",":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}},"[":{"docs":{},"'":{"docs":{},"t":{"docs":{},"a":{"docs":{},"s":{"docs":{},"k":{"docs":{},"_":{"docs":{},"i":{"docs":{},"d":{"docs":{},"'":{"docs":{},"]":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}}}}}}}}},"j":{"docs":{},"u":{"docs":{},"e":{"docs":{},"j":{"docs":{},"i":{"docs":{},"n":{"docs":{},"p":{"docs":{},"i":{"docs":{},"p":{"docs":{},"e":{"docs":{},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{},"e":{"docs":{},"(":{"docs":{},"o":{"docs":{},"b":{"docs":{},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},")":{"docs":{},":":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"a":{"docs":{},"n":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},".":{"docs":{},"p":{"docs":{},"i":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}},"o":{"docs":{},"n":{"docs":{},"g":{"docs":{},"o":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}},"[":{"docs":{},"m":{"docs":{},"o":{"docs":{},"n":{"docs":{},"g":{"docs":{},"o":{"docs":{},"_":{"docs":{},"d":{"docs":{},"b":{"docs":{},"]":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}}}},"_":{"docs":{},"d":{"docs":{},"b":{"docs":{"./":{"ref":"./","tf":0.00510204081632653},"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.01}}}},"h":{"docs":{},"o":{"docs":{},"s":{"docs":{},"t":{"docs":{"./":{"ref":"./","tf":0.00510204081632653},"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.01}}}}}},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"./":{"ref":"./","tf":0.00510204081632653},"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.01}}}}}}},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"(":{"docs":{},"h":{"docs":{},"o":{"docs":{},"s":{"docs":{},"t":{"docs":{},"=":{"docs":{},"m":{"docs":{},"o":{"docs":{},"n":{"docs":{},"g":{"docs":{},"o":{"docs":{},"_":{"docs":{},"h":{"docs":{},"o":{"docs":{},"s":{"docs":{},"t":{"docs":{},",":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"b":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}},"y":{"docs":{},"s":{"docs":{},"q":{"docs":{},"l":{"docs":{},"数":{"docs":{},"据":{"docs":{},"库":{"docs":{},"支":{"docs":{},"持":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}}}},"n":{"docs":{"./":{"ref":"./","tf":0.01020408163265306}},"/":{"docs":{},"a":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}},"p":{"docs":{},"m":{"docs":{"./":{"ref":"./","tf":0.01020408163265306},"QuickStart/Installation.html":{"ref":"QuickStart/Installation.html","tf":0.05555555555555555},"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.01}}}}},"o":{"docs":{},"s":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}},".":{"docs":{},"e":{"docs":{},"n":{"docs":{},"v":{"docs":{},"i":{"docs":{},"r":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"(":{"docs":{},"'":{"docs":{},"c":{"docs":{},"r":{"docs":{},"a":{"docs":{},"w":{"docs":{},"l":{"docs":{},"a":{"docs":{},"b":{"docs":{},"_":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{},"l":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"'":{"docs":{},")":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}}}}}},"t":{"docs":{},"a":{"docs":{},"s":{"docs":{},"k":{"docs":{},"_":{"docs":{},"i":{"docs":{},"d":{"docs":{},"'":{"docs":{},")":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"i":{"docs":{},"p":{"docs":{"./":{"ref":"./","tf":0.00510204081632653},"QuickStart/Installation.html":{"ref":"QuickStart/Installation.html","tf":0.05555555555555555}},"e":{"docs":{},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"=":{"docs":{},"m":{"docs":{},"o":{"docs":{},"n":{"docs":{},"g":{"docs":{},"o":{"docs":{},"_":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},")":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}}}}}}}}},"r":{"docs":{},"o":{"docs":{},"c":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"_":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{},"(":{"docs":{},"s":{"docs":{},"e":{"docs":{},"l":{"docs":{},"f":{"docs":{},",":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}}}}}}}}},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.01}},"_":{"docs":{},"d":{"docs":{},"e":{"docs":{},"p":{"docs":{},"l":{"docs":{},"o":{"docs":{},"y":{"docs":{},"_":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"_":{"docs":{},"f":{"docs":{},"o":{"docs":{},"l":{"docs":{},"d":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.01}}}}}}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"s":{"docs":{},"_":{"docs":{},"f":{"docs":{},"o":{"docs":{},"l":{"docs":{},"d":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.01}}}}}}}}}}},"s":{"docs":{},"o":{"docs":{},"u":{"docs":{},"r":{"docs":{},"c":{"docs":{},"e":{"docs":{},"_":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"_":{"docs":{},"f":{"docs":{},"o":{"docs":{},"l":{"docs":{},"d":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.01}}}}}}}}}}}}}}}}}},"t":{"docs":{},"m":{"docs":{},"p":{"docs":{},"_":{"docs":{},"f":{"docs":{},"o":{"docs":{},"l":{"docs":{},"d":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.01}}}}}}}}}}}}}}}}},"y":{"docs":{},"m":{"docs":{},"o":{"docs":{},"n":{"docs":{},"g":{"docs":{},"o":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}},"t":{"docs":{},"h":{"docs":{},"o":{"docs":{},"n":{"3":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}},"docs":{"./":{"ref":"./","tf":0.015306122448979591},"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.03}}}}}}}},"r":{"docs":{"./":{"ref":"./","tf":0.00510204081632653},"QuickStart/Installation.html":{"ref":"QuickStart/Installation.html","tf":0.05555555555555555}},"e":{"docs":{},"d":{"docs":{},"i":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}},"q":{"docs":{},"u":{"docs":{},"i":{"docs":{},"r":{"docs":{},"e":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"s":{"docs":{},".":{"docs":{},"t":{"docs":{},"x":{"docs":{},"t":{"docs":{"./":{"ref":"./","tf":0.00510204081632653},"QuickStart/Installation.html":{"ref":"QuickStart/Installation.html","tf":0.05555555555555555}}}}}}}}}}}}}}}},"t":{"docs":{},"u":{"docs":{},"r":{"docs":{},"n":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}},"u":{"docs":{},"n":{"docs":{"./":{"ref":"./","tf":0.00510204081632653},"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.01}}}}},"s":{"docs":{},"c":{"docs":{},"r":{"docs":{},"a":{"docs":{},"p":{"docs":{},"i":{"docs":{"./":{"ref":"./","tf":0.01020408163265306}}},"y":{"docs":{},"d":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}},"w":{"docs":{},"e":{"docs":{},"b":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}}},"e":{"docs":{},"l":{"docs":{},"f":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{},".":{"docs":{},"s":{"docs":{},"a":{"docs":{},"v":{"docs":{},"e":{"docs":{},"(":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{},")":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"v":{"docs":{"./":{"ref":"./","tf":0.00510204081632653},"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.01}}}}},"p":{"docs":{},"i":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{},":":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}},"k":{"docs":{},"e":{"docs":{},"e":{"docs":{},"p":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}}}},"t":{"docs":{},"o":{"docs":{},"d":{"docs":{},"o":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}},"r":{"docs":{},"u":{"docs":{},"e":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.02}}}}}},"u":{"docs":{},"i":{"docs":{},"的":{"docs":{},"控":{"docs":{},"件":{"docs":{},"来":{"docs":{},"支":{"docs":{},"持":{"docs":{},"相":{"docs":{},"应":{"docs":{},"的":{"docs":{},"展":{"docs":{},"示":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}}}}}}}},"y":{"docs":{"./":{"ref":"./","tf":0.061224489795918366}}},"与":{"docs":{},"其":{"docs":{},"他":{"docs":{},"框":{"docs":{},"架":{"docs":{},"比":{"docs":{},"较":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}},"的":{"docs":{},"集":{"docs":{},"成":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}},"中":{"docs":{},"间":{"docs":{},"者":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}},"跟":{"docs":{},"c":{"docs":{},"e":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},"y":{"docs":{},"中":{"docs":{},"定":{"docs":{},"义":{"docs":{},"的":{"docs":{},"一":{"docs":{},"样":{"docs":{},",":{"docs":{},"作":{"docs":{},"为":{"docs":{},"运":{"docs":{},"行":{"docs":{},"异":{"docs":{},"步":{"docs":{},"任":{"docs":{},"务":{"docs":{},"的":{"docs":{},"队":{"docs":{},"列":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},",":{"docs":{},"连":{"docs":{},"接":{"docs":{},"r":{"docs":{},"e":{"docs":{},"d":{"docs":{},"i":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.01}}}}}}}}}}}}}}},"以":{"docs":{},"下":{"docs":{},"是":{"docs":{},"c":{"docs":{},"r":{"docs":{},"a":{"docs":{},"w":{"docs":{},"l":{"docs":{},"a":{"docs":{},"b":{"docs":{},"跟":{"docs":{},"s":{"docs":{},"c":{"docs":{},"r":{"docs":{},"a":{"docs":{},"p":{"docs":{},"y":{"docs":{},"集":{"docs":{},"成":{"docs":{},"的":{"docs":{},"例":{"docs":{},"子":{"docs":{},",":{"docs":{},"利":{"docs":{},"用":{"docs":{},"了":{"docs":{},"c":{"docs":{},"r":{"docs":{},"a":{"docs":{},"w":{"docs":{},"l":{"docs":{},"a":{"docs":{},"b":{"docs":{},"传":{"docs":{},"过":{"docs":{},"来":{"docs":{},"的":{"docs":{},"t":{"docs":{},"a":{"docs":{},"s":{"docs":{},"k":{"docs":{},"_":{"docs":{},"i":{"docs":{},"d":{"docs":{},"和":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{},"l":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"_":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"任":{"docs":{},"务":{"docs":{"./":{"ref":"./","tf":0.00510204081632653},"Concept/Task.html":{"ref":"Concept/Task.html","tf":10.5}},"数":{"docs":{},"据":{"docs":{},"统":{"docs":{},"计":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}},"是":{"docs":{},"利":{"docs":{},"用":{"docs":{},"p":{"docs":{},"y":{"docs":{},"t":{"docs":{},"h":{"docs":{},"o":{"docs":{},"n":{"docs":{},"的":{"docs":{},"s":{"docs":{},"u":{"docs":{},"b":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"c":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"模":{"docs":{},"块":{"docs":{},"中":{"docs":{},"的":{"docs":{},"p":{"docs":{},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},"n":{"docs":{},"来":{"docs":{},"实":{"docs":{},"现":{"docs":{},"的":{"docs":{},"。":{"docs":{},"任":{"docs":{},"务":{"docs":{},"i":{"docs":{},"d":{"docs":{},"将":{"docs":{},"以":{"docs":{},"环":{"docs":{},"境":{"docs":{},"变":{"docs":{},"量":{"docs":{},"c":{"docs":{},"r":{"docs":{},"a":{"docs":{},"w":{"docs":{},"l":{"docs":{},"a":{"docs":{},"b":{"docs":{},"_":{"docs":{},"t":{"docs":{},"a":{"docs":{},"s":{"docs":{},"k":{"docs":{},"_":{"docs":{},"i":{"docs":{},"d":{"docs":{},"的":{"docs":{},"形":{"docs":{},"式":{"docs":{},"存":{"docs":{},"在":{"docs":{},"于":{"docs":{},"爬":{"docs":{},"虫":{"docs":{},"任":{"docs":{},"务":{"docs":{},"运":{"docs":{},"行":{"docs":{},"的":{"docs":{},"进":{"docs":{},"程":{"docs":{},"中":{"docs":{},",":{"docs":{},"并":{"docs":{},"以":{"docs":{},"此":{"docs":{},"来":{"docs":{},"关":{"docs":{},"联":{"docs":{},"抓":{"docs":{},"取":{"docs":{},"数":{"docs":{},"据":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"被":{"docs":{},"触":{"docs":{},"发":{"docs":{},"并":{"docs":{},"被":{"docs":{},"节":{"docs":{},"点":{"docs":{},"执":{"docs":{},"行":{"docs":{},"。":{"docs":{},"用":{"docs":{},"户":{"docs":{},"可":{"docs":{},"以":{"docs":{},"在":{"docs":{},"任":{"docs":{},"务":{"docs":{},"详":{"docs":{},"情":{"docs":{},"页":{"docs":{},"面":{"docs":{},"中":{"docs":{},"看":{"docs":{},"到":{"docs":{},"任":{"docs":{},"务":{"docs":{},"到":{"docs":{},"状":{"docs":{},"态":{"docs":{},"、":{"docs":{},"日":{"docs":{},"志":{"docs":{},"和":{"docs":{},"抓":{"docs":{},"取":{"docs":{},"结":{"docs":{},"果":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.00510204081632653},"Concept/Task.html":{"ref":"Concept/Task.html","tf":0.5}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"详":{"docs":{},"情":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}},"依":{"docs":{},"赖":{"docs":{},"于":{"docs":{},"s":{"docs":{},"c":{"docs":{},"r":{"docs":{},"a":{"docs":{},"p":{"docs":{},"y":{"docs":{},"d":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}}}},"全":{"docs":{},"局":{"docs":{},"搜":{"docs":{},"索":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}},"分":{"docs":{},"布":{"docs":{},"式":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}},"前":{"docs":{},"端":{"docs":{"./":{"ref":"./","tf":0.015306122448979591}},"其":{"docs":{},"实":{"docs":{},"就":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"基":{"docs":{},"于":{"docs":{},"v":{"docs":{},"u":{"docs":{},"e":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}}}}}}},"后":{"docs":{},"台":{"docs":{},"应":{"docs":{},"用":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}},"端":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}},"启":{"docs":{},"动":{"docs":{},"f":{"docs":{},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{},"e":{"docs":{},"r":{"docs":{},"服":{"docs":{},"务":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}},"(":{"docs":{},"抱":{"docs":{},"歉":{"docs":{},"目":{"docs":{},"前":{"docs":{},"集":{"docs":{},"成":{"docs":{},"f":{"docs":{},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{},"e":{"docs":{},"r":{"docs":{},"到":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{},"服":{"docs":{},"务":{"docs":{},"中":{"docs":{},",":{"docs":{},"必":{"docs":{},"须":{"docs":{},"单":{"docs":{},"独":{"docs":{},"启":{"docs":{},"动":{"docs":{},"来":{"docs":{},"获":{"docs":{},"取":{"docs":{},"节":{"docs":{},"点":{"docs":{},"信":{"docs":{},"息":{"docs":{},",":{"docs":{},"后":{"docs":{},"面":{"docs":{},"的":{"docs":{},"版":{"docs":{},"本":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{},"这":{"docs":{},"个":{"docs":{},"操":{"docs":{},"作":{"docs":{},")":{"docs":{},"。":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.01}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}},"后":{"docs":{},"端":{"docs":{},"a":{"docs":{},"p":{"docs":{},"i":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}},",":{"docs":{},"也":{"docs":{},"就":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"f":{"docs":{},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"k":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.01}}}}}}}}}}}}}}}}}},"前":{"docs":{},"端":{"docs":{},"服":{"docs":{},"务":{"docs":{},"器":{"docs":{},"。":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.01}}}}}}}},"本":{"docs":{},"地":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"。":{"docs":{},"在":{"docs":{},"其":{"docs":{},"他":{"docs":{},"节":{"docs":{},"点":{"docs":{},"中":{"docs":{},"如":{"docs":{},"果":{"docs":{},"想":{"docs":{},"只":{"docs":{},"是":{"docs":{},"想":{"docs":{},"执":{"docs":{},"行":{"docs":{},"任":{"docs":{},"务":{"docs":{},"的":{"docs":{},"话":{"docs":{},",":{"docs":{},"只":{"docs":{},"需":{"docs":{},"要":{"docs":{},"启":{"docs":{},"动":{"docs":{},"这":{"docs":{},"一":{"docs":{},"个":{"docs":{},"服":{"docs":{},"务":{"docs":{},"就":{"docs":{},"可":{"docs":{},"以":{"docs":{},"了":{"docs":{},"。":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.01}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"因":{"docs":{},"为":{"docs":{},"很":{"docs":{},"多":{"docs":{},"现":{"docs":{},"有":{"docs":{},"当":{"docs":{},"平":{"docs":{},"台":{"docs":{},"都":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"于":{"docs":{},"s":{"docs":{},"c":{"docs":{},"r":{"docs":{},"a":{"docs":{},"p":{"docs":{},"y":{"docs":{},"d":{"docs":{},",":{"docs":{},"限":{"docs":{},"制":{"docs":{},"了":{"docs":{},"爬":{"docs":{},"虫":{"docs":{},"的":{"docs":{},"编":{"docs":{},"程":{"docs":{},"语":{"docs":{},"言":{"docs":{},"以":{"docs":{},"及":{"docs":{},"框":{"docs":{},"架":{"docs":{},",":{"docs":{},"爬":{"docs":{},"虫":{"docs":{},"工":{"docs":{},"程":{"docs":{},"师":{"docs":{},"只":{"docs":{},"能":{"docs":{},"用":{"docs":{},"s":{"docs":{},"c":{"docs":{},"r":{"docs":{},"a":{"docs":{},"p":{"docs":{},"y":{"docs":{},"和":{"docs":{},"p":{"docs":{},"y":{"docs":{},"t":{"docs":{},"h":{"docs":{},"o":{"docs":{},"n":{"docs":{},"。":{"docs":{},"当":{"docs":{},"然":{"docs":{},",":{"docs":{},"s":{"docs":{},"c":{"docs":{},"r":{"docs":{},"a":{"docs":{},"p":{"docs":{},"y":{"docs":{},"是":{"docs":{},"非":{"docs":{},"常":{"docs":{},"优":{"docs":{},"秀":{"docs":{},"的":{"docs":{},"爬":{"docs":{},"虫":{"docs":{},"框":{"docs":{},"架":{"docs":{},",":{"docs":{},"但":{"docs":{},"是":{"docs":{},"它":{"docs":{},"不":{"docs":{},"能":{"docs":{},"做":{"docs":{},"一":{"docs":{},"切":{"docs":{},"事":{"docs":{},"情":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"在":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{},".":{"docs":{},"p":{"docs":{},"y":{"docs":{},"文":{"docs":{},"件":{"docs":{},"中":{"docs":{},",":{"docs":{},"修":{"docs":{},"改":{"docs":{},"变":{"docs":{},"量":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"_":{"docs":{},"s":{"docs":{},"o":{"docs":{},"u":{"docs":{},"r":{"docs":{},"c":{"docs":{},"e":{"docs":{},"_":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"_":{"docs":{},"f":{"docs":{},"o":{"docs":{},"l":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"作":{"docs":{},"为":{"docs":{},"爬":{"docs":{},"虫":{"docs":{},"项":{"docs":{},"目":{"docs":{},"所":{"docs":{},"在":{"docs":{},"的":{"docs":{},"目":{"docs":{},"录":{"docs":{},"。":{"docs":{},"c":{"docs":{},"r":{"docs":{},"a":{"docs":{},"w":{"docs":{},"l":{"docs":{},"a":{"docs":{},"b":{"docs":{},"后":{"docs":{},"台":{"docs":{},"程":{"docs":{},"序":{"docs":{},"会":{"docs":{},"自":{"docs":{},"动":{"docs":{},"发":{"docs":{},"现":{"docs":{},"这":{"docs":{},"些":{"docs":{},"爬":{"docs":{},"虫":{"docs":{},"项":{"docs":{},"目":{"docs":{},"并":{"docs":{},"储":{"docs":{},"存":{"docs":{},"到":{"docs":{},"数":{"docs":{},"据":{"docs":{},"库":{"docs":{},"中":{"docs":{},"。":{"docs":{},"是":{"docs":{},"不":{"docs":{},"是":{"docs":{},"很":{"docs":{},"方":{"docs":{},"便":{"docs":{},"?":{"docs":{"./":{"ref":"./","tf":0.00510204081632653},"Concept/Spider.html":{"ref":"Concept/Spider.html","tf":0.14285714285714285}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"你":{"docs":{},"的":{"docs":{},"爬":{"docs":{},"虫":{"docs":{},"程":{"docs":{},"序":{"docs":{},"中":{"docs":{},",":{"docs":{},"你":{"docs":{},"需":{"docs":{},"要":{"docs":{},"将":{"docs":{},"c":{"docs":{},"r":{"docs":{},"a":{"docs":{},"w":{"docs":{},"l":{"docs":{},"a":{"docs":{},"b":{"docs":{},"_":{"docs":{},"t":{"docs":{},"a":{"docs":{},"s":{"docs":{},"k":{"docs":{},"_":{"docs":{},"i":{"docs":{},"d":{"docs":{},"的":{"docs":{},"值":{"docs":{},"以":{"docs":{},"t":{"docs":{},"a":{"docs":{},"s":{"docs":{},"k":{"docs":{},"_":{"docs":{},"i":{"docs":{},"d":{"docs":{},"作":{"docs":{},"为":{"docs":{},"可":{"docs":{},"以":{"docs":{},"存":{"docs":{},"入":{"docs":{},"数":{"docs":{},"据":{"docs":{},"库":{"docs":{},"中":{"docs":{},"。":{"docs":{},"这":{"docs":{},"样":{"docs":{},"c":{"docs":{},"r":{"docs":{},"a":{"docs":{},"w":{"docs":{},"l":{"docs":{},"a":{"docs":{},"b":{"docs":{},"就":{"docs":{},"直":{"docs":{},"到":{"docs":{},"如":{"docs":{},"何":{"docs":{},"将":{"docs":{},"爬":{"docs":{},"虫":{"docs":{},"任":{"docs":{},"务":{"docs":{},"与":{"docs":{},"抓":{"docs":{},"取":{"docs":{},"数":{"docs":{},"据":{"docs":{},"关":{"docs":{},"联":{"docs":{},"起":{"docs":{},"来":{"docs":{},"了":{"docs":{},"。":{"docs":{},"当":{"docs":{},"前":{"docs":{},",":{"docs":{},"c":{"docs":{},"r":{"docs":{},"a":{"docs":{},"w":{"docs":{},"l":{"docs":{},"a":{"docs":{},"b":{"docs":{},"只":{"docs":{},"支":{"docs":{},"持":{"docs":{},"m":{"docs":{},"o":{"docs":{},"n":{"docs":{},"g":{"docs":{},"o":{"docs":{},"d":{"docs":{},"b":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"运":{"docs":{},"行":{"docs":{},"之":{"docs":{},"前":{"docs":{},"需":{"docs":{},"要":{"docs":{},"对":{"docs":{},"c":{"docs":{},"r":{"docs":{},"a":{"docs":{},"w":{"docs":{},"l":{"docs":{},"a":{"docs":{},"b":{"docs":{},"进":{"docs":{},"行":{"docs":{},"一":{"docs":{},"些":{"docs":{},"配":{"docs":{},"置":{"docs":{},",":{"docs":{},"配":{"docs":{},"置":{"docs":{},"文":{"docs":{},"件":{"docs":{},"为":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{},".":{"docs":{},"p":{"docs":{},"y":{"docs":{},"。":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.01}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"基":{"docs":{},"于":{"docs":{},"c":{"docs":{},"e":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},"y":{"docs":{},"的":{"docs":{},"爬":{"docs":{},"虫":{"docs":{},"分":{"docs":{},"布":{"docs":{},"式":{"docs":{},"爬":{"docs":{},"虫":{"docs":{},"管":{"docs":{},"理":{"docs":{},"平":{"docs":{},"台":{"docs":{},",":{"docs":{},"支":{"docs":{},"持":{"docs":{},"多":{"docs":{},"种":{"docs":{},"编":{"docs":{},"程":{"docs":{},"语":{"docs":{},"言":{"docs":{},"以":{"docs":{},"及":{"docs":{},"多":{"docs":{},"种":{"docs":{},"爬":{"docs":{},"虫":{"docs":{},"框":{"docs":{},"架":{"docs":{},".":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"多":{"docs":{},"语":{"docs":{},"言":{"docs":{},"支":{"docs":{},"持":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}},"安":{"docs":{},"装":{"docs":{"./":{"ref":"./","tf":0.00510204081632653},"QuickStart/":{"ref":"QuickStart/","tf":0.3333333333333333},"QuickStart/Installation.html":{"ref":"QuickStart/Installation.html","tf":10.055555555555555}},"前":{"docs":{},"台":{"docs":{},"类":{"docs":{},"库":{"docs":{"./":{"ref":"./","tf":0.00510204081632653},"QuickStart/Installation.html":{"ref":"QuickStart/Installation.html","tf":0.05555555555555555}}}}}},"后":{"docs":{},"台":{"docs":{},"类":{"docs":{},"库":{"docs":{"./":{"ref":"./","tf":0.00510204081632653},"QuickStart/Installation.html":{"ref":"QuickStart/Installation.html","tf":0.05555555555555555}}}}}},"类":{"docs":{},"库":{"docs":{"QuickStart/Installation.html":{"ref":"QuickStart/Installation.html","tf":0.05555555555555555}}}}}},"快":{"docs":{},"速":{"docs":{},"开":{"docs":{},"始":{"docs":{"./":{"ref":"./","tf":0.00510204081632653},"QuickStart/":{"ref":"QuickStart/","tf":10.333333333333334}}}}}},"截":{"docs":{},"图":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}},"所":{"docs":{},"有":{"docs":{},"爬":{"docs":{},"虫":{"docs":{},"需":{"docs":{},"要":{"docs":{},"在":{"docs":{},"抓":{"docs":{},"取":{"docs":{},"前":{"docs":{},"被":{"docs":{},"部":{"docs":{},"署":{"docs":{},"当":{"docs":{},"相":{"docs":{},"应":{"docs":{},"当":{"docs":{},"节":{"docs":{},"点":{"docs":{},"中":{"docs":{},"。":{"docs":{},"在":{"docs":{},"\"":{"docs":{},"爬":{"docs":{},"虫":{"docs":{},"详":{"docs":{},"情":{"docs":{},"\"":{"docs":{},"页":{"docs":{},"面":{"docs":{},"点":{"docs":{},"击":{"docs":{},"\"":{"docs":{},"d":{"docs":{},"e":{"docs":{},"p":{"docs":{},"l":{"docs":{},"o":{"docs":{},"y":{"docs":{},"\"":{"docs":{},"按":{"docs":{},"钮":{"docs":{},",":{"docs":{},"爬":{"docs":{},"虫":{"docs":{},"将":{"docs":{},"被":{"docs":{},"部":{"docs":{},"署":{"docs":{},"到":{"docs":{},"所":{"docs":{},"有":{"docs":{},"有":{"docs":{},"效":{"docs":{},"到":{"docs":{},"节":{"docs":{},"点":{"docs":{},"中":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.00510204081632653},"Concept/Spider.html":{"ref":"Concept/Spider.html","tf":0.14285714285714285}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"在":{"docs":{},"运":{"docs":{},"行":{"docs":{},"前":{"docs":{},"需":{"docs":{},"要":{"docs":{},"被":{"docs":{},"部":{"docs":{},"署":{"docs":{},"当":{"docs":{},"相":{"docs":{},"应":{"docs":{},"当":{"docs":{},"节":{"docs":{},"点":{"docs":{},"中":{"docs":{},"。":{"docs":{"Concept/Deploy.html":{"ref":"Concept/Deploy.html","tf":0.3333333333333333}}}}}}}}}}}}}}}}}}}}}}},"抓":{"docs":{},"取":{"docs":{},"结":{"docs":{},"果":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}},"文":{"docs":{},"件":{"docs":{},"管":{"docs":{},"理":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}},"更":{"docs":{},"多":{"docs":{},"爬":{"docs":{},"虫":{"docs":{},"例":{"docs":{},"子":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}},"架":{"docs":{},"构":{"docs":{"./":{"ref":"./","tf":0.00510204081632653},"Architecture/":{"ref":"Architecture/","tf":11}}}},"查":{"docs":{},"看":{"docs":{},"演":{"docs":{},"示":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}},"框":{"docs":{},"架":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}},"概":{"docs":{},"览":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}},"念":{"docs":{"Concept/":{"ref":"Concept/","tf":11}}}},"爬":{"docs":{},"虫":{"docs":{"./":{"ref":"./","tf":0.00510204081632653},"Concept/Spider.html":{"ref":"Concept/Spider.html","tf":10.142857142857142}},"列":{"docs":{},"表":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}},"详":{"docs":{},"情":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}},"源":{"docs":{},"码":{"docs":{},"根":{"docs":{},"目":{"docs":{},"录":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.01}}}}}}},"部":{"docs":{},"署":{"docs":{},"根":{"docs":{},"目":{"docs":{},"录":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.01}}}}}}}}},"登":{"docs":{},"录":{"docs":{},"和":{"docs":{},"用":{"docs":{},"户":{"docs":{},"管":{"docs":{},"理":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}},"简":{"docs":{},"介":{"docs":{"./":{"ref":"./","tf":10}}}},"管":{"docs":{},"理":{"docs":{},"平":{"docs":{},"台":{"docs":{"./":{"ref":"./","tf":0.02040816326530612}}}}}},"类":{"docs":{},"型":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}},"网":{"docs":{},"络":{"docs":{},"服":{"docs":{},"务":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}},"自":{"docs":{},"动":{"docs":{},"发":{"docs":{},"现":{"docs":{"./":{"ref":"./","tf":0.00510204081632653},"Concept/Spider.html":{"ref":"Concept/Spider.html","tf":0.14285714285714285}}}}}},"节":{"docs":{},"点":{"docs":{"./":{"ref":"./","tf":0.00510204081632653},"Concept/Node.html":{"ref":"Concept/Node.html","tf":10.5}},"其":{"docs":{},"实":{"docs":{},"就":{"docs":{},"是":{"docs":{},"c":{"docs":{},"e":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},"y":{"docs":{},"中":{"docs":{},"的":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"。":{"docs":{},"一":{"docs":{},"个":{"docs":{},"节":{"docs":{},"点":{"docs":{},"运":{"docs":{},"行":{"docs":{},"时":{"docs":{},"会":{"docs":{},"连":{"docs":{},"接":{"docs":{},"到":{"docs":{},"一":{"docs":{},"个":{"docs":{},"任":{"docs":{},"务":{"docs":{},"队":{"docs":{},"列":{"docs":{},"(":{"docs":{},"例":{"docs":{},"如":{"docs":{},"r":{"docs":{},"e":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},")":{"docs":{},"来":{"docs":{},"接":{"docs":{},"收":{"docs":{},"和":{"docs":{},"运":{"docs":{},"行":{"docs":{},"任":{"docs":{},"务":{"docs":{},"。":{"docs":{},"所":{"docs":{},"有":{"docs":{},"爬":{"docs":{},"虫":{"docs":{},"需":{"docs":{},"要":{"docs":{},"在":{"docs":{},"运":{"docs":{},"行":{"docs":{},"时":{"docs":{},"被":{"docs":{},"部":{"docs":{},"署":{"docs":{},"到":{"docs":{},"节":{"docs":{},"点":{"docs":{},"上":{"docs":{},",":{"docs":{},"用":{"docs":{},"户":{"docs":{},"在":{"docs":{},"部":{"docs":{},"署":{"docs":{},"前":{"docs":{},"需":{"docs":{},"要":{"docs":{},"定":{"docs":{},"义":{"docs":{},"节":{"docs":{},"点":{"docs":{},"的":{"docs":{},"i":{"docs":{},"p":{"docs":{},"地":{"docs":{},"址":{"docs":{},"和":{"docs":{},"端":{"docs":{},"口":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.00510204081632653},"Concept/Node.html":{"ref":"Concept/Node.html","tf":0.5}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"监":{"docs":{},"控":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}},"表":{"docs":{},"格":{"docs":{},"过":{"docs":{},"滤":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}},"要":{"docs":{},"求":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}},"请":{"docs":{},"更":{"docs":{},"改":{"docs":{},"配":{"docs":{},"置":{"docs":{},"文":{"docs":{},"件":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{},".":{"docs":{},"p":{"docs":{},"y":{"docs":{},",":{"docs":{},"配":{"docs":{},"置":{"docs":{},"a":{"docs":{},"p":{"docs":{},"i":{"docs":{},"和":{"docs":{},"数":{"docs":{},"据":{"docs":{},"库":{"docs":{},"连":{"docs":{},"接":{"docs":{},".":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"运":{"docs":{},"行":{"docs":{"QuickStart/":{"ref":"QuickStart/","tf":0.3333333333333333},"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":10.01}},"前":{"docs":{},"端":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}},"爬":{"docs":{},"虫":{"docs":{"./":{"ref":"./","tf":0.00510204081632653},"Concept/Spider.html":{"ref":"Concept/Spider.html","tf":0.14285714285714285}}}}}},"这":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"f":{"docs":{},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"k":{"docs":{},"应":{"docs":{},"用":{"docs":{},",":{"docs":{},"提":{"docs":{},"供":{"docs":{},"了":{"docs":{},"必":{"docs":{},"要":{"docs":{},"的":{"docs":{},"a":{"docs":{},"p":{"docs":{},"i":{"docs":{},"来":{"docs":{},"支":{"docs":{},"持":{"docs":{},"常":{"docs":{},"规":{"docs":{},"操":{"docs":{},"作":{"docs":{},",":{"docs":{},"例":{"docs":{},"如":{"docs":{},"c":{"docs":{},"r":{"docs":{},"u":{"docs":{},"d":{"docs":{},"、":{"docs":{},"爬":{"docs":{},"虫":{"docs":{},"部":{"docs":{},"署":{"docs":{},"以":{"docs":{},"及":{"docs":{},"任":{"docs":{},"务":{"docs":{},"运":{"docs":{},"行":{"docs":{},"。":{"docs":{},"每":{"docs":{},"一":{"docs":{},"个":{"docs":{},"节":{"docs":{},"点":{"docs":{},"需":{"docs":{},"要":{"docs":{},"启":{"docs":{},"动":{"docs":{},"f":{"docs":{},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"k":{"docs":{},"应":{"docs":{},"用":{"docs":{},"来":{"docs":{},"支":{"docs":{},"持":{"docs":{},"爬":{"docs":{},"虫":{"docs":{},"部":{"docs":{},"署":{"docs":{},"。":{"docs":{},"运":{"docs":{},"行":{"docs":{},"p":{"docs":{},"y":{"docs":{},"t":{"docs":{},"h":{"docs":{},"o":{"docs":{},"n":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"部":{"docs":{},"署":{"docs":{"Concept/Deploy.html":{"ref":"Concept/Deploy.html","tf":10.333333333333334}},"爬":{"docs":{},"虫":{"docs":{"./":{"ref":"./","tf":0.00510204081632653},"Concept/Spider.html":{"ref":"Concept/Spider.html","tf":0.14285714285714285}},"之":{"docs":{},"后":{"docs":{},",":{"docs":{},"你":{"docs":{},"可":{"docs":{},"以":{"docs":{},"在":{"docs":{},"\"":{"docs":{},"爬":{"docs":{},"虫":{"docs":{},"详":{"docs":{},"情":{"docs":{},"\"":{"docs":{},"页":{"docs":{},"面":{"docs":{},"点":{"docs":{},"击":{"docs":{},"\"":{"docs":{},"r":{"docs":{},"u":{"docs":{},"n":{"docs":{},"\"":{"docs":{},"按":{"docs":{},"钮":{"docs":{},"来":{"docs":{},"启":{"docs":{},"动":{"docs":{},"爬":{"docs":{},"虫":{"docs":{},"。":{"docs":{},"一":{"docs":{},"个":{"docs":{},"爬":{"docs":{},"虫":{"docs":{},"任":{"docs":{},"务":{"docs":{},"将":{"docs":{},"被":{"docs":{},"触":{"docs":{},"发":{"docs":{},",":{"docs":{},"你":{"docs":{},"可":{"docs":{},"以":{"docs":{},"在":{"docs":{},"任":{"docs":{},"务":{"docs":{},"列":{"docs":{},"表":{"docs":{},"页":{"docs":{},"面":{"docs":{},"中":{"docs":{},"看":{"docs":{},"到":{"docs":{},"这":{"docs":{},"个":{"docs":{},"任":{"docs":{},"务":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.00510204081632653},"Concept/Spider.html":{"ref":"Concept/Spider.html","tf":0.14285714285714285}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"时":{"docs":{},",":{"docs":{},"爬":{"docs":{},"虫":{"docs":{},"会":{"docs":{},"被":{"docs":{},"打":{"docs":{},"包":{"docs":{},"到":{"docs":{},"相":{"docs":{},"应":{"docs":{},"的":{"docs":{},"目":{"docs":{},"录":{"docs":{},"中":{"docs":{},",":{"docs":{},"方":{"docs":{},"便":{"docs":{},"环":{"docs":{},"境":{"docs":{},"隔":{"docs":{},"离":{"docs":{},",":{"docs":{},"开":{"docs":{},"发":{"docs":{},"环":{"docs":{},"境":{"docs":{},"的":{"docs":{},"爬":{"docs":{},"虫":{"docs":{},"和":{"docs":{},"生":{"docs":{},"产":{"docs":{},"环":{"docs":{},"境":{"docs":{},"的":{"docs":{},"爬":{"docs":{},"虫":{"docs":{},"需":{"docs":{},"要":{"docs":{},"打":{"docs":{},"包":{"docs":{},"部":{"docs":{},"署":{"docs":{},"来":{"docs":{},"实":{"docs":{},"现":{"docs":{},"隔":{"docs":{},"离":{"docs":{},"。":{"docs":{"Concept/Deploy.html":{"ref":"Concept/Deploy.html","tf":0.3333333333333333}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"配":{"docs":{},"置":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}},"重":{"docs":{},"跑":{"docs":{},"任":{"docs":{},"务":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}},"限":{"docs":{},"制":{"docs":{},"以":{"docs":{},"及":{"docs":{},"有":{"docs":{},"一":{"docs":{},"些":{"docs":{},"爬":{"docs":{},"虫":{"docs":{},"管":{"docs":{},"理":{"docs":{},"框":{"docs":{},"架":{"docs":{},"了":{"docs":{},",":{"docs":{},"因":{"docs":{},"此":{"docs":{},"为":{"docs":{},"啥":{"docs":{},"还":{"docs":{},"要":{"docs":{},"用":{"docs":{},"c":{"docs":{},"r":{"docs":{},"a":{"docs":{},"w":{"docs":{},"l":{"docs":{},"a":{"docs":{},"b":{"docs":{},"?":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"首":{"docs":{},"页":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}},"h":{"docs":{},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{},"s":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"g":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"u":{"docs":{},"b":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"/":{"docs":{},"t":{"docs":{},"i":{"docs":{},"k":{"docs":{},"a":{"docs":{},"z":{"docs":{},"y":{"docs":{},"q":{"docs":{},"/":{"docs":{},"c":{"docs":{},"r":{"docs":{},"a":{"docs":{},"w":{"docs":{},"l":{"docs":{},"a":{"docs":{},"b":{"docs":{"QuickStart/Installation.html":{"ref":"QuickStart/Installation.html","tf":0.05555555555555555}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"最":{"docs":{},"快":{"docs":{},"安":{"docs":{},"装":{"docs":{},"c":{"docs":{},"r":{"docs":{},"a":{"docs":{},"w":{"docs":{},"l":{"docs":{},"a":{"docs":{},"b":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{},"是":{"docs":{},"克":{"docs":{},"隆":{"docs":{},"一":{"docs":{},"份":{"docs":{},"代":{"docs":{},"码":{"docs":{},"到":{"docs":{},"本":{"docs":{},"地":{"docs":{"QuickStart/Installation.html":{"ref":"QuickStart/Installation.html","tf":0.05555555555555555}}}}}}}}}}}}}}}}}}}}}}}}}},"b":{"docs":{},"r":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"_":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.01}}}}}}}}}}}},"v":{"docs":{},"a":{"docs":{},"r":{"docs":{},"i":{"docs":{},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.05}}}}}}}}},"{":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.01}}},"}":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.01}}},"临":{"docs":{},"时":{"docs":{},"文":{"docs":{},"件":{"docs":{},"目":{"docs":{},"录":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.01}}}}}}}},"日":{"docs":{},"志":{"docs":{},"目":{"docs":{},"录":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.01}}}}}}},"length":245},"corpusTokens":["#","'/tmp'","'/users/yeqing/projects/crawlab/spiders'","'/var/crawlab'","'/var/logs/crawlab'","'127.0.0.1'","'192.168.99.100'","'asia/shanghai'","'crawlab_test'","'crawlab_test',","'database':","'http://localhost:5555/api'","'mongodb://192.168.99.100:27017/'","'redis://192.168.99.100:6379/0'","'taskmeta_collection':","'tasks_celery',","'test'","(中文)","../frontend","./bin/run_app.py来启动应用。","./bin/run_flower.pi","./bin/run_worker.pi","27017","8000","=","[","[x]","]","admin的单页应用。其中重用了很多el","app","app.pi","app或python","app,可以直接启动,或者用gunicorn代替。","broker_url","cd","celeri","celery_enable_utc","celery_mongodb_backend_set","celery_result_backend","celery_timezon","celery后台url","class","clone","col","col_nam","col_name:","crawlab","crawlab使用起来很方便,也很通用,可以适用于几乎任何主流语言和框架。它还有一个精美的前端界面,让用户可以方便的管理和运行爬虫。","crawlab的架构跟celery非常相似,但是加入了包括前端、爬虫、flower在内的额外模块,以支持爬虫管理的功能。","databas","db","db[col_name]","debug","def","demo","document","element","english","exampl","flask","flask_host","flask_port","flower","flower_api_endpoint","flower服务地址","frontend","gerapi","git","https://github.com/tikazyq/crawlab","import","instal","item","item,","item['task_id']","juejinpipeline(object):","manage.pi","mongo","mongo[mongo_db]","mongo_db","mongo_host","mongo_port","mongocli","mongoclient(host=mongo_host,","mongodb","mysql数据库支持","n","n/a","npm","os","os.environ.get('crawlab_collection')","os.environ.get('crawlab_task_id')","pip","pipelin","port=mongo_port)","process_item(self,","project","project_deploy_file_fold","project_logs_fold","project_source_file_fold","project_tmp_fold","pymongo","python","python3","r","redi","requirements.txt","return","run","scrapi","scrapyd","scrapydweb","self.col.save(item)","serv","spider):","spiderkeep","todo","true","ui的控件来支持相应的展示。","variabl","y","{","}","与其他框架比较","与其他框架的集成","中间者","中间者url,连接redi","中间者跟celery中定义的一样,作为运行异步任务的队列。","临时文件目录","以下是crawlab跟scrapy集成的例子,利用了crawlab传过来的task_id和collection_name。","任务","任务数据统计","任务是利用python的subprocess模块中的popen来实现的。任务id将以环境变量crawlab_task_id的形式存在于爬虫任务运行的进程中,并以此来关联抓取数据。","任务被触发并被节点执行。用户可以在任务详情页面中看到任务到状态、日志和抓取结果。","任务详情","依赖于scrapyd","全局搜索","分布式","前端","前端其实就是一个基于vue","后台应用","后端","启动flower服务","启动flower服务(抱歉目前集成flower到app服务中,必须单独启动来获取节点信息,后面的版本不需要这个操作)。","启动worker","启动前端服务器。","启动后端api","启动后端api,也就是一个flask","启动本地worker。在其他节点中如果想只是想执行任务的话,只需要启动这一个服务就可以了。","因为很多现有当平台都依赖于scrapyd,限制了爬虫的编程语言以及框架,爬虫工程师只能用scrapy和python。当然,scrapy是非常优秀的爬虫框架,但是它不能做一切事情。","在config.py文件中,修改变量project_source_file_folder作为爬虫项目所在的目录。crawlab后台程序会自动发现这些爬虫项目并储存到数据库中。是不是很方便?","在你的爬虫程序中,你需要将crawlab_task_id的值以task_id作为可以存入数据库中。这样crawlab就直到如何将爬虫任务与抓取数据关联起来了。当前,crawlab只支持mongodb。","在运行之前需要对crawlab进行一些配置,配置文件为config.py。","基于celery的爬虫分布式爬虫管理平台,支持多种编程语言以及多种爬虫框架.","多语言支持","安装","安装前台类库","安装后台类库","安装类库","快速开始","截图","所有爬虫在运行前需要被部署当相应当节点中。","所有爬虫需要在抓取前被部署当相应当节点中。在\"爬虫详情\"页面点击\"deploy\"按钮,爬虫将被部署到所有有效到节点中。","抓取结果","文件管理","日志目录","更多爬虫例子","最快安装crawlab的方式是克隆一份代码到本地","架构","查看演示","框架","概念","概览","爬虫","爬虫列表","爬虫源码根目录","爬虫详情","爬虫部署根目录","登录和用户管理","简介","管理平台","类型","网络服务","自动发现","节点","节点其实就是celery中的worker。一个节点运行时会连接到一个任务队列(例如redis)来接收和运行任务。所有爬虫需要在运行时被部署到节点上,用户在部署前需要定义节点的ip地址和端口。","节点监控","表格过滤","要求","请更改配置文件config.py,配置api和数据库连接.","运行","运行前端","运行爬虫","这是一个flask应用,提供了必要的api来支持常规操作,例如crud、爬虫部署以及任务运行。每一个节点需要启动flask应用来支持爬虫部署。运行python","部署","部署时,爬虫会被打包到相应的目录中,方便环境隔离,开发环境的爬虫和生产环境的爬虫需要打包部署来实现隔离。","部署爬虫","部署爬虫之后,你可以在\"爬虫详情\"页面点击\"run\"按钮来启动爬虫。一个爬虫任务将被触发,你可以在任务列表页面中看到这个任务。","配置","重跑任务","限制以及有一些爬虫管理框架了,因此为啥还要用crawlab?","首页"],"pipeline":["stopWordFilter","stemmer"]},"store":{"./":{"url":"./","title":"简介","keywords":"","body":"Crawlab\n基于Celery的爬虫分布式爬虫管理平台,支持多种编程语言以及多种爬虫框架.\n查看演示 Demo\nEnglish Documentation\n要求\n\nPython3\nMongoDB\nRedis\n\n安装\n# 安装后台类库\npip install -r requirements.txt\n\n# 安装前台类库\ncd frontend\nnpm install\n\n配置\n请更改配置文件config.py,配置API和数据库连接.\n快速开始\n# 启动后端API\npython app.py\n\n# 启动Flower服务\npython ./bin/run_flower.py\n\n# 启动worker\npython ./bin/run_worker.py\n\n# 运行前端\ncd frontend\nnpm run serve\n\n截图\n首页\n\n爬虫列表\n\n爬虫详情 - 概览\n\n任务详情 - 抓取结果\n\n架构\nCrawlab的架构跟Celery非常相似,但是加入了包括前端、爬虫、Flower在内的额外模块,以支持爬虫管理的功能。\n\n节点\n节点其实就是Celery中的Worker。一个节点运行时会连接到一个任务队列(例如Redis)来接收和运行任务。所有爬虫需要在运行时被部署到节点上,用户在部署前需要定义节点的IP地址和端口。\n爬虫\n自动发现\n在config.py文件中,修改变量PROJECT_SOURCE_FILE_FOLDER作为爬虫项目所在的目录。Crawlab后台程序会自动发现这些爬虫项目并储存到数据库中。是不是很方便?\n部署爬虫\n所有爬虫需要在抓取前被部署当相应当节点中。在\"爬虫详情\"页面点击\"Deploy\"按钮,爬虫将被部署到所有有效到节点中。\n运行爬虫\n部署爬虫之后,你可以在\"爬虫详情\"页面点击\"Run\"按钮来启动爬虫。一个爬虫任务将被触发,你可以在任务列表页面中看到这个任务。\n任务\n任务被触发并被节点执行。用户可以在任务详情页面中看到任务到状态、日志和抓取结果。\n后台应用\n这是一个Flask应用,提供了必要的API来支持常规操作,例如CRUD、爬虫部署以及任务运行。每一个节点需要启动Flask应用来支持爬虫部署。运行python manage.py app或python ./bin/run_app.py来启动应用。\n中间者\n中间者跟Celery中定义的一样,作为运行异步任务的队列。\n前端\n前端其实就是一个基于Vue-Element-Admin的单页应用。其中重用了很多Element-UI的控件来支持相应的展示。\n与其他框架的集成\n任务是利用python的subprocess模块中的Popen来实现的。任务ID将以环境变量CRAWLAB_TASK_ID的形式存在于爬虫任务运行的进程中,并以此来关联抓取数据。\n在你的爬虫程序中,你需要将CRAWLAB_TASK_ID的值以task_id作为可以存入数据库中。这样Crawlab就直到如何将爬虫任务与抓取数据关联起来了。当前,Crawlab只支持MongoDB。\nScrapy\n以下是Crawlab跟Scrapy集成的例子,利用了Crawlab传过来的task_id和collection_name。\nimport os\nfrom pymongo import MongoClient\n\nMONGO_HOST = '192.168.99.100'\nMONGO_PORT = 27017\nMONGO_DB = 'crawlab_test'\n\n# scrapy example in the pipeline\nclass JuejinPipeline(object):\n mongo = MongoClient(host=MONGO_HOST, port=MONGO_PORT)\n db = mongo[MONGO_DB]\n col_name = os.environ.get('CRAWLAB_COLLECTION')\n if not col_name:\n col_name = 'test'\n col = db[col_name]\n\n def process_item(self, item, spider):\n item['task_id'] = os.environ.get('CRAWLAB_TASK_ID')\n self.col.save(item)\n return item\n\n与其他框架比较\n限制以及有一些爬虫管理框架了,因此为啥还要用Crawlab?\n因为很多现有当平台都依赖于Scrapyd,限制了爬虫的编程语言以及框架,爬虫工程师只能用scrapy和python。当然,scrapy是非常优秀的爬虫框架,但是它不能做一切事情。\nCrawlab使用起来很方便,也很通用,可以适用于几乎任何主流语言和框架。它还有一个精美的前端界面,让用户可以方便的管理和运行爬虫。\n\n\n\n框架\n类型\n分布式\n前端\n依赖于Scrapyd\n\n\n\n\nCrawlab\n管理平台\nY\nY\nN\n\n\nGerapy\n管理平台\nY\nY\nY\n\n\nSpiderKeeper\n管理平台\nY\nY\nY\n\n\nScrapydWeb\n管理平台\nY\nY\nY\n\n\nScrapyd\n网络服务\nY\nN\nN/A\n\n\n\nTODOs\n后端\n\n[ ] 文件管理\n[ ] MySQL数据库支持\n[ ] 重跑任务\n[ ] 节点监控\n[ ] 更多爬虫例子\n\n前端\n\n[ ] 任务数据统计\n[ ] 表格过滤\n[x] 多语言支持 (中文)\n[ ] 登录和用户管理\n[ ] 全局搜索\n\n"},"QuickStart/":{"url":"QuickStart/","title":"快速开始","keywords":"","body":"快速开始\n\n安装\n运行\n\n"},"QuickStart/Installation.html":{"url":"QuickStart/Installation.html","title":"安装","keywords":"","body":"安装\n最快安装Crawlab的方式是克隆一份代码到本地\ngit clone https://github.com/tikazyq/crawlab\n\n安装类库\n# 安装后台类库\npip install -r requirements.txt\n\n# 安装前台类库\ncd frontend\nnpm install\n\n"},"QuickStart/Run.html":{"url":"QuickStart/Run.html","title":"运行","keywords":"","body":"运行\n在运行之前需要对Crawlab进行一些配置,配置文件为config.py。\n# project variables\nPROJECT_SOURCE_FILE_FOLDER = '/Users/yeqing/projects/crawlab/spiders' # 爬虫源码根目录\nPROJECT_DEPLOY_FILE_FOLDER = '/var/crawlab' # 爬虫部署根目录\nPROJECT_LOGS_FOLDER = '/var/logs/crawlab' # 日志目录\nPROJECT_TMP_FOLDER = '/tmp' # 临时文件目录\n\n# celery variables\nBROKER_URL = 'redis://192.168.99.100:6379/0' # 中间者URL,连接redis\nCELERY_RESULT_BACKEND = 'mongodb://192.168.99.100:27017/' # CELERY后台URL\nCELERY_MONGODB_BACKEND_SETTINGS = {\n 'database': 'crawlab_test',\n 'taskmeta_collection': 'tasks_celery',\n}\nCELERY_TIMEZONE = 'Asia/Shanghai'\nCELERY_ENABLE_UTC = True\n\n# flower variables\nFLOWER_API_ENDPOINT = 'http://localhost:5555/api' # Flower服务地址\n\n# database variables\nMONGO_HOST = '192.168.99.100'\nMONGO_PORT = 27017\nMONGO_DB = 'crawlab_test'\n\n# flask variables\nDEBUG = True\nFLASK_HOST = '127.0.0.1'\nFLASK_PORT = 8000\n\n启动后端API,也就是一个Flask App,可以直接启动,或者用gunicorn代替。\npython app.py\n\n启动Flower服务(抱歉目前集成Flower到App服务中,必须单独启动来获取节点信息,后面的版本不需要这个操作)。\npython ./bin/run_flower.py\n\n启动本地Worker。在其他节点中如果想只是想执行任务的话,只需要启动这一个服务就可以了。\npython ./bin/run_worker.py\n\n启动前端服务器。\ncd ../frontend\nnpm run serve\n\n"},"Concept/":{"url":"Concept/","title":"概念","keywords":"","body":"概念\n"},"Concept/Node.html":{"url":"Concept/Node.html","title":"节点","keywords":"","body":"节点\n节点其实就是Celery中的Worker。一个节点运行时会连接到一个任务队列(例如Redis)来接收和运行任务。所有爬虫需要在运行时被部署到节点上,用户在部署前需要定义节点的IP地址和端口。\n"},"Concept/Spider.html":{"url":"Concept/Spider.html","title":"爬虫","keywords":"","body":"爬虫\n自动发现\n在config.py文件中,修改变量PROJECT_SOURCE_FILE_FOLDER作为爬虫项目所在的目录。Crawlab后台程序会自动发现这些爬虫项目并储存到数据库中。是不是很方便?\n部署爬虫\n所有爬虫需要在抓取前被部署当相应当节点中。在\"爬虫详情\"页面点击\"Deploy\"按钮,爬虫将被部署到所有有效到节点中。\n运行爬虫\n部署爬虫之后,你可以在\"爬虫详情\"页面点击\"Run\"按钮来启动爬虫。一个爬虫任务将被触发,你可以在任务列表页面中看到这个任务。\n"},"Concept/Task.html":{"url":"Concept/Task.html","title":"任务","keywords":"","body":"任务\n任务被触发并被节点执行。用户可以在任务详情页面中看到任务到状态、日志和抓取结果。\n"},"Concept/Deploy.html":{"url":"Concept/Deploy.html","title":"部署","keywords":"","body":"部署\n所有爬虫在运行前需要被部署当相应当节点中。\n部署时,爬虫会被打包到相应的目录中,方便环境隔离,开发环境的爬虫和生产环境的爬虫需要打包部署来实现隔离。\n"},"Architecture/":{"url":"Architecture/","title":"架构","keywords":"","body":"架构\n"},"Architecture/Celery.html":{"url":"Architecture/Celery.html","title":"Celery","keywords":"","body":"Celery\n"},"Architecture/App.html":{"url":"Architecture/App.html","title":"App","keywords":"","body":"App\n"},"Examples/":{"url":"Examples/","title":"Examples","keywords":"","body":"Examples\n"}}} \ No newline at end of file +{"index":{"version":"0.5.12","fields":[{"name":"title","boost":10},{"name":"keywords","boost":15},{"name":"body","boost":1}],"ref":"url","documentStore":{"store":{"./":["#","'192.168.99.100'","'crawlab_test'","'test'","(中文)","./bin/run_app.py来启动应用。","./bin/run_flower.pi","./bin/run_worker.pi","27017","=","[","[x]","]","admin的单页应用。其中重用了很多el","app.pi","app或python","cd","class","col","col_nam","col_name:","crawlab","crawlab使用起来很方便,也很通用,可以适用于几乎任何主流语言和框架。它还有一个精美的前端界面,让用户可以方便的管理和运行爬虫。","crawlab的架构跟celery非常相似,但是加入了包括前端、爬虫、flower在内的额外模块,以支持爬虫管理的功能。","db","db[col_name]","def","demo","document","element","english","exampl","frontend","gerapi","import","instal","item","item,","item['task_id']","juejinpipeline(object):","manage.pi","mongo","mongo[mongo_db]","mongo_db","mongo_host","mongo_port","mongocli","mongoclient(host=mongo_host,","mongodb","mysql数据库支持","n","n/a","npm","os","os.environ.get('crawlab_collection')","os.environ.get('crawlab_task_id')","pip","pipelin","port=mongo_port)","process_item(self,","pymongo","python","python3","r","redi","requirements.txt","return","run","scrapi","scrapyd","scrapydweb","self.col.save(item)","serv","spider):","spiderkeep","todo","ui的控件来支持相应的展示。","y","与其他框架比较","与其他框架的集成","中间者","中间者跟celery中定义的一样,作为运行异步任务的队列。","以下是crawlab跟scrapy集成的例子,利用了crawlab传过来的task_id和collection_name。","任务","任务数据统计","任务是利用python的subprocess模块中的popen来实现的。任务id将以环境变量crawlab_task_id的形式存在于爬虫任务运行的进程中,并以此来关联抓取数据。","任务被触发并被节点执行。用户可以在任务详情页面中看到任务到状态、日志和抓取结果。","任务详情","依赖于scrapyd","全局搜索","分布式","前端","前端其实就是一个基于vue","后台应用","后端","启动flower服务","启动worker","启动后端api","因为很多现有当平台都依赖于scrapyd,限制了爬虫的编程语言以及框架,爬虫工程师只能用scrapy和python。当然,scrapy是非常优秀的爬虫框架,但是它不能做一切事情。","在config.py文件中,修改变量project_source_file_folder作为爬虫项目所在的目录。crawlab后台程序会自动发现这些爬虫项目并储存到数据库中。是不是很方便?","在你的爬虫程序中,你需要将crawlab_task_id的值以task_id作为可以存入数据库中。这样crawlab就直到如何将爬虫任务与抓取数据关联起来了。当前,crawlab只支持mongodb。","基于celery的爬虫分布式爬虫管理平台,支持多种编程语言以及多种爬虫框架.","多语言支持","安装","安装前台类库","安装后台类库","快速开始","截图","所有爬虫需要在抓取前被部署当相应当节点中。在\"爬虫详情\"页面点击\"deploy\"按钮,爬虫将被部署到所有有效到节点中。","抓取结果","文件管理","更多爬虫例子","架构","查看演示","框架","概览","爬虫","爬虫列表","爬虫详情","登录和用户管理","简介","管理平台","类型","网络服务","自动发现","节点","节点其实就是celery中的worker。一个节点运行时会连接到一个任务队列(例如redis)来接收和运行任务。所有爬虫需要在运行时被部署到节点上,用户在部署前需要定义节点的ip地址和端口。","节点监控","表格过滤","要求","请更改配置文件config.py,配置api和数据库连接.","运行前端","运行爬虫","这是一个flask应用,提供了必要的api来支持常规操作,例如crud、爬虫部署以及任务运行。每一个节点需要启动flask应用来支持爬虫部署。运行python","部署爬虫","部署爬虫之后,你可以在\"爬虫详情\"页面点击\"run\"按钮来启动爬虫。一个爬虫任务将被触发,你可以在任务列表页面中看到这个任务。","配置","重跑任务","限制以及有一些爬虫管理框架了,因此为啥还要用crawlab?","首页"],"QuickStart/":["安装","快速开始","运行"],"QuickStart/Installation.html":["#","cd","clone","frontend","git","https://github.com/tikazyq/crawlab","instal","npm","pip","r","requirements.txt","安装","安装前台类库","安装后台类库","安装类库","最快安装crawlab的方式是克隆一份代码到本地"],"QuickStart/Run.html":["#","'/tmp'","'/users/yeqing/projects/crawlab/spiders'","'/var/crawlab'","'/var/logs/crawlab'","'127.0.0.1'","'192.168.99.100'","'asia/shanghai'","'crawlab_test'","'crawlab_test',","'database':","'http://localhost:5555/api'","'mongodb://192.168.99.100:27017/'","'redis://192.168.99.100:6379/0'","'taskmeta_collection':","'tasks_celery',","27017","8000","=","app","app,可以直接启动,或者用gunicorn代替。","broker_url","cd","celeri","celery_enable_utc","celery_mongodb_backend_set","celery_result_backend","celery_timezon","celery后台url","databas","debug","flask","flask_host","flask_port","flower","flower_api_endpoint","flower服务地址","frontend","manage.pi","mongo_db","mongo_host","mongo_port","npm","project","project_deploy_file_fold","project_logs_fold","project_source_file_fold","project_tmp_fold","python","run","serv","true","variabl","worker","{","}","中间者url,连接redi","临时文件目录","启动前端服务器。","启动后端api,也就是一个flask","启动本地worker。在其他节点中如果想只是想执行任务的话,只需要启动这一个服务就可以了。","在运行之前需要对crawlab进行一些配置,配置文件为config.py。","日志目录","爬虫源码根目录","爬虫部署根目录","运行"],"Concept/":["概念"],"Concept/Node.html":["节点","节点其实就是celery中的worker。一个节点运行时会连接到一个任务队列(例如redis)来接收和运行任务。所有爬虫需要在运行时被部署到节点上,用户在部署前需要定义节点的ip地址和端口。"],"Concept/Spider.html":["在config.py文件中,修改变量project_source_file_folder作为爬虫项目所在的目录。crawlab后台程序会自动发现这些爬虫项目并储存到数据库中。是不是很方便?","所有爬虫需要在抓取前被部署当相应当节点中。在\"爬虫详情\"页面点击\"deploy\"按钮,爬虫将被部署到所有有效到节点中。","爬虫","自动发现","运行爬虫","部署爬虫","部署爬虫之后,你可以在\"爬虫详情\"页面点击\"run\"按钮来启动爬虫。一个爬虫任务将被触发,你可以在任务列表页面中看到这个任务。"],"Concept/Task.html":["任务","任务被触发并被节点执行。用户可以在任务详情页面中看到任务到状态、日志和抓取结果。"],"Concept/Deploy.html":["所有爬虫在运行前需要被部署当相应当节点中。","部署","部署时,爬虫会被打包到相应的目录中,方便环境隔离,开发环境的爬虫和生产环境的爬虫需要打包部署来实现隔离。"],"Architecture/":["架构"],"Architecture/Celery.html":["celeri"],"Architecture/App.html":["app"],"Examples/":["exampl"]},"length":13},"tokenStore":{"root":{"2":{"7":{"0":{"1":{"7":{"docs":{"./":{"ref":"./","tf":0.00510204081632653},"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.010101010101010102}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"8":{"0":{"0":{"0":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.010101010101010102}}},"docs":{}},"docs":{}},"docs":{}},"docs":{},"#":{"docs":{"./":{"ref":"./","tf":0.03571428571428571},"QuickStart/Installation.html":{"ref":"QuickStart/Installation.html","tf":0.1111111111111111},"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.12121212121212122}}},"'":{"1":{"2":{"7":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},".":{"1":{"docs":{},"'":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.010101010101010102}}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}},"9":{"2":{"docs":{},".":{"1":{"6":{"8":{"docs":{},".":{"9":{"9":{"docs":{},".":{"1":{"0":{"0":{"docs":{},"'":{"docs":{"./":{"ref":"./","tf":0.00510204081632653},"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.010101010101010102}}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{},"c":{"docs":{},"r":{"docs":{},"a":{"docs":{},"w":{"docs":{},"l":{"docs":{},"a":{"docs":{},"b":{"docs":{},"_":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"'":{"docs":{"./":{"ref":"./","tf":0.00510204081632653},"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.010101010101010102}},",":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.010101010101010102}}}}}}}}}}}}}}}},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"'":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}},"a":{"docs":{},"s":{"docs":{},"k":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"a":{"docs":{},"_":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{},"l":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"'":{"docs":{},":":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.010101010101010102}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"_":{"docs":{},"c":{"docs":{},"e":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},"y":{"docs":{},"'":{"docs":{},",":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.010101010101010102}}}}}}}}}}}}}}}},"/":{"docs":{},"t":{"docs":{},"m":{"docs":{},"p":{"docs":{},"'":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.010101010101010102}}}}}},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"/":{"docs":{},"y":{"docs":{},"e":{"docs":{},"q":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"/":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"s":{"docs":{},"/":{"docs":{},"c":{"docs":{},"r":{"docs":{},"a":{"docs":{},"w":{"docs":{},"l":{"docs":{},"a":{"docs":{},"b":{"docs":{},"/":{"docs":{},"s":{"docs":{},"p":{"docs":{},"i":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"'":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.010101010101010102}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"v":{"docs":{},"a":{"docs":{},"r":{"docs":{},"/":{"docs":{},"c":{"docs":{},"r":{"docs":{},"a":{"docs":{},"w":{"docs":{},"l":{"docs":{},"a":{"docs":{},"b":{"docs":{},"'":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.010101010101010102}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"s":{"docs":{},"/":{"docs":{},"c":{"docs":{},"r":{"docs":{},"a":{"docs":{},"w":{"docs":{},"l":{"docs":{},"a":{"docs":{},"b":{"docs":{},"'":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.010101010101010102}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"s":{"docs":{},"i":{"docs":{},"a":{"docs":{},"/":{"docs":{},"s":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},"h":{"docs":{},"a":{"docs":{},"i":{"docs":{},"'":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.010101010101010102}}}}}}}}}}}}}}}},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{},"b":{"docs":{},"a":{"docs":{},"s":{"docs":{},"e":{"docs":{},"'":{"docs":{},":":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.010101010101010102}}}}}}}}}}}},"h":{"docs":{},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"a":{"docs":{},"l":{"docs":{},"h":{"docs":{},"o":{"docs":{},"s":{"docs":{},"t":{"docs":{},":":{"5":{"5":{"5":{"5":{"docs":{},"/":{"docs":{},"a":{"docs":{},"p":{"docs":{},"i":{"docs":{},"'":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.010101010101010102}}}}}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}}}}}}}}}}}}}}}}},"m":{"docs":{},"o":{"docs":{},"n":{"docs":{},"g":{"docs":{},"o":{"docs":{},"d":{"docs":{},"b":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"1":{"9":{"2":{"docs":{},".":{"1":{"6":{"8":{"docs":{},".":{"9":{"9":{"docs":{},".":{"1":{"0":{"0":{"docs":{},":":{"2":{"7":{"0":{"1":{"7":{"docs":{},"/":{"docs":{},"'":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.010101010101010102}}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"1":{"9":{"2":{"docs":{},".":{"1":{"6":{"8":{"docs":{},".":{"9":{"9":{"docs":{},".":{"1":{"0":{"0":{"docs":{},":":{"6":{"3":{"7":{"9":{"docs":{},"/":{"0":{"docs":{},"'":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.010101010101010102}}}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}}}}}}}}},"(":{"docs":{},"中":{"docs":{},"文":{"docs":{},")":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}},".":{"docs":{},"/":{"docs":{},"b":{"docs":{},"i":{"docs":{},"n":{"docs":{},"/":{"docs":{},"r":{"docs":{},"u":{"docs":{},"n":{"docs":{},"_":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{},".":{"docs":{},"p":{"docs":{},"y":{"docs":{},"来":{"docs":{},"启":{"docs":{},"动":{"docs":{},"应":{"docs":{},"用":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}}}}}},"f":{"docs":{},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"p":{"docs":{},"i":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}}},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"p":{"docs":{},"i":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}}}}}}}}}}}}},"=":{"docs":{"./":{"ref":"./","tf":0.04591836734693878},"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.16161616161616163}}},"[":{"docs":{"./":{"ref":"./","tf":0.04591836734693878}},"x":{"docs":{},"]":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}},"]":{"docs":{"./":{"ref":"./","tf":0.04591836734693878}}},"a":{"docs":{},"d":{"docs":{},"m":{"docs":{},"i":{"docs":{},"n":{"docs":{},"的":{"docs":{},"单":{"docs":{},"页":{"docs":{},"应":{"docs":{},"用":{"docs":{},"。":{"docs":{},"其":{"docs":{},"中":{"docs":{},"重":{"docs":{},"用":{"docs":{},"了":{"docs":{},"很":{"docs":{},"多":{"docs":{},"e":{"docs":{},"l":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"p":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.010101010101010102},"Architecture/App.html":{"ref":"Architecture/App.html","tf":11}},".":{"docs":{},"p":{"docs":{},"i":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}},"或":{"docs":{},"p":{"docs":{},"y":{"docs":{},"t":{"docs":{},"h":{"docs":{},"o":{"docs":{},"n":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"直":{"docs":{},"接":{"docs":{},"启":{"docs":{},"动":{"docs":{},",":{"docs":{},"或":{"docs":{},"者":{"docs":{},"用":{"docs":{},"g":{"docs":{},"u":{"docs":{},"n":{"docs":{},"i":{"docs":{},"c":{"docs":{},"o":{"docs":{},"r":{"docs":{},"n":{"docs":{},"代":{"docs":{},"替":{"docs":{},"。":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.010101010101010102}}}}}}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"d":{"docs":{"./":{"ref":"./","tf":0.01020408163265306},"QuickStart/Installation.html":{"ref":"QuickStart/Installation.html","tf":0.05555555555555555},"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.010101010101010102}}},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}},"o":{"docs":{},"n":{"docs":{},"e":{"docs":{"QuickStart/Installation.html":{"ref":"QuickStart/Installation.html","tf":0.05555555555555555}}}}}},"o":{"docs":{},"l":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}},"_":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{"./":{"ref":"./","tf":0.01020408163265306}},"e":{"docs":{},":":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}},"r":{"docs":{},"a":{"docs":{},"w":{"docs":{},"l":{"docs":{},"a":{"docs":{},"b":{"docs":{"./":{"ref":"./","tf":0.01020408163265306}},"使":{"docs":{},"用":{"docs":{},"起":{"docs":{},"来":{"docs":{},"很":{"docs":{},"方":{"docs":{},"便":{"docs":{},",":{"docs":{},"也":{"docs":{},"很":{"docs":{},"通":{"docs":{},"用":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"适":{"docs":{},"用":{"docs":{},"于":{"docs":{},"几":{"docs":{},"乎":{"docs":{},"任":{"docs":{},"何":{"docs":{},"主":{"docs":{},"流":{"docs":{},"语":{"docs":{},"言":{"docs":{},"和":{"docs":{},"框":{"docs":{},"架":{"docs":{},"。":{"docs":{},"它":{"docs":{},"还":{"docs":{},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{},"精":{"docs":{},"美":{"docs":{},"的":{"docs":{},"前":{"docs":{},"端":{"docs":{},"界":{"docs":{},"面":{"docs":{},",":{"docs":{},"让":{"docs":{},"用":{"docs":{},"户":{"docs":{},"可":{"docs":{},"以":{"docs":{},"方":{"docs":{},"便":{"docs":{},"的":{"docs":{},"管":{"docs":{},"理":{"docs":{},"和":{"docs":{},"运":{"docs":{},"行":{"docs":{},"爬":{"docs":{},"虫":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"架":{"docs":{},"构":{"docs":{},"跟":{"docs":{},"c":{"docs":{},"e":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},"y":{"docs":{},"非":{"docs":{},"常":{"docs":{},"相":{"docs":{},"似":{"docs":{},",":{"docs":{},"但":{"docs":{},"是":{"docs":{},"加":{"docs":{},"入":{"docs":{},"了":{"docs":{},"包":{"docs":{},"括":{"docs":{},"前":{"docs":{},"端":{"docs":{},"、":{"docs":{},"爬":{"docs":{},"虫":{"docs":{},"、":{"docs":{},"f":{"docs":{},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{},"e":{"docs":{},"r":{"docs":{},"在":{"docs":{},"内":{"docs":{},"的":{"docs":{},"额":{"docs":{},"外":{"docs":{},"模":{"docs":{},"块":{"docs":{},",":{"docs":{},"以":{"docs":{},"支":{"docs":{},"持":{"docs":{},"爬":{"docs":{},"虫":{"docs":{},"管":{"docs":{},"理":{"docs":{},"的":{"docs":{},"功":{"docs":{},"能":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.010101010101010102},"Architecture/Celery.html":{"ref":"Architecture/Celery.html","tf":11}}},"y":{"docs":{},"_":{"docs":{},"e":{"docs":{},"n":{"docs":{},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{},"e":{"docs":{},"_":{"docs":{},"u":{"docs":{},"t":{"docs":{},"c":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.010101010101010102}}}}}}}}}}}},"m":{"docs":{},"o":{"docs":{},"n":{"docs":{},"g":{"docs":{},"o":{"docs":{},"d":{"docs":{},"b":{"docs":{},"_":{"docs":{},"b":{"docs":{},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{},"e":{"docs":{},"n":{"docs":{},"d":{"docs":{},"_":{"docs":{},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.010101010101010102}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{},"_":{"docs":{},"b":{"docs":{},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{},"e":{"docs":{},"n":{"docs":{},"d":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.010101010101010102}}}}}}}}}}}}}}}},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},"z":{"docs":{},"o":{"docs":{},"n":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.010101010101010102}}}}}}}}}},"后":{"docs":{},"台":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.010101010101010102}}}}}}}}}}}}},"d":{"docs":{},"b":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}},"[":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{},"_":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"]":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}}}}},"e":{"docs":{},"f":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}},"m":{"docs":{},"o":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}},"b":{"docs":{},"u":{"docs":{},"g":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.010101010101010102}}}}}},"o":{"docs":{},"c":{"docs":{},"u":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{},"b":{"docs":{},"a":{"docs":{},"s":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.010101010101010102}}}}}}}}},"e":{"docs":{},"l":{"docs":{},"e":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}},"n":{"docs":{},"g":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"h":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}},"x":{"docs":{},"a":{"docs":{},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{"./":{"ref":"./","tf":0.00510204081632653},"Examples/":{"ref":"Examples/","tf":11}}}}}}}},"f":{"docs":{},"r":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"d":{"docs":{"./":{"ref":"./","tf":0.01020408163265306},"QuickStart/Installation.html":{"ref":"QuickStart/Installation.html","tf":0.05555555555555555},"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.010101010101010102}}}}}}}}},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"k":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.010101010101010102}},"_":{"docs":{},"h":{"docs":{},"o":{"docs":{},"s":{"docs":{},"t":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.010101010101010102}}}}}},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.010101010101010102}}}}}}}}}},"o":{"docs":{},"w":{"docs":{},"e":{"docs":{},"r":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.010101010101010102}},"_":{"docs":{},"a":{"docs":{},"p":{"docs":{},"i":{"docs":{},"_":{"docs":{},"e":{"docs":{},"n":{"docs":{},"d":{"docs":{},"p":{"docs":{},"o":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.010101010101010102}}}}}}}}}}}}}}},"服":{"docs":{},"务":{"docs":{},"地":{"docs":{},"址":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.010101010101010102}}}}}}}}}}}},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},"a":{"docs":{},"p":{"docs":{},"i":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}},"i":{"docs":{},"t":{"docs":{"QuickStart/Installation.html":{"ref":"QuickStart/Installation.html","tf":0.05555555555555555}}}}},"i":{"docs":{},"m":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"./":{"ref":"./","tf":0.01020408163265306}}}}}}},"n":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"l":{"docs":{"./":{"ref":"./","tf":0.01020408163265306},"QuickStart/Installation.html":{"ref":"QuickStart/Installation.html","tf":0.1111111111111111}}}}}}},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}},",":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}},"[":{"docs":{},"'":{"docs":{},"t":{"docs":{},"a":{"docs":{},"s":{"docs":{},"k":{"docs":{},"_":{"docs":{},"i":{"docs":{},"d":{"docs":{},"'":{"docs":{},"]":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}}}}}}}}},"j":{"docs":{},"u":{"docs":{},"e":{"docs":{},"j":{"docs":{},"i":{"docs":{},"n":{"docs":{},"p":{"docs":{},"i":{"docs":{},"p":{"docs":{},"e":{"docs":{},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{},"e":{"docs":{},"(":{"docs":{},"o":{"docs":{},"b":{"docs":{},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},")":{"docs":{},":":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"a":{"docs":{},"n":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},".":{"docs":{},"p":{"docs":{},"i":{"docs":{"./":{"ref":"./","tf":0.00510204081632653},"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.020202020202020204}}}}}}}}}},"o":{"docs":{},"n":{"docs":{},"g":{"docs":{},"o":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}},"[":{"docs":{},"m":{"docs":{},"o":{"docs":{},"n":{"docs":{},"g":{"docs":{},"o":{"docs":{},"_":{"docs":{},"d":{"docs":{},"b":{"docs":{},"]":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}}}},"_":{"docs":{},"d":{"docs":{},"b":{"docs":{"./":{"ref":"./","tf":0.00510204081632653},"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.010101010101010102}}}},"h":{"docs":{},"o":{"docs":{},"s":{"docs":{},"t":{"docs":{"./":{"ref":"./","tf":0.00510204081632653},"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.010101010101010102}}}}}},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"./":{"ref":"./","tf":0.00510204081632653},"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.010101010101010102}}}}}}},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"(":{"docs":{},"h":{"docs":{},"o":{"docs":{},"s":{"docs":{},"t":{"docs":{},"=":{"docs":{},"m":{"docs":{},"o":{"docs":{},"n":{"docs":{},"g":{"docs":{},"o":{"docs":{},"_":{"docs":{},"h":{"docs":{},"o":{"docs":{},"s":{"docs":{},"t":{"docs":{},",":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"b":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}},"y":{"docs":{},"s":{"docs":{},"q":{"docs":{},"l":{"docs":{},"数":{"docs":{},"据":{"docs":{},"库":{"docs":{},"支":{"docs":{},"持":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}}}},"n":{"docs":{"./":{"ref":"./","tf":0.01020408163265306}},"/":{"docs":{},"a":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}},"p":{"docs":{},"m":{"docs":{"./":{"ref":"./","tf":0.01020408163265306},"QuickStart/Installation.html":{"ref":"QuickStart/Installation.html","tf":0.05555555555555555},"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.010101010101010102}}}}},"o":{"docs":{},"s":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}},".":{"docs":{},"e":{"docs":{},"n":{"docs":{},"v":{"docs":{},"i":{"docs":{},"r":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"(":{"docs":{},"'":{"docs":{},"c":{"docs":{},"r":{"docs":{},"a":{"docs":{},"w":{"docs":{},"l":{"docs":{},"a":{"docs":{},"b":{"docs":{},"_":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{},"l":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"'":{"docs":{},")":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}}}}}},"t":{"docs":{},"a":{"docs":{},"s":{"docs":{},"k":{"docs":{},"_":{"docs":{},"i":{"docs":{},"d":{"docs":{},"'":{"docs":{},")":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"i":{"docs":{},"p":{"docs":{"./":{"ref":"./","tf":0.00510204081632653},"QuickStart/Installation.html":{"ref":"QuickStart/Installation.html","tf":0.05555555555555555}},"e":{"docs":{},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"=":{"docs":{},"m":{"docs":{},"o":{"docs":{},"n":{"docs":{},"g":{"docs":{},"o":{"docs":{},"_":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},")":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}}}}}}}}},"r":{"docs":{},"o":{"docs":{},"c":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"_":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{},"(":{"docs":{},"s":{"docs":{},"e":{"docs":{},"l":{"docs":{},"f":{"docs":{},",":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}}}}}}}}},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.010101010101010102}},"_":{"docs":{},"d":{"docs":{},"e":{"docs":{},"p":{"docs":{},"l":{"docs":{},"o":{"docs":{},"y":{"docs":{},"_":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"_":{"docs":{},"f":{"docs":{},"o":{"docs":{},"l":{"docs":{},"d":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.010101010101010102}}}}}}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"s":{"docs":{},"_":{"docs":{},"f":{"docs":{},"o":{"docs":{},"l":{"docs":{},"d":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.010101010101010102}}}}}}}}}}},"s":{"docs":{},"o":{"docs":{},"u":{"docs":{},"r":{"docs":{},"c":{"docs":{},"e":{"docs":{},"_":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"_":{"docs":{},"f":{"docs":{},"o":{"docs":{},"l":{"docs":{},"d":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.010101010101010102}}}}}}}}}}}}}}}}}},"t":{"docs":{},"m":{"docs":{},"p":{"docs":{},"_":{"docs":{},"f":{"docs":{},"o":{"docs":{},"l":{"docs":{},"d":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.010101010101010102}}}}}}}}}}}}}}}}},"y":{"docs":{},"m":{"docs":{},"o":{"docs":{},"n":{"docs":{},"g":{"docs":{},"o":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}},"t":{"docs":{},"h":{"docs":{},"o":{"docs":{},"n":{"3":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}},"docs":{"./":{"ref":"./","tf":0.015306122448979591},"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.020202020202020204}}}}}}}},"r":{"docs":{"./":{"ref":"./","tf":0.00510204081632653},"QuickStart/Installation.html":{"ref":"QuickStart/Installation.html","tf":0.05555555555555555}},"e":{"docs":{},"d":{"docs":{},"i":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}},"q":{"docs":{},"u":{"docs":{},"i":{"docs":{},"r":{"docs":{},"e":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"s":{"docs":{},".":{"docs":{},"t":{"docs":{},"x":{"docs":{},"t":{"docs":{"./":{"ref":"./","tf":0.00510204081632653},"QuickStart/Installation.html":{"ref":"QuickStart/Installation.html","tf":0.05555555555555555}}}}}}}}}}}}}}}},"t":{"docs":{},"u":{"docs":{},"r":{"docs":{},"n":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}},"u":{"docs":{},"n":{"docs":{"./":{"ref":"./","tf":0.00510204081632653},"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.010101010101010102}}}}},"s":{"docs":{},"c":{"docs":{},"r":{"docs":{},"a":{"docs":{},"p":{"docs":{},"i":{"docs":{"./":{"ref":"./","tf":0.01020408163265306}}},"y":{"docs":{},"d":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}},"w":{"docs":{},"e":{"docs":{},"b":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}}},"e":{"docs":{},"l":{"docs":{},"f":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{},".":{"docs":{},"s":{"docs":{},"a":{"docs":{},"v":{"docs":{},"e":{"docs":{},"(":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{},")":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"v":{"docs":{"./":{"ref":"./","tf":0.00510204081632653},"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.010101010101010102}}}}},"p":{"docs":{},"i":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{},":":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}},"k":{"docs":{},"e":{"docs":{},"e":{"docs":{},"p":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}}}},"t":{"docs":{},"o":{"docs":{},"d":{"docs":{},"o":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}},"r":{"docs":{},"u":{"docs":{},"e":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.020202020202020204}}}}}},"u":{"docs":{},"i":{"docs":{},"的":{"docs":{},"控":{"docs":{},"件":{"docs":{},"来":{"docs":{},"支":{"docs":{},"持":{"docs":{},"相":{"docs":{},"应":{"docs":{},"的":{"docs":{},"展":{"docs":{},"示":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}}}}}}}},"y":{"docs":{"./":{"ref":"./","tf":0.061224489795918366}}},"与":{"docs":{},"其":{"docs":{},"他":{"docs":{},"框":{"docs":{},"架":{"docs":{},"比":{"docs":{},"较":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}},"的":{"docs":{},"集":{"docs":{},"成":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}},"中":{"docs":{},"间":{"docs":{},"者":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}},"跟":{"docs":{},"c":{"docs":{},"e":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},"y":{"docs":{},"中":{"docs":{},"定":{"docs":{},"义":{"docs":{},"的":{"docs":{},"一":{"docs":{},"样":{"docs":{},",":{"docs":{},"作":{"docs":{},"为":{"docs":{},"运":{"docs":{},"行":{"docs":{},"异":{"docs":{},"步":{"docs":{},"任":{"docs":{},"务":{"docs":{},"的":{"docs":{},"队":{"docs":{},"列":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},",":{"docs":{},"连":{"docs":{},"接":{"docs":{},"r":{"docs":{},"e":{"docs":{},"d":{"docs":{},"i":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.010101010101010102}}}}}}}}}}}}}}},"以":{"docs":{},"下":{"docs":{},"是":{"docs":{},"c":{"docs":{},"r":{"docs":{},"a":{"docs":{},"w":{"docs":{},"l":{"docs":{},"a":{"docs":{},"b":{"docs":{},"跟":{"docs":{},"s":{"docs":{},"c":{"docs":{},"r":{"docs":{},"a":{"docs":{},"p":{"docs":{},"y":{"docs":{},"集":{"docs":{},"成":{"docs":{},"的":{"docs":{},"例":{"docs":{},"子":{"docs":{},",":{"docs":{},"利":{"docs":{},"用":{"docs":{},"了":{"docs":{},"c":{"docs":{},"r":{"docs":{},"a":{"docs":{},"w":{"docs":{},"l":{"docs":{},"a":{"docs":{},"b":{"docs":{},"传":{"docs":{},"过":{"docs":{},"来":{"docs":{},"的":{"docs":{},"t":{"docs":{},"a":{"docs":{},"s":{"docs":{},"k":{"docs":{},"_":{"docs":{},"i":{"docs":{},"d":{"docs":{},"和":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{},"l":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"_":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"任":{"docs":{},"务":{"docs":{"./":{"ref":"./","tf":0.00510204081632653},"Concept/Task.html":{"ref":"Concept/Task.html","tf":10.5}},"数":{"docs":{},"据":{"docs":{},"统":{"docs":{},"计":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}},"是":{"docs":{},"利":{"docs":{},"用":{"docs":{},"p":{"docs":{},"y":{"docs":{},"t":{"docs":{},"h":{"docs":{},"o":{"docs":{},"n":{"docs":{},"的":{"docs":{},"s":{"docs":{},"u":{"docs":{},"b":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"c":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"模":{"docs":{},"块":{"docs":{},"中":{"docs":{},"的":{"docs":{},"p":{"docs":{},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},"n":{"docs":{},"来":{"docs":{},"实":{"docs":{},"现":{"docs":{},"的":{"docs":{},"。":{"docs":{},"任":{"docs":{},"务":{"docs":{},"i":{"docs":{},"d":{"docs":{},"将":{"docs":{},"以":{"docs":{},"环":{"docs":{},"境":{"docs":{},"变":{"docs":{},"量":{"docs":{},"c":{"docs":{},"r":{"docs":{},"a":{"docs":{},"w":{"docs":{},"l":{"docs":{},"a":{"docs":{},"b":{"docs":{},"_":{"docs":{},"t":{"docs":{},"a":{"docs":{},"s":{"docs":{},"k":{"docs":{},"_":{"docs":{},"i":{"docs":{},"d":{"docs":{},"的":{"docs":{},"形":{"docs":{},"式":{"docs":{},"存":{"docs":{},"在":{"docs":{},"于":{"docs":{},"爬":{"docs":{},"虫":{"docs":{},"任":{"docs":{},"务":{"docs":{},"运":{"docs":{},"行":{"docs":{},"的":{"docs":{},"进":{"docs":{},"程":{"docs":{},"中":{"docs":{},",":{"docs":{},"并":{"docs":{},"以":{"docs":{},"此":{"docs":{},"来":{"docs":{},"关":{"docs":{},"联":{"docs":{},"抓":{"docs":{},"取":{"docs":{},"数":{"docs":{},"据":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"被":{"docs":{},"触":{"docs":{},"发":{"docs":{},"并":{"docs":{},"被":{"docs":{},"节":{"docs":{},"点":{"docs":{},"执":{"docs":{},"行":{"docs":{},"。":{"docs":{},"用":{"docs":{},"户":{"docs":{},"可":{"docs":{},"以":{"docs":{},"在":{"docs":{},"任":{"docs":{},"务":{"docs":{},"详":{"docs":{},"情":{"docs":{},"页":{"docs":{},"面":{"docs":{},"中":{"docs":{},"看":{"docs":{},"到":{"docs":{},"任":{"docs":{},"务":{"docs":{},"到":{"docs":{},"状":{"docs":{},"态":{"docs":{},"、":{"docs":{},"日":{"docs":{},"志":{"docs":{},"和":{"docs":{},"抓":{"docs":{},"取":{"docs":{},"结":{"docs":{},"果":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.00510204081632653},"Concept/Task.html":{"ref":"Concept/Task.html","tf":0.5}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"详":{"docs":{},"情":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}},"依":{"docs":{},"赖":{"docs":{},"于":{"docs":{},"s":{"docs":{},"c":{"docs":{},"r":{"docs":{},"a":{"docs":{},"p":{"docs":{},"y":{"docs":{},"d":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}}}},"全":{"docs":{},"局":{"docs":{},"搜":{"docs":{},"索":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}},"分":{"docs":{},"布":{"docs":{},"式":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}},"前":{"docs":{},"端":{"docs":{"./":{"ref":"./","tf":0.015306122448979591}},"其":{"docs":{},"实":{"docs":{},"就":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"基":{"docs":{},"于":{"docs":{},"v":{"docs":{},"u":{"docs":{},"e":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}}}}}}},"后":{"docs":{},"台":{"docs":{},"应":{"docs":{},"用":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}},"端":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}},"启":{"docs":{},"动":{"docs":{},"f":{"docs":{},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{},"e":{"docs":{},"r":{"docs":{},"服":{"docs":{},"务":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}},"后":{"docs":{},"端":{"docs":{},"a":{"docs":{},"p":{"docs":{},"i":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}},",":{"docs":{},"也":{"docs":{},"就":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"f":{"docs":{},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"k":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.010101010101010102}}}}}}}}}}}}}}}}}},"前":{"docs":{},"端":{"docs":{},"服":{"docs":{},"务":{"docs":{},"器":{"docs":{},"。":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.010101010101010102}}}}}}}},"本":{"docs":{},"地":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"。":{"docs":{},"在":{"docs":{},"其":{"docs":{},"他":{"docs":{},"节":{"docs":{},"点":{"docs":{},"中":{"docs":{},"如":{"docs":{},"果":{"docs":{},"想":{"docs":{},"只":{"docs":{},"是":{"docs":{},"想":{"docs":{},"执":{"docs":{},"行":{"docs":{},"任":{"docs":{},"务":{"docs":{},"的":{"docs":{},"话":{"docs":{},",":{"docs":{},"只":{"docs":{},"需":{"docs":{},"要":{"docs":{},"启":{"docs":{},"动":{"docs":{},"这":{"docs":{},"一":{"docs":{},"个":{"docs":{},"服":{"docs":{},"务":{"docs":{},"就":{"docs":{},"可":{"docs":{},"以":{"docs":{},"了":{"docs":{},"。":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.010101010101010102}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"因":{"docs":{},"为":{"docs":{},"很":{"docs":{},"多":{"docs":{},"现":{"docs":{},"有":{"docs":{},"当":{"docs":{},"平":{"docs":{},"台":{"docs":{},"都":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"于":{"docs":{},"s":{"docs":{},"c":{"docs":{},"r":{"docs":{},"a":{"docs":{},"p":{"docs":{},"y":{"docs":{},"d":{"docs":{},",":{"docs":{},"限":{"docs":{},"制":{"docs":{},"了":{"docs":{},"爬":{"docs":{},"虫":{"docs":{},"的":{"docs":{},"编":{"docs":{},"程":{"docs":{},"语":{"docs":{},"言":{"docs":{},"以":{"docs":{},"及":{"docs":{},"框":{"docs":{},"架":{"docs":{},",":{"docs":{},"爬":{"docs":{},"虫":{"docs":{},"工":{"docs":{},"程":{"docs":{},"师":{"docs":{},"只":{"docs":{},"能":{"docs":{},"用":{"docs":{},"s":{"docs":{},"c":{"docs":{},"r":{"docs":{},"a":{"docs":{},"p":{"docs":{},"y":{"docs":{},"和":{"docs":{},"p":{"docs":{},"y":{"docs":{},"t":{"docs":{},"h":{"docs":{},"o":{"docs":{},"n":{"docs":{},"。":{"docs":{},"当":{"docs":{},"然":{"docs":{},",":{"docs":{},"s":{"docs":{},"c":{"docs":{},"r":{"docs":{},"a":{"docs":{},"p":{"docs":{},"y":{"docs":{},"是":{"docs":{},"非":{"docs":{},"常":{"docs":{},"优":{"docs":{},"秀":{"docs":{},"的":{"docs":{},"爬":{"docs":{},"虫":{"docs":{},"框":{"docs":{},"架":{"docs":{},",":{"docs":{},"但":{"docs":{},"是":{"docs":{},"它":{"docs":{},"不":{"docs":{},"能":{"docs":{},"做":{"docs":{},"一":{"docs":{},"切":{"docs":{},"事":{"docs":{},"情":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"在":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{},".":{"docs":{},"p":{"docs":{},"y":{"docs":{},"文":{"docs":{},"件":{"docs":{},"中":{"docs":{},",":{"docs":{},"修":{"docs":{},"改":{"docs":{},"变":{"docs":{},"量":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"_":{"docs":{},"s":{"docs":{},"o":{"docs":{},"u":{"docs":{},"r":{"docs":{},"c":{"docs":{},"e":{"docs":{},"_":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"_":{"docs":{},"f":{"docs":{},"o":{"docs":{},"l":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"作":{"docs":{},"为":{"docs":{},"爬":{"docs":{},"虫":{"docs":{},"项":{"docs":{},"目":{"docs":{},"所":{"docs":{},"在":{"docs":{},"的":{"docs":{},"目":{"docs":{},"录":{"docs":{},"。":{"docs":{},"c":{"docs":{},"r":{"docs":{},"a":{"docs":{},"w":{"docs":{},"l":{"docs":{},"a":{"docs":{},"b":{"docs":{},"后":{"docs":{},"台":{"docs":{},"程":{"docs":{},"序":{"docs":{},"会":{"docs":{},"自":{"docs":{},"动":{"docs":{},"发":{"docs":{},"现":{"docs":{},"这":{"docs":{},"些":{"docs":{},"爬":{"docs":{},"虫":{"docs":{},"项":{"docs":{},"目":{"docs":{},"并":{"docs":{},"储":{"docs":{},"存":{"docs":{},"到":{"docs":{},"数":{"docs":{},"据":{"docs":{},"库":{"docs":{},"中":{"docs":{},"。":{"docs":{},"是":{"docs":{},"不":{"docs":{},"是":{"docs":{},"很":{"docs":{},"方":{"docs":{},"便":{"docs":{},"?":{"docs":{"./":{"ref":"./","tf":0.00510204081632653},"Concept/Spider.html":{"ref":"Concept/Spider.html","tf":0.14285714285714285}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"你":{"docs":{},"的":{"docs":{},"爬":{"docs":{},"虫":{"docs":{},"程":{"docs":{},"序":{"docs":{},"中":{"docs":{},",":{"docs":{},"你":{"docs":{},"需":{"docs":{},"要":{"docs":{},"将":{"docs":{},"c":{"docs":{},"r":{"docs":{},"a":{"docs":{},"w":{"docs":{},"l":{"docs":{},"a":{"docs":{},"b":{"docs":{},"_":{"docs":{},"t":{"docs":{},"a":{"docs":{},"s":{"docs":{},"k":{"docs":{},"_":{"docs":{},"i":{"docs":{},"d":{"docs":{},"的":{"docs":{},"值":{"docs":{},"以":{"docs":{},"t":{"docs":{},"a":{"docs":{},"s":{"docs":{},"k":{"docs":{},"_":{"docs":{},"i":{"docs":{},"d":{"docs":{},"作":{"docs":{},"为":{"docs":{},"可":{"docs":{},"以":{"docs":{},"存":{"docs":{},"入":{"docs":{},"数":{"docs":{},"据":{"docs":{},"库":{"docs":{},"中":{"docs":{},"。":{"docs":{},"这":{"docs":{},"样":{"docs":{},"c":{"docs":{},"r":{"docs":{},"a":{"docs":{},"w":{"docs":{},"l":{"docs":{},"a":{"docs":{},"b":{"docs":{},"就":{"docs":{},"直":{"docs":{},"到":{"docs":{},"如":{"docs":{},"何":{"docs":{},"将":{"docs":{},"爬":{"docs":{},"虫":{"docs":{},"任":{"docs":{},"务":{"docs":{},"与":{"docs":{},"抓":{"docs":{},"取":{"docs":{},"数":{"docs":{},"据":{"docs":{},"关":{"docs":{},"联":{"docs":{},"起":{"docs":{},"来":{"docs":{},"了":{"docs":{},"。":{"docs":{},"当":{"docs":{},"前":{"docs":{},",":{"docs":{},"c":{"docs":{},"r":{"docs":{},"a":{"docs":{},"w":{"docs":{},"l":{"docs":{},"a":{"docs":{},"b":{"docs":{},"只":{"docs":{},"支":{"docs":{},"持":{"docs":{},"m":{"docs":{},"o":{"docs":{},"n":{"docs":{},"g":{"docs":{},"o":{"docs":{},"d":{"docs":{},"b":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"运":{"docs":{},"行":{"docs":{},"之":{"docs":{},"前":{"docs":{},"需":{"docs":{},"要":{"docs":{},"对":{"docs":{},"c":{"docs":{},"r":{"docs":{},"a":{"docs":{},"w":{"docs":{},"l":{"docs":{},"a":{"docs":{},"b":{"docs":{},"进":{"docs":{},"行":{"docs":{},"一":{"docs":{},"些":{"docs":{},"配":{"docs":{},"置":{"docs":{},",":{"docs":{},"配":{"docs":{},"置":{"docs":{},"文":{"docs":{},"件":{"docs":{},"为":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{},".":{"docs":{},"p":{"docs":{},"y":{"docs":{},"。":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.010101010101010102}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"基":{"docs":{},"于":{"docs":{},"c":{"docs":{},"e":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},"y":{"docs":{},"的":{"docs":{},"爬":{"docs":{},"虫":{"docs":{},"分":{"docs":{},"布":{"docs":{},"式":{"docs":{},"爬":{"docs":{},"虫":{"docs":{},"管":{"docs":{},"理":{"docs":{},"平":{"docs":{},"台":{"docs":{},",":{"docs":{},"支":{"docs":{},"持":{"docs":{},"多":{"docs":{},"种":{"docs":{},"编":{"docs":{},"程":{"docs":{},"语":{"docs":{},"言":{"docs":{},"以":{"docs":{},"及":{"docs":{},"多":{"docs":{},"种":{"docs":{},"爬":{"docs":{},"虫":{"docs":{},"框":{"docs":{},"架":{"docs":{},".":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"多":{"docs":{},"语":{"docs":{},"言":{"docs":{},"支":{"docs":{},"持":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}},"安":{"docs":{},"装":{"docs":{"./":{"ref":"./","tf":0.00510204081632653},"QuickStart/":{"ref":"QuickStart/","tf":0.3333333333333333},"QuickStart/Installation.html":{"ref":"QuickStart/Installation.html","tf":10.055555555555555}},"前":{"docs":{},"台":{"docs":{},"类":{"docs":{},"库":{"docs":{"./":{"ref":"./","tf":0.00510204081632653},"QuickStart/Installation.html":{"ref":"QuickStart/Installation.html","tf":0.05555555555555555}}}}}},"后":{"docs":{},"台":{"docs":{},"类":{"docs":{},"库":{"docs":{"./":{"ref":"./","tf":0.00510204081632653},"QuickStart/Installation.html":{"ref":"QuickStart/Installation.html","tf":0.05555555555555555}}}}}},"类":{"docs":{},"库":{"docs":{"QuickStart/Installation.html":{"ref":"QuickStart/Installation.html","tf":0.05555555555555555}}}}}},"快":{"docs":{},"速":{"docs":{},"开":{"docs":{},"始":{"docs":{"./":{"ref":"./","tf":0.00510204081632653},"QuickStart/":{"ref":"QuickStart/","tf":10.333333333333334}}}}}},"截":{"docs":{},"图":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}},"所":{"docs":{},"有":{"docs":{},"爬":{"docs":{},"虫":{"docs":{},"需":{"docs":{},"要":{"docs":{},"在":{"docs":{},"抓":{"docs":{},"取":{"docs":{},"前":{"docs":{},"被":{"docs":{},"部":{"docs":{},"署":{"docs":{},"当":{"docs":{},"相":{"docs":{},"应":{"docs":{},"当":{"docs":{},"节":{"docs":{},"点":{"docs":{},"中":{"docs":{},"。":{"docs":{},"在":{"docs":{},"\"":{"docs":{},"爬":{"docs":{},"虫":{"docs":{},"详":{"docs":{},"情":{"docs":{},"\"":{"docs":{},"页":{"docs":{},"面":{"docs":{},"点":{"docs":{},"击":{"docs":{},"\"":{"docs":{},"d":{"docs":{},"e":{"docs":{},"p":{"docs":{},"l":{"docs":{},"o":{"docs":{},"y":{"docs":{},"\"":{"docs":{},"按":{"docs":{},"钮":{"docs":{},",":{"docs":{},"爬":{"docs":{},"虫":{"docs":{},"将":{"docs":{},"被":{"docs":{},"部":{"docs":{},"署":{"docs":{},"到":{"docs":{},"所":{"docs":{},"有":{"docs":{},"有":{"docs":{},"效":{"docs":{},"到":{"docs":{},"节":{"docs":{},"点":{"docs":{},"中":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.00510204081632653},"Concept/Spider.html":{"ref":"Concept/Spider.html","tf":0.14285714285714285}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"在":{"docs":{},"运":{"docs":{},"行":{"docs":{},"前":{"docs":{},"需":{"docs":{},"要":{"docs":{},"被":{"docs":{},"部":{"docs":{},"署":{"docs":{},"当":{"docs":{},"相":{"docs":{},"应":{"docs":{},"当":{"docs":{},"节":{"docs":{},"点":{"docs":{},"中":{"docs":{},"。":{"docs":{"Concept/Deploy.html":{"ref":"Concept/Deploy.html","tf":0.3333333333333333}}}}}}}}}}}}}}}}}}}}}}},"抓":{"docs":{},"取":{"docs":{},"结":{"docs":{},"果":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}},"文":{"docs":{},"件":{"docs":{},"管":{"docs":{},"理":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}},"更":{"docs":{},"多":{"docs":{},"爬":{"docs":{},"虫":{"docs":{},"例":{"docs":{},"子":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}},"架":{"docs":{},"构":{"docs":{"./":{"ref":"./","tf":0.00510204081632653},"Architecture/":{"ref":"Architecture/","tf":11}}}},"查":{"docs":{},"看":{"docs":{},"演":{"docs":{},"示":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}},"框":{"docs":{},"架":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}},"概":{"docs":{},"览":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}},"念":{"docs":{"Concept/":{"ref":"Concept/","tf":11}}}},"爬":{"docs":{},"虫":{"docs":{"./":{"ref":"./","tf":0.00510204081632653},"Concept/Spider.html":{"ref":"Concept/Spider.html","tf":10.142857142857142}},"列":{"docs":{},"表":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}},"详":{"docs":{},"情":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}},"源":{"docs":{},"码":{"docs":{},"根":{"docs":{},"目":{"docs":{},"录":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.010101010101010102}}}}}}},"部":{"docs":{},"署":{"docs":{},"根":{"docs":{},"目":{"docs":{},"录":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.010101010101010102}}}}}}}}},"登":{"docs":{},"录":{"docs":{},"和":{"docs":{},"用":{"docs":{},"户":{"docs":{},"管":{"docs":{},"理":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}},"简":{"docs":{},"介":{"docs":{"./":{"ref":"./","tf":10}}}},"管":{"docs":{},"理":{"docs":{},"平":{"docs":{},"台":{"docs":{"./":{"ref":"./","tf":0.02040816326530612}}}}}},"类":{"docs":{},"型":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}},"网":{"docs":{},"络":{"docs":{},"服":{"docs":{},"务":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}},"自":{"docs":{},"动":{"docs":{},"发":{"docs":{},"现":{"docs":{"./":{"ref":"./","tf":0.00510204081632653},"Concept/Spider.html":{"ref":"Concept/Spider.html","tf":0.14285714285714285}}}}}},"节":{"docs":{},"点":{"docs":{"./":{"ref":"./","tf":0.00510204081632653},"Concept/Node.html":{"ref":"Concept/Node.html","tf":10.5}},"其":{"docs":{},"实":{"docs":{},"就":{"docs":{},"是":{"docs":{},"c":{"docs":{},"e":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},"y":{"docs":{},"中":{"docs":{},"的":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"。":{"docs":{},"一":{"docs":{},"个":{"docs":{},"节":{"docs":{},"点":{"docs":{},"运":{"docs":{},"行":{"docs":{},"时":{"docs":{},"会":{"docs":{},"连":{"docs":{},"接":{"docs":{},"到":{"docs":{},"一":{"docs":{},"个":{"docs":{},"任":{"docs":{},"务":{"docs":{},"队":{"docs":{},"列":{"docs":{},"(":{"docs":{},"例":{"docs":{},"如":{"docs":{},"r":{"docs":{},"e":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},")":{"docs":{},"来":{"docs":{},"接":{"docs":{},"收":{"docs":{},"和":{"docs":{},"运":{"docs":{},"行":{"docs":{},"任":{"docs":{},"务":{"docs":{},"。":{"docs":{},"所":{"docs":{},"有":{"docs":{},"爬":{"docs":{},"虫":{"docs":{},"需":{"docs":{},"要":{"docs":{},"在":{"docs":{},"运":{"docs":{},"行":{"docs":{},"时":{"docs":{},"被":{"docs":{},"部":{"docs":{},"署":{"docs":{},"到":{"docs":{},"节":{"docs":{},"点":{"docs":{},"上":{"docs":{},",":{"docs":{},"用":{"docs":{},"户":{"docs":{},"在":{"docs":{},"部":{"docs":{},"署":{"docs":{},"前":{"docs":{},"需":{"docs":{},"要":{"docs":{},"定":{"docs":{},"义":{"docs":{},"节":{"docs":{},"点":{"docs":{},"的":{"docs":{},"i":{"docs":{},"p":{"docs":{},"地":{"docs":{},"址":{"docs":{},"和":{"docs":{},"端":{"docs":{},"口":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.00510204081632653},"Concept/Node.html":{"ref":"Concept/Node.html","tf":0.5}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"监":{"docs":{},"控":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}},"表":{"docs":{},"格":{"docs":{},"过":{"docs":{},"滤":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}},"要":{"docs":{},"求":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}},"请":{"docs":{},"更":{"docs":{},"改":{"docs":{},"配":{"docs":{},"置":{"docs":{},"文":{"docs":{},"件":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{},".":{"docs":{},"p":{"docs":{},"y":{"docs":{},",":{"docs":{},"配":{"docs":{},"置":{"docs":{},"a":{"docs":{},"p":{"docs":{},"i":{"docs":{},"和":{"docs":{},"数":{"docs":{},"据":{"docs":{},"库":{"docs":{},"连":{"docs":{},"接":{"docs":{},".":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"运":{"docs":{},"行":{"docs":{"QuickStart/":{"ref":"QuickStart/","tf":0.3333333333333333},"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":10.01010101010101}},"前":{"docs":{},"端":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}},"爬":{"docs":{},"虫":{"docs":{"./":{"ref":"./","tf":0.00510204081632653},"Concept/Spider.html":{"ref":"Concept/Spider.html","tf":0.14285714285714285}}}}}},"这":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"f":{"docs":{},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"k":{"docs":{},"应":{"docs":{},"用":{"docs":{},",":{"docs":{},"提":{"docs":{},"供":{"docs":{},"了":{"docs":{},"必":{"docs":{},"要":{"docs":{},"的":{"docs":{},"a":{"docs":{},"p":{"docs":{},"i":{"docs":{},"来":{"docs":{},"支":{"docs":{},"持":{"docs":{},"常":{"docs":{},"规":{"docs":{},"操":{"docs":{},"作":{"docs":{},",":{"docs":{},"例":{"docs":{},"如":{"docs":{},"c":{"docs":{},"r":{"docs":{},"u":{"docs":{},"d":{"docs":{},"、":{"docs":{},"爬":{"docs":{},"虫":{"docs":{},"部":{"docs":{},"署":{"docs":{},"以":{"docs":{},"及":{"docs":{},"任":{"docs":{},"务":{"docs":{},"运":{"docs":{},"行":{"docs":{},"。":{"docs":{},"每":{"docs":{},"一":{"docs":{},"个":{"docs":{},"节":{"docs":{},"点":{"docs":{},"需":{"docs":{},"要":{"docs":{},"启":{"docs":{},"动":{"docs":{},"f":{"docs":{},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"k":{"docs":{},"应":{"docs":{},"用":{"docs":{},"来":{"docs":{},"支":{"docs":{},"持":{"docs":{},"爬":{"docs":{},"虫":{"docs":{},"部":{"docs":{},"署":{"docs":{},"。":{"docs":{},"运":{"docs":{},"行":{"docs":{},"p":{"docs":{},"y":{"docs":{},"t":{"docs":{},"h":{"docs":{},"o":{"docs":{},"n":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"部":{"docs":{},"署":{"docs":{"Concept/Deploy.html":{"ref":"Concept/Deploy.html","tf":10.333333333333334}},"爬":{"docs":{},"虫":{"docs":{"./":{"ref":"./","tf":0.00510204081632653},"Concept/Spider.html":{"ref":"Concept/Spider.html","tf":0.14285714285714285}},"之":{"docs":{},"后":{"docs":{},",":{"docs":{},"你":{"docs":{},"可":{"docs":{},"以":{"docs":{},"在":{"docs":{},"\"":{"docs":{},"爬":{"docs":{},"虫":{"docs":{},"详":{"docs":{},"情":{"docs":{},"\"":{"docs":{},"页":{"docs":{},"面":{"docs":{},"点":{"docs":{},"击":{"docs":{},"\"":{"docs":{},"r":{"docs":{},"u":{"docs":{},"n":{"docs":{},"\"":{"docs":{},"按":{"docs":{},"钮":{"docs":{},"来":{"docs":{},"启":{"docs":{},"动":{"docs":{},"爬":{"docs":{},"虫":{"docs":{},"。":{"docs":{},"一":{"docs":{},"个":{"docs":{},"爬":{"docs":{},"虫":{"docs":{},"任":{"docs":{},"务":{"docs":{},"将":{"docs":{},"被":{"docs":{},"触":{"docs":{},"发":{"docs":{},",":{"docs":{},"你":{"docs":{},"可":{"docs":{},"以":{"docs":{},"在":{"docs":{},"任":{"docs":{},"务":{"docs":{},"列":{"docs":{},"表":{"docs":{},"页":{"docs":{},"面":{"docs":{},"中":{"docs":{},"看":{"docs":{},"到":{"docs":{},"这":{"docs":{},"个":{"docs":{},"任":{"docs":{},"务":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.00510204081632653},"Concept/Spider.html":{"ref":"Concept/Spider.html","tf":0.14285714285714285}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"时":{"docs":{},",":{"docs":{},"爬":{"docs":{},"虫":{"docs":{},"会":{"docs":{},"被":{"docs":{},"打":{"docs":{},"包":{"docs":{},"到":{"docs":{},"相":{"docs":{},"应":{"docs":{},"的":{"docs":{},"目":{"docs":{},"录":{"docs":{},"中":{"docs":{},",":{"docs":{},"方":{"docs":{},"便":{"docs":{},"环":{"docs":{},"境":{"docs":{},"隔":{"docs":{},"离":{"docs":{},",":{"docs":{},"开":{"docs":{},"发":{"docs":{},"环":{"docs":{},"境":{"docs":{},"的":{"docs":{},"爬":{"docs":{},"虫":{"docs":{},"和":{"docs":{},"生":{"docs":{},"产":{"docs":{},"环":{"docs":{},"境":{"docs":{},"的":{"docs":{},"爬":{"docs":{},"虫":{"docs":{},"需":{"docs":{},"要":{"docs":{},"打":{"docs":{},"包":{"docs":{},"部":{"docs":{},"署":{"docs":{},"来":{"docs":{},"实":{"docs":{},"现":{"docs":{},"隔":{"docs":{},"离":{"docs":{},"。":{"docs":{"Concept/Deploy.html":{"ref":"Concept/Deploy.html","tf":0.3333333333333333}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"配":{"docs":{},"置":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}},"重":{"docs":{},"跑":{"docs":{},"任":{"docs":{},"务":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}},"限":{"docs":{},"制":{"docs":{},"以":{"docs":{},"及":{"docs":{},"有":{"docs":{},"一":{"docs":{},"些":{"docs":{},"爬":{"docs":{},"虫":{"docs":{},"管":{"docs":{},"理":{"docs":{},"框":{"docs":{},"架":{"docs":{},"了":{"docs":{},",":{"docs":{},"因":{"docs":{},"此":{"docs":{},"为":{"docs":{},"啥":{"docs":{},"还":{"docs":{},"要":{"docs":{},"用":{"docs":{},"c":{"docs":{},"r":{"docs":{},"a":{"docs":{},"w":{"docs":{},"l":{"docs":{},"a":{"docs":{},"b":{"docs":{},"?":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"首":{"docs":{},"页":{"docs":{"./":{"ref":"./","tf":0.00510204081632653}}}},"h":{"docs":{},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{},"s":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"g":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"u":{"docs":{},"b":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"/":{"docs":{},"t":{"docs":{},"i":{"docs":{},"k":{"docs":{},"a":{"docs":{},"z":{"docs":{},"y":{"docs":{},"q":{"docs":{},"/":{"docs":{},"c":{"docs":{},"r":{"docs":{},"a":{"docs":{},"w":{"docs":{},"l":{"docs":{},"a":{"docs":{},"b":{"docs":{"QuickStart/Installation.html":{"ref":"QuickStart/Installation.html","tf":0.05555555555555555}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"最":{"docs":{},"快":{"docs":{},"安":{"docs":{},"装":{"docs":{},"c":{"docs":{},"r":{"docs":{},"a":{"docs":{},"w":{"docs":{},"l":{"docs":{},"a":{"docs":{},"b":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{},"是":{"docs":{},"克":{"docs":{},"隆":{"docs":{},"一":{"docs":{},"份":{"docs":{},"代":{"docs":{},"码":{"docs":{},"到":{"docs":{},"本":{"docs":{},"地":{"docs":{"QuickStart/Installation.html":{"ref":"QuickStart/Installation.html","tf":0.05555555555555555}}}}}}}}}}}}}}}}}}}}}}}}}},"b":{"docs":{},"r":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"_":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.010101010101010102}}}}}}}}}}}},"v":{"docs":{},"a":{"docs":{},"r":{"docs":{},"i":{"docs":{},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.050505050505050504}}}}}}}}},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.010101010101010102}}}}}}}},"{":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.010101010101010102}}},"}":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.010101010101010102}}},"临":{"docs":{},"时":{"docs":{},"文":{"docs":{},"件":{"docs":{},"目":{"docs":{},"录":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.010101010101010102}}}}}}}},"日":{"docs":{},"志":{"docs":{},"目":{"docs":{},"录":{"docs":{"QuickStart/Run.html":{"ref":"QuickStart/Run.html","tf":0.010101010101010102}}}}}}},"length":244},"corpusTokens":["#","'/tmp'","'/users/yeqing/projects/crawlab/spiders'","'/var/crawlab'","'/var/logs/crawlab'","'127.0.0.1'","'192.168.99.100'","'asia/shanghai'","'crawlab_test'","'crawlab_test',","'database':","'http://localhost:5555/api'","'mongodb://192.168.99.100:27017/'","'redis://192.168.99.100:6379/0'","'taskmeta_collection':","'tasks_celery',","'test'","(中文)","./bin/run_app.py来启动应用。","./bin/run_flower.pi","./bin/run_worker.pi","27017","8000","=","[","[x]","]","admin的单页应用。其中重用了很多el","app","app.pi","app或python","app,可以直接启动,或者用gunicorn代替。","broker_url","cd","celeri","celery_enable_utc","celery_mongodb_backend_set","celery_result_backend","celery_timezon","celery后台url","class","clone","col","col_nam","col_name:","crawlab","crawlab使用起来很方便,也很通用,可以适用于几乎任何主流语言和框架。它还有一个精美的前端界面,让用户可以方便的管理和运行爬虫。","crawlab的架构跟celery非常相似,但是加入了包括前端、爬虫、flower在内的额外模块,以支持爬虫管理的功能。","databas","db","db[col_name]","debug","def","demo","document","element","english","exampl","flask","flask_host","flask_port","flower","flower_api_endpoint","flower服务地址","frontend","gerapi","git","https://github.com/tikazyq/crawlab","import","instal","item","item,","item['task_id']","juejinpipeline(object):","manage.pi","mongo","mongo[mongo_db]","mongo_db","mongo_host","mongo_port","mongocli","mongoclient(host=mongo_host,","mongodb","mysql数据库支持","n","n/a","npm","os","os.environ.get('crawlab_collection')","os.environ.get('crawlab_task_id')","pip","pipelin","port=mongo_port)","process_item(self,","project","project_deploy_file_fold","project_logs_fold","project_source_file_fold","project_tmp_fold","pymongo","python","python3","r","redi","requirements.txt","return","run","scrapi","scrapyd","scrapydweb","self.col.save(item)","serv","spider):","spiderkeep","todo","true","ui的控件来支持相应的展示。","variabl","worker","y","{","}","与其他框架比较","与其他框架的集成","中间者","中间者url,连接redi","中间者跟celery中定义的一样,作为运行异步任务的队列。","临时文件目录","以下是crawlab跟scrapy集成的例子,利用了crawlab传过来的task_id和collection_name。","任务","任务数据统计","任务是利用python的subprocess模块中的popen来实现的。任务id将以环境变量crawlab_task_id的形式存在于爬虫任务运行的进程中,并以此来关联抓取数据。","任务被触发并被节点执行。用户可以在任务详情页面中看到任务到状态、日志和抓取结果。","任务详情","依赖于scrapyd","全局搜索","分布式","前端","前端其实就是一个基于vue","后台应用","后端","启动flower服务","启动worker","启动前端服务器。","启动后端api","启动后端api,也就是一个flask","启动本地worker。在其他节点中如果想只是想执行任务的话,只需要启动这一个服务就可以了。","因为很多现有当平台都依赖于scrapyd,限制了爬虫的编程语言以及框架,爬虫工程师只能用scrapy和python。当然,scrapy是非常优秀的爬虫框架,但是它不能做一切事情。","在config.py文件中,修改变量project_source_file_folder作为爬虫项目所在的目录。crawlab后台程序会自动发现这些爬虫项目并储存到数据库中。是不是很方便?","在你的爬虫程序中,你需要将crawlab_task_id的值以task_id作为可以存入数据库中。这样crawlab就直到如何将爬虫任务与抓取数据关联起来了。当前,crawlab只支持mongodb。","在运行之前需要对crawlab进行一些配置,配置文件为config.py。","基于celery的爬虫分布式爬虫管理平台,支持多种编程语言以及多种爬虫框架.","多语言支持","安装","安装前台类库","安装后台类库","安装类库","快速开始","截图","所有爬虫在运行前需要被部署当相应当节点中。","所有爬虫需要在抓取前被部署当相应当节点中。在\"爬虫详情\"页面点击\"deploy\"按钮,爬虫将被部署到所有有效到节点中。","抓取结果","文件管理","日志目录","更多爬虫例子","最快安装crawlab的方式是克隆一份代码到本地","架构","查看演示","框架","概念","概览","爬虫","爬虫列表","爬虫源码根目录","爬虫详情","爬虫部署根目录","登录和用户管理","简介","管理平台","类型","网络服务","自动发现","节点","节点其实就是celery中的worker。一个节点运行时会连接到一个任务队列(例如redis)来接收和运行任务。所有爬虫需要在运行时被部署到节点上,用户在部署前需要定义节点的ip地址和端口。","节点监控","表格过滤","要求","请更改配置文件config.py,配置api和数据库连接.","运行","运行前端","运行爬虫","这是一个flask应用,提供了必要的api来支持常规操作,例如crud、爬虫部署以及任务运行。每一个节点需要启动flask应用来支持爬虫部署。运行python","部署","部署时,爬虫会被打包到相应的目录中,方便环境隔离,开发环境的爬虫和生产环境的爬虫需要打包部署来实现隔离。","部署爬虫","部署爬虫之后,你可以在\"爬虫详情\"页面点击\"run\"按钮来启动爬虫。一个爬虫任务将被触发,你可以在任务列表页面中看到这个任务。","配置","重跑任务","限制以及有一些爬虫管理框架了,因此为啥还要用crawlab?","首页"],"pipeline":["stopWordFilter","stemmer"]},"store":{"./":{"url":"./","title":"简介","keywords":"","body":"Crawlab\n基于Celery的爬虫分布式爬虫管理平台,支持多种编程语言以及多种爬虫框架.\n查看演示 Demo\nEnglish Documentation\n要求\n\nPython3\nMongoDB\nRedis\n\n安装\n# 安装后台类库\npip install -r requirements.txt\n\n# 安装前台类库\ncd frontend\nnpm install\n\n配置\n请更改配置文件config.py,配置API和数据库连接.\n快速开始\n# 启动后端API\npython app.py\n\n# 启动Flower服务\npython ./bin/run_flower.py\n\n# 启动worker\npython ./bin/run_worker.py\n\n# 运行前端\ncd frontend\nnpm run serve\n\n截图\n首页\n\n爬虫列表\n\n爬虫详情 - 概览\n\n任务详情 - 抓取结果\n\n架构\nCrawlab的架构跟Celery非常相似,但是加入了包括前端、爬虫、Flower在内的额外模块,以支持爬虫管理的功能。\n\n节点\n节点其实就是Celery中的Worker。一个节点运行时会连接到一个任务队列(例如Redis)来接收和运行任务。所有爬虫需要在运行时被部署到节点上,用户在部署前需要定义节点的IP地址和端口。\n爬虫\n自动发现\n在config.py文件中,修改变量PROJECT_SOURCE_FILE_FOLDER作为爬虫项目所在的目录。Crawlab后台程序会自动发现这些爬虫项目并储存到数据库中。是不是很方便?\n部署爬虫\n所有爬虫需要在抓取前被部署当相应当节点中。在\"爬虫详情\"页面点击\"Deploy\"按钮,爬虫将被部署到所有有效到节点中。\n运行爬虫\n部署爬虫之后,你可以在\"爬虫详情\"页面点击\"Run\"按钮来启动爬虫。一个爬虫任务将被触发,你可以在任务列表页面中看到这个任务。\n任务\n任务被触发并被节点执行。用户可以在任务详情页面中看到任务到状态、日志和抓取结果。\n后台应用\n这是一个Flask应用,提供了必要的API来支持常规操作,例如CRUD、爬虫部署以及任务运行。每一个节点需要启动Flask应用来支持爬虫部署。运行python manage.py app或python ./bin/run_app.py来启动应用。\n中间者\n中间者跟Celery中定义的一样,作为运行异步任务的队列。\n前端\n前端其实就是一个基于Vue-Element-Admin的单页应用。其中重用了很多Element-UI的控件来支持相应的展示。\n与其他框架的集成\n任务是利用python的subprocess模块中的Popen来实现的。任务ID将以环境变量CRAWLAB_TASK_ID的形式存在于爬虫任务运行的进程中,并以此来关联抓取数据。\n在你的爬虫程序中,你需要将CRAWLAB_TASK_ID的值以task_id作为可以存入数据库中。这样Crawlab就直到如何将爬虫任务与抓取数据关联起来了。当前,Crawlab只支持MongoDB。\nScrapy\n以下是Crawlab跟Scrapy集成的例子,利用了Crawlab传过来的task_id和collection_name。\nimport os\nfrom pymongo import MongoClient\n\nMONGO_HOST = '192.168.99.100'\nMONGO_PORT = 27017\nMONGO_DB = 'crawlab_test'\n\n# scrapy example in the pipeline\nclass JuejinPipeline(object):\n mongo = MongoClient(host=MONGO_HOST, port=MONGO_PORT)\n db = mongo[MONGO_DB]\n col_name = os.environ.get('CRAWLAB_COLLECTION')\n if not col_name:\n col_name = 'test'\n col = db[col_name]\n\n def process_item(self, item, spider):\n item['task_id'] = os.environ.get('CRAWLAB_TASK_ID')\n self.col.save(item)\n return item\n\n与其他框架比较\n限制以及有一些爬虫管理框架了,因此为啥还要用Crawlab?\n因为很多现有当平台都依赖于Scrapyd,限制了爬虫的编程语言以及框架,爬虫工程师只能用scrapy和python。当然,scrapy是非常优秀的爬虫框架,但是它不能做一切事情。\nCrawlab使用起来很方便,也很通用,可以适用于几乎任何主流语言和框架。它还有一个精美的前端界面,让用户可以方便的管理和运行爬虫。\n\n\n\n框架\n类型\n分布式\n前端\n依赖于Scrapyd\n\n\n\n\nCrawlab\n管理平台\nY\nY\nN\n\n\nGerapy\n管理平台\nY\nY\nY\n\n\nSpiderKeeper\n管理平台\nY\nY\nY\n\n\nScrapydWeb\n管理平台\nY\nY\nY\n\n\nScrapyd\n网络服务\nY\nN\nN/A\n\n\n\nTODOs\n后端\n\n[ ] 文件管理\n[ ] MySQL数据库支持\n[ ] 重跑任务\n[ ] 节点监控\n[ ] 更多爬虫例子\n\n前端\n\n[ ] 任务数据统计\n[ ] 表格过滤\n[x] 多语言支持 (中文)\n[ ] 登录和用户管理\n[ ] 全局搜索\n\n"},"QuickStart/":{"url":"QuickStart/","title":"快速开始","keywords":"","body":"快速开始\n\n安装\n运行\n\n"},"QuickStart/Installation.html":{"url":"QuickStart/Installation.html","title":"安装","keywords":"","body":"安装\n最快安装Crawlab的方式是克隆一份代码到本地\ngit clone https://github.com/tikazyq/crawlab\n\n安装类库\n# 安装后台类库\npip install -r requirements.txt\n\n# 安装前台类库\ncd frontend\nnpm install\n\n"},"QuickStart/Run.html":{"url":"QuickStart/Run.html","title":"运行","keywords":"","body":"运行\n在运行之前需要对Crawlab进行一些配置,配置文件为config.py。\n# project variables\nPROJECT_SOURCE_FILE_FOLDER = '/Users/yeqing/projects/crawlab/spiders' # 爬虫源码根目录\nPROJECT_DEPLOY_FILE_FOLDER = '/var/crawlab' # 爬虫部署根目录\nPROJECT_LOGS_FOLDER = '/var/logs/crawlab' # 日志目录\nPROJECT_TMP_FOLDER = '/tmp' # 临时文件目录\n\n# celery variables\nBROKER_URL = 'redis://192.168.99.100:6379/0' # 中间者URL,连接redis\nCELERY_RESULT_BACKEND = 'mongodb://192.168.99.100:27017/' # CELERY后台URL\nCELERY_MONGODB_BACKEND_SETTINGS = {\n 'database': 'crawlab_test',\n 'taskmeta_collection': 'tasks_celery',\n}\nCELERY_TIMEZONE = 'Asia/Shanghai'\nCELERY_ENABLE_UTC = True\n\n# flower variables\nFLOWER_API_ENDPOINT = 'http://localhost:5555/api' # Flower服务地址\n\n# database variables\nMONGO_HOST = '192.168.99.100'\nMONGO_PORT = 27017\nMONGO_DB = 'crawlab_test'\n\n# flask variables\nDEBUG = True\nFLASK_HOST = '127.0.0.1'\nFLASK_PORT = 8000\n\n启动后端API,也就是一个Flask App,可以直接启动,或者用gunicorn代替。\npython manage.py app\n\n启动本地Worker。在其他节点中如果想只是想执行任务的话,只需要启动这一个服务就可以了。\npython manage.py worker\n\n启动前端服务器。\ncd frontend\nnpm run serve\n\n"},"Concept/":{"url":"Concept/","title":"概念","keywords":"","body":"概念\n"},"Concept/Node.html":{"url":"Concept/Node.html","title":"节点","keywords":"","body":"节点\n节点其实就是Celery中的Worker。一个节点运行时会连接到一个任务队列(例如Redis)来接收和运行任务。所有爬虫需要在运行时被部署到节点上,用户在部署前需要定义节点的IP地址和端口。\n"},"Concept/Spider.html":{"url":"Concept/Spider.html","title":"爬虫","keywords":"","body":"爬虫\n自动发现\n在config.py文件中,修改变量PROJECT_SOURCE_FILE_FOLDER作为爬虫项目所在的目录。Crawlab后台程序会自动发现这些爬虫项目并储存到数据库中。是不是很方便?\n部署爬虫\n所有爬虫需要在抓取前被部署当相应当节点中。在\"爬虫详情\"页面点击\"Deploy\"按钮,爬虫将被部署到所有有效到节点中。\n运行爬虫\n部署爬虫之后,你可以在\"爬虫详情\"页面点击\"Run\"按钮来启动爬虫。一个爬虫任务将被触发,你可以在任务列表页面中看到这个任务。\n"},"Concept/Task.html":{"url":"Concept/Task.html","title":"任务","keywords":"","body":"任务\n任务被触发并被节点执行。用户可以在任务详情页面中看到任务到状态、日志和抓取结果。\n"},"Concept/Deploy.html":{"url":"Concept/Deploy.html","title":"部署","keywords":"","body":"部署\n所有爬虫在运行前需要被部署当相应当节点中。\n部署时,爬虫会被打包到相应的目录中,方便环境隔离,开发环境的爬虫和生产环境的爬虫需要打包部署来实现隔离。\n"},"Architecture/":{"url":"Architecture/","title":"架构","keywords":"","body":"架构\n"},"Architecture/Celery.html":{"url":"Architecture/Celery.html","title":"Celery","keywords":"","body":"Celery\n"},"Architecture/App.html":{"url":"Architecture/App.html","title":"App","keywords":"","body":"App\n"},"Examples/":{"url":"Examples/","title":"Examples","keywords":"","body":"Examples\n"}}} \ No newline at end of file diff --git a/gitbook/QuickStart/Run.md b/gitbook/QuickStart/Run.md index 623261fe..bd6b9ba9 100644 --- a/gitbook/QuickStart/Run.md +++ b/gitbook/QuickStart/Run.md @@ -36,24 +36,18 @@ FLASK_PORT = 8000 启动后端API,也就是一个Flask App,可以直接启动,或者用gunicorn代替。 ```bash -python app.py -``` - -启动Flower服务(抱歉目前集成Flower到App服务中,必须单独启动来获取节点信息,后面的版本不需要这个操作)。 - -```bash -python ./bin/run_flower.py +python manage.py app ``` 启动本地Worker。在其他节点中如果想只是想执行任务的话,只需要启动这一个服务就可以了。 ```bash -python ./bin/run_worker.py +python manage.py worker ``` 启动前端服务器。 ```bash -cd ../frontend +cd frontend npm run serve ```