文章采集api
匯總:爬取簡(jiǎn)書(shū)全站文章并生成 API(四)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 182 次瀏覽 ? 2020-11-23 12:04
簡(jiǎn)書(shū)
通過(guò)前面的介紹,可以說(shuō)這個(gè)小項目已經(jīng)基本完成。當然,剩下要做的就是代碼重構,功能的不斷改進(jìn)和錯誤修復。最后,部署是聯(lián)機的。如第一節所述,將有兩種部署和聯(lián)機方式??。本節首先介紹第一種方法,使用nginx + uwsgi + django +超級用戶(hù)進(jìn)行環(huán)境部署。
nginx + uwsgi + django +環(huán)境部署主管
我使用Django已有一段時(shí)間了,但是它一直在本地進(jìn)行測試并且尚未部署。我認為根據其他人博客的教程進(jìn)行部署應該很容易,但是在閱讀了十多個(gè)有關(guān)百度和Google的教程之后,部署仍然沒(méi)有成功。我真的很失望。最后,在其他人的幫助下完成了部署,因此我進(jìn)行了部署。該過(guò)程失敗了,包括部署過(guò)程中遇到的許多問(wèn)題。在安裝之前,讓我向大家介紹基本知識。
以下安裝環(huán)境為CentOS7 x86_64 + python2.7.10 + Django1.9,CentOS 6也適用。
1.安裝
首先,安裝環(huán)境,除了nginx以外,其他兩個(gè)可以通過(guò)pip安裝:
# pip install django
# pip install uwsgi
可以使用yum直接安裝nginx,有關(guān)編譯和安裝,請參閱編譯和安裝nginx。
# yum install nginx -y
創(chuàng )建Django應用程序。由于使用了nginx,因此最好將應用程序放置在nginx根目錄中:
# django-admin startproject jianshu_api
# cd jianshu_api/
# django-admin startapp jianshu
然后在配置文件settings.py中設置要連接的數據庫,將DEBUG = True更改為DEBUG = False,設置* ALLOWED_HOSTS = [''] **,并在末尾添加以下配置:
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
然后運行并自動(dòng)生成一個(gè)靜態(tài)目錄:
# python manage.py collectstatic
或直接將靜態(tài)文件復制到相應目錄:
# cp -r /root/.pyenv/versions/2.7.10/lib/python2.7/site-packages/rest_framework /usr/html/jianshu/static/
# cp -r /root/.pyenv/versions/2.7.10/lib/python2.7/site-packages/django/contrib/admin/static/* /usr/html/jianshu/static/
如果未正確設置,則在訪(fǎng)問(wèn)網(wǎng)站時(shí)無(wú)法加載相應的靜態(tài)文件,如下所示:
無(wú)法加載靜態(tài)文件
2.配置服務(wù)首先配置nginx:
server {
listen 8080;
#server_name jianshuapi ;
access_log /var/log/nginx/api.log;
# app 根目錄
root /usr/html/jianshu;
index index.py index.htm;
location / {
# nginx 收到請求會(huì )就轉發(fā)到 9001 端口
uwsgi_pass 127.0.0.1:9001;
include /etc/nginx/uwsgi_params;
}
#設定靜態(tài)文件所在目錄
location ^~ /static {
alias /usr/html/jianshu/static;
}
}
檢查語(yǔ)法并重新啟動(dòng):
# nginx -t
# nginx -s reload
配置uWSGi:
首先為uWSGI操作創(chuàng )建配置文件jianshu.ini:
# mkdir -p /etc/uwsgi && cd /etc/uwsgi
[uwsgi]
chdir = /usr/html/jianshu
socket = 127.0.0.1:9001
master = true
uid = root
wsgi-file = /usr/html/jianshu/jianshu_api/wsgi.py
processes = 2
threads = 4
chmod-socket = 666
chown-socket = root:nginx
vacuum = true
測試uWSGi是否可以正常工作:
# uwsgi /etc/uwsgi/jianshu.ini
然后在命令行中訪(fǎng)問(wèn):8080 /:
api測試
現在您可以看到部署已成功。但是通常我們使用主管來(lái)管理
uwsgi和nginx,因此操作起來(lái)更加方便。
3.使用主管
有關(guān)主管的詳細用法,請參閱:使用主管來(lái)管理流程。
首次安裝主管:
# pip install supervisor
然后生成配置文件:
# echo_supervisord_conf > /etc/supervisord.conf
開(kāi)始監督:
# supervisord
提供uwsgi配置文件,打開(kāi)/etc/supervisord.conf并在底部添加:
[program:jianshu] ; 添加 uwsgi 的配置示例
command=/root/.pyenv/shims/uwsgi --ini /etc/uwsgi/jianshu.ini
directory=/usr/html/jianshu/
stdout_logfile=/var/log/supervisor/%(program_name)s_access.log
stderr_logfile=/var/log/supervisor/%(program_name)s_err.log
startsecs=10
stopwaitsecs=0
autostart=true
autorestart=true
[program:nginx] ;nginx 配置示例
directory=/
command=/usr/sbin/nginx -c /etc/nginx/nginx.conf
user=root
stdout_logfile=/var/log/supervisor/%(program_name)s_access.log
stderr_logfile=/var/log/supervisor/%(program_name)s_err.log
autostart=true
autorestart=true
startsecs=10
然后重新加載主管配置:
# supervisorctl reload
查看主管的狀態(tài):
# supervisorctl status
jianshu RUNNING pid 19466, uptime 0:07:08
nginx RUNNING pid 19490, uptime 0:07:05
再次訪(fǎng)問(wèn)api界面:8080/。
Jianshu API
-終于完成了部署,非常高興,歡迎每個(gè)人使用該API,但不要隨意使用它,畢竟服務(wù)器資源有限!
-下一節將介紹如何使用docker進(jìn)行部署。 查看全部
抓取Jianshu整個(gè)網(wǎng)站文章并生成API(四)

簡(jiǎn)書(shū)
通過(guò)前面的介紹,可以說(shuō)這個(gè)小項目已經(jīng)基本完成。當然,剩下要做的就是代碼重構,功能的不斷改進(jìn)和錯誤修復。最后,部署是聯(lián)機的。如第一節所述,將有兩種部署和聯(lián)機方式??。本節首先介紹第一種方法,使用nginx + uwsgi + django +超級用戶(hù)進(jìn)行環(huán)境部署。
nginx + uwsgi + django +環(huán)境部署主管
我使用Django已有一段時(shí)間了,但是它一直在本地進(jìn)行測試并且尚未部署。我認為根據其他人博客的教程進(jìn)行部署應該很容易,但是在閱讀了十多個(gè)有關(guān)百度和Google的教程之后,部署仍然沒(méi)有成功。我真的很失望。最后,在其他人的幫助下完成了部署,因此我進(jìn)行了部署。該過(guò)程失敗了,包括部署過(guò)程中遇到的許多問(wèn)題。在安裝之前,讓我向大家介紹基本知識。
以下安裝環(huán)境為CentOS7 x86_64 + python2.7.10 + Django1.9,CentOS 6也適用。
1.安裝
首先,安裝環(huán)境,除了nginx以外,其他兩個(gè)可以通過(guò)pip安裝:
# pip install django
# pip install uwsgi
可以使用yum直接安裝nginx,有關(guān)編譯和安裝,請參閱編譯和安裝nginx。
# yum install nginx -y
創(chuàng )建Django應用程序。由于使用了nginx,因此最好將應用程序放置在nginx根目錄中:
# django-admin startproject jianshu_api
# cd jianshu_api/
# django-admin startapp jianshu
然后在配置文件settings.py中設置要連接的數據庫,將DEBUG = True更改為DEBUG = False,設置* ALLOWED_HOSTS = [''] **,并在末尾添加以下配置:
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
然后運行并自動(dòng)生成一個(gè)靜態(tài)目錄:
# python manage.py collectstatic
或直接將靜態(tài)文件復制到相應目錄:
# cp -r /root/.pyenv/versions/2.7.10/lib/python2.7/site-packages/rest_framework /usr/html/jianshu/static/
# cp -r /root/.pyenv/versions/2.7.10/lib/python2.7/site-packages/django/contrib/admin/static/* /usr/html/jianshu/static/
如果未正確設置,則在訪(fǎng)問(wèn)網(wǎng)站時(shí)無(wú)法加載相應的靜態(tài)文件,如下所示:

無(wú)法加載靜態(tài)文件
2.配置服務(wù)首先配置nginx:
server {
listen 8080;
#server_name jianshuapi ;
access_log /var/log/nginx/api.log;
# app 根目錄
root /usr/html/jianshu;
index index.py index.htm;
location / {
# nginx 收到請求會(huì )就轉發(fā)到 9001 端口
uwsgi_pass 127.0.0.1:9001;
include /etc/nginx/uwsgi_params;
}
#設定靜態(tài)文件所在目錄
location ^~ /static {
alias /usr/html/jianshu/static;
}
}
檢查語(yǔ)法并重新啟動(dòng):
# nginx -t
# nginx -s reload
配置uWSGi:
首先為uWSGI操作創(chuàng )建配置文件jianshu.ini:
# mkdir -p /etc/uwsgi && cd /etc/uwsgi
[uwsgi]
chdir = /usr/html/jianshu
socket = 127.0.0.1:9001
master = true
uid = root
wsgi-file = /usr/html/jianshu/jianshu_api/wsgi.py
processes = 2
threads = 4
chmod-socket = 666
chown-socket = root:nginx
vacuum = true
測試uWSGi是否可以正常工作:
# uwsgi /etc/uwsgi/jianshu.ini
然后在命令行中訪(fǎng)問(wèn):8080 /:

api測試
現在您可以看到部署已成功。但是通常我們使用主管來(lái)管理
uwsgi和nginx,因此操作起來(lái)更加方便。
3.使用主管
有關(guān)主管的詳細用法,請參閱:使用主管來(lái)管理流程。
首次安裝主管:
# pip install supervisor
然后生成配置文件:
# echo_supervisord_conf > /etc/supervisord.conf
開(kāi)始監督:
# supervisord
提供uwsgi配置文件,打開(kāi)/etc/supervisord.conf并在底部添加:
[program:jianshu] ; 添加 uwsgi 的配置示例
command=/root/.pyenv/shims/uwsgi --ini /etc/uwsgi/jianshu.ini
directory=/usr/html/jianshu/
stdout_logfile=/var/log/supervisor/%(program_name)s_access.log
stderr_logfile=/var/log/supervisor/%(program_name)s_err.log
startsecs=10
stopwaitsecs=0
autostart=true
autorestart=true
[program:nginx] ;nginx 配置示例
directory=/
command=/usr/sbin/nginx -c /etc/nginx/nginx.conf
user=root
stdout_logfile=/var/log/supervisor/%(program_name)s_access.log
stderr_logfile=/var/log/supervisor/%(program_name)s_err.log
autostart=true
autorestart=true
startsecs=10
然后重新加載主管配置:
# supervisorctl reload
查看主管的狀態(tài):
# supervisorctl status
jianshu RUNNING pid 19466, uptime 0:07:08
nginx RUNNING pid 19490, uptime 0:07:05
再次訪(fǎng)問(wèn)api界面:8080/。

Jianshu API
-終于完成了部署,非常高興,歡迎每個(gè)人使用該API,但不要隨意使用它,畢竟服務(wù)器資源有限!
-下一節將介紹如何使用docker進(jìn)行部署。
匯總:將ApiBoot Logging采集的日志上報到Admin
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 336 次瀏覽 ? 2020-09-17 08:11
每個(gè)請求的詳細信息都可以通過(guò)ApiBoot Logging獲得。在分布式部署模式下,請求可以通過(guò)多個(gè)服務(wù)。如果每個(gè)服務(wù)都獨立保存請求日志信息,我們將無(wú)法做到。統一控制,日志數據庫和業(yè)務(wù)數據庫之間將存在不一致(可能使用多個(gè)數據源配置)。由于這個(gè)問(wèn)題,ApiBoot Logging提供了Admin的概念,它將客戶(hù)端采集連接到。每個(gè)日志都報告給Admin,并且Admin將分析并保存操作。
創(chuàng )建Logging Admin項目
ApiBoot Logging Admin可以匯總每個(gè)業(yè)務(wù)服務(wù)的請求日志(ApiBoot Logging),因此我們需要向Admin報告每個(gè)業(yè)務(wù)服務(wù)的日志采集,因此我們應該使用獨立的部署方法。創(chuàng )建單獨的服務(wù)以專(zhuān)門(mén)請求日志采集,然后將其保存。
初始化Logging Admin項目依賴(lài)項
使用想法創(chuàng )建一個(gè)SpringBoot項目,pom.xml配置文件中的依賴(lài)項如下:
org.springframework.boot
spring-boot-starter-web
org.minbox.framework
api-boot-starter-logging-admin
mysql
mysql-connector-java
com.zaxxer
HikariCP
org.minbox.framework
api-boot-starter-mybatis-enhance
我們需要將請求日志從采集保存到數據庫,因此我們需要在項目中添加與數據庫驅動(dòng)程序和數據庫連接池相關(guān)的依賴(lài)項。 ApiBoot Logging Admin通過(guò)DataSource操作數據,并依賴(lài)于A(yíng)piBoot MyBatis Enhance。您可以自動(dòng)創(chuàng )建DataSource,擺脫手動(dòng)創(chuàng )建的麻煩,并加入Spring IOC容器。
添加ApiBoot統一版本依賴(lài)項
org.minbox.framework
api-boot-dependencies
2.1.4.RELEASE
import
pom
最新版本的ApiBoot,請訪(fǎng)問(wèn):: api-boot-dependencies以進(jìn)行查詢(xún)。
啟用日志記錄管理員
添加ApiBoot Logging Admin依賴(lài)項后,無(wú)法完全使用Admin功能。我們需要通過(guò)@EnableLoggingAdmin批注啟用它。該批注將自動(dòng)在Logging Admin中注冊一些必需的類(lèi)到Spring IOC,并將批注添加到條目類(lèi)中,如下所示:
/**
* ApiBoot Logging Admin入口類(lèi)
*/
@SpringBootApplication
@EnableLoggingAdmin
public class ApibootReportLogsByLoggingToAdminApplication {
public static void main(String[] args) {
SpringApplication.run(ApibootReportLogsByLoggingToAdminApplication.class, args);
}
}
配置日志數據源
application.yml配置文件中的數據源配置如下:
# 服務(wù)名稱(chēng)
spring:
application:
name: apiboot-report-logs-by-logging-to-admin
# 數據源相關(guān)配置
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/test
username: root
password: 123456
type: com.zaxxer.hikari.HikariDataSource
# 服務(wù)端口號
server:
port: 8081
控制臺將打印報告日志
ApiBoot Logging Admin可以控制是否通過(guò)配置文件在控制臺上從采集打印請求日志信息,并在application.yml配置文件中添加以下內容:
api:
boot:
logging:
# Logging Admin相關(guān)配置
admin:
# 控制臺顯示采集的日志信息
show-console-report-log: true
注意:這不應與ApiBoot Logging提供的api.boot.logging.show-console-log配置混淆。
美化控制臺打印的報告日志
api:
boot:
logging:
# Logging Admin相關(guān)配置
admin:
# 控制臺輸出時(shí)美化采集到的日志
format-console-log-json: true
注意:請勿在此處與api.boot.logging.format-console-log-json配置混淆。
初始化日志表結構
ApiBoot Logging Admin使用固定的表結構來(lái)存儲請求日志和服務(wù)信息。表創(chuàng )建語(yǔ)句如下:
SET NAMES utf8mb4 ;
--
-- Table structure for table `logging_request_logs`
--
CREATE TABLE `logging_request_logs` (
`lrl_id` varchar(36) COLLATE utf8mb4_general_ci NOT NULL COMMENT '主鍵,UUID',
`lrl_service_detail_id` varchar(36) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '服務(wù)詳情編號,關(guān)聯(lián)logging_service_details主鍵',
`lrl_trace_id` varchar(36) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '鏈路ID',
`lrl_parent_span_id` varchar(36) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '上級跨度ID',
`lrl_span_id` varchar(36) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '跨度ID',
`lrl_start_time` mediumtext COLLATE utf8mb4_general_ci COMMENT '請求開(kāi)始時(shí)間',
`lrl_end_time` mediumtext COLLATE utf8mb4_general_ci COMMENT '請求結束時(shí)間',
`lrl_http_status` int(11) DEFAULT NULL COMMENT '請求響應狀態(tài)碼',
`lrl_request_body` longtext COLLATE utf8mb4_general_ci COMMENT '請求主體內容',
`lrl_request_headers` text COLLATE utf8mb4_general_ci COMMENT '請求頭信息',
`lrl_request_ip` varchar(30) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '發(fā)起請求客戶(hù)端的IP地址',
`lrl_request_method` varchar(10) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '請求方式',
`lrl_request_uri` varchar(200) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '請求路徑',
`lrl_response_body` longtext COLLATE utf8mb4_general_ci COMMENT '響應內容',
`lrl_response_headers` text COLLATE utf8mb4_general_ci COMMENT '響應頭信息',
`lrl_time_consuming` int(11) DEFAULT NULL COMMENT '請求耗時(shí)',
`lrl_create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '日志保存時(shí)間',
`lrl_request_params` text COLLATE utf8mb4_general_ci,
`lrl_exception_stack` text COLLATE utf8mb4_general_ci,
PRIMARY KEY (`lrl_id`),
KEY `logging_request_logs_LRL_SERVICE_DETAIL_ID_index` (`lrl_service_detail_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='請求日志信息表';
--
-- Table structure for table `logging_service_details`
--
CREATE TABLE `logging_service_details` (
`lsd_id` varchar(36) COLLATE utf8mb4_general_ci NOT NULL,
`lsd_service_id` varchar(200) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '上報服務(wù)的ID,對應spring.application.name配置值',
`lsd_service_ip` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '上報服務(wù)的IP地址',
`lsd_service_port` int(11) DEFAULT NULL COMMENT '上報服務(wù)的端口號',
`lsd_last_report_time` timestamp NULL DEFAULT NULL COMMENT '最后一次上報時(shí)間,每次上報更新',
`lsd_create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '首次上報時(shí)創(chuàng )建時(shí)間',
PRIMARY KEY (`lsd_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='上報日志的客戶(hù)端服務(wù)詳情';
到目前為止,ApiBoot Logging Admin已經(jīng)準備就緒。接下來(lái),我們需要修改業(yè)務(wù)服務(wù),以將請求日志報告給Logging Admin。
將日志報告給指定的日志記錄管理員
我們將修改使用ApiBoot Logging獲取統一管理請求日志文章的源代碼,并將Logging Admin的地址添加到application.yml中,如下所示:
api:
boot:
# ApiBoot Logging 日志組件配置
logging:
# 配置Logging Admin地址
admin:
server-address: 127.0.0.1:8081
api.boot.logging.admin-service-address的配置格式為:Ip:Port,我們只需要修改一個(gè)地方,所有其他任務(wù)都將在內部交付給ApiBoot Logging。
測試
我們以應用程序的形式啟動(dòng)ApiBoot Logging Admin和業(yè)務(wù)服務(wù)。
使用curl訪(fǎng)問(wèn)測試地址,如下所示:
~ curl http://localhost:8080/test\?name\=admin
你好:admin
我們檢查ApiBoot Logging管理控制臺日志,如下所示:
Receiving Service: 【apiboot-unified-manage-request-logs -> 127.0.0.1】, Request Log Report,Logging Content:[
{
"endTime":1571641723779,
"httpStatus":200,
"requestBody":"",
"requestHeaders":{
"server-region":"JiNan",
"host":"localhost:8080",
"user-agent":"curl/7.64.1",
"accept":"*/*"
},
"requestIp":"0:0:0:0:0:0:0:1",
"requestMethod":"GET",
"requestParam":"{\"name\":\"admin\"}",
"requestUri":"/test",
"responseBody":"你好:admin",
"responseHeaders":{},
"serviceId":"apiboot-unified-manage-request-logs",
"serviceIp":"127.0.0.1",
"servicePort":"8080",
"spanId":"95a73ca0-831b-45df-aa43-2b5887e8d98d",
"startTime":1571641723776,
"timeConsuming":3,
"traceId":"25a7de96-b3dd-48e5-9854-1a8069a4a681"
}
]
我們已經(jīng)看到Logging Admin控制臺打印的報告請求日志,并且尚不確定此請求的日志是否已保存到數據庫中。接下來(lái),我將使用命令行查看數據庫的日志信息。
查看logging_service_details表中的數據
mysql> select * from logging_service_details\G;
*************************** 1. row ***************************
lsd_id: b069366a-25dc-41ec-8f09-242d81755cd0
lsd_service_id: apiboot-unified-manage-request-logs
lsd_service_ip: 10.180.98.112
lsd_service_port: 8080
lsd_last_report_time: 2019-10-21 02:14:26
lsd_create_time: 2019-10-21 15:14:26
logging_service_details存儲報告請求日志的每個(gè)業(yè)務(wù)服務(wù)的基本信息。每個(gè)服務(wù)的基本信息將被緩存在Logging Admin內存中,以方便獲取service_id來(lái)存儲日志,并且唯一性是根據ip + port + service_id確定的。相同的服務(wù)僅保存一次。
查看logging_request_logs表中的數據
mysql> select * from logging_request_logs\G;
*************************** 1. row ***************************
lrl_id: c42761f6-b072-4744-8a17-d8e6097b85de
lrl_service_detail_id: b069366a-25dc-41ec-8f09-242d81755cd0
lrl_trace_id: 055329a0-cfc1-4606-baf0-4fb0cc905ba2
lrl_parent_span_id: NULL
lrl_span_id: aab83092-7749-4f88-8cb6-a949cc060197
lrl_start_time: 1571642065262
lrl_end_time: 1571642065286
lrl_http_status: 200
lrl_request_body:
lrl_request_headers: {"server-region":"JiNan","host":"localhost:8080","user-agent":"curl/7.64.1","accept":"*/*"}
lrl_request_ip: 0:0:0:0:0:0:0:1
lrl_request_method: GET
lrl_request_uri: /test
lrl_response_body: 你好:admin
lrl_response_headers: {}
lrl_time_consuming: 24
lrl_create_time: 2019-10-21 15:14:26
lrl_request_params: {"name":"admin"}
lrl_exception_stack: NULL
敲黑板畫(huà)關(guān)鍵點(diǎn)
在本章中,我們集成了ApiBoot Logging Admin,將業(yè)務(wù)服務(wù)的每個(gè)請求日志報告給Logging Admin,先通過(guò)數據庫保存請求日志,然后再通過(guò)其他方法,并通過(guò)spanId和traceId查看日志下屬每個(gè)請求鏈接與消耗每個(gè)請求中時(shí)間最多的跨度的關(guān)系,以準確地優(yōu)化服務(wù)性能。
作者的個(gè)人博客
使用開(kāi)源框架ApiBoot幫助您成為Api接口服務(wù)架構師 查看全部
將ApiBoot日志記錄采集的日志報告給管理員
每個(gè)請求的詳細信息都可以通過(guò)ApiBoot Logging獲得。在分布式部署模式下,請求可以通過(guò)多個(gè)服務(wù)。如果每個(gè)服務(wù)都獨立保存請求日志信息,我們將無(wú)法做到。統一控制,日志數據庫和業(yè)務(wù)數據庫之間將存在不一致(可能使用多個(gè)數據源配置)。由于這個(gè)問(wèn)題,ApiBoot Logging提供了Admin的概念,它將客戶(hù)端采集連接到。每個(gè)日志都報告給Admin,并且Admin將分析并保存操作。
創(chuàng )建Logging Admin項目
ApiBoot Logging Admin可以匯總每個(gè)業(yè)務(wù)服務(wù)的請求日志(ApiBoot Logging),因此我們需要向Admin報告每個(gè)業(yè)務(wù)服務(wù)的日志采集,因此我們應該使用獨立的部署方法。創(chuàng )建單獨的服務(wù)以專(zhuān)門(mén)請求日志采集,然后將其保存。
初始化Logging Admin項目依賴(lài)項
使用想法創(chuàng )建一個(gè)SpringBoot項目,pom.xml配置文件中的依賴(lài)項如下:
org.springframework.boot
spring-boot-starter-web
org.minbox.framework
api-boot-starter-logging-admin
mysql
mysql-connector-java
com.zaxxer
HikariCP
org.minbox.framework
api-boot-starter-mybatis-enhance
我們需要將請求日志從采集保存到數據庫,因此我們需要在項目中添加與數據庫驅動(dòng)程序和數據庫連接池相關(guān)的依賴(lài)項。 ApiBoot Logging Admin通過(guò)DataSource操作數據,并依賴(lài)于A(yíng)piBoot MyBatis Enhance。您可以自動(dòng)創(chuàng )建DataSource,擺脫手動(dòng)創(chuàng )建的麻煩,并加入Spring IOC容器。
添加ApiBoot統一版本依賴(lài)項
org.minbox.framework
api-boot-dependencies
2.1.4.RELEASE
import
pom
最新版本的ApiBoot,請訪(fǎng)問(wèn):: api-boot-dependencies以進(jìn)行查詢(xún)。
啟用日志記錄管理員
添加ApiBoot Logging Admin依賴(lài)項后,無(wú)法完全使用Admin功能。我們需要通過(guò)@EnableLoggingAdmin批注啟用它。該批注將自動(dòng)在Logging Admin中注冊一些必需的類(lèi)到Spring IOC,并將批注添加到條目類(lèi)中,如下所示:
/**
* ApiBoot Logging Admin入口類(lèi)
*/
@SpringBootApplication
@EnableLoggingAdmin
public class ApibootReportLogsByLoggingToAdminApplication {
public static void main(String[] args) {
SpringApplication.run(ApibootReportLogsByLoggingToAdminApplication.class, args);
}
}
配置日志數據源
application.yml配置文件中的數據源配置如下:
# 服務(wù)名稱(chēng)
spring:
application:
name: apiboot-report-logs-by-logging-to-admin
# 數據源相關(guān)配置
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/test
username: root
password: 123456
type: com.zaxxer.hikari.HikariDataSource
# 服務(wù)端口號
server:
port: 8081
控制臺將打印報告日志
ApiBoot Logging Admin可以控制是否通過(guò)配置文件在控制臺上從采集打印請求日志信息,并在application.yml配置文件中添加以下內容:
api:
boot:
logging:
# Logging Admin相關(guān)配置
admin:
# 控制臺顯示采集的日志信息
show-console-report-log: true
注意:這不應與ApiBoot Logging提供的api.boot.logging.show-console-log配置混淆。
美化控制臺打印的報告日志
api:
boot:
logging:
# Logging Admin相關(guān)配置
admin:
# 控制臺輸出時(shí)美化采集到的日志
format-console-log-json: true
注意:請勿在此處與api.boot.logging.format-console-log-json配置混淆。
初始化日志表結構
ApiBoot Logging Admin使用固定的表結構來(lái)存儲請求日志和服務(wù)信息。表創(chuàng )建語(yǔ)句如下:
SET NAMES utf8mb4 ;
--
-- Table structure for table `logging_request_logs`
--
CREATE TABLE `logging_request_logs` (
`lrl_id` varchar(36) COLLATE utf8mb4_general_ci NOT NULL COMMENT '主鍵,UUID',
`lrl_service_detail_id` varchar(36) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '服務(wù)詳情編號,關(guān)聯(lián)logging_service_details主鍵',
`lrl_trace_id` varchar(36) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '鏈路ID',
`lrl_parent_span_id` varchar(36) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '上級跨度ID',
`lrl_span_id` varchar(36) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '跨度ID',
`lrl_start_time` mediumtext COLLATE utf8mb4_general_ci COMMENT '請求開(kāi)始時(shí)間',
`lrl_end_time` mediumtext COLLATE utf8mb4_general_ci COMMENT '請求結束時(shí)間',
`lrl_http_status` int(11) DEFAULT NULL COMMENT '請求響應狀態(tài)碼',
`lrl_request_body` longtext COLLATE utf8mb4_general_ci COMMENT '請求主體內容',
`lrl_request_headers` text COLLATE utf8mb4_general_ci COMMENT '請求頭信息',
`lrl_request_ip` varchar(30) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '發(fā)起請求客戶(hù)端的IP地址',
`lrl_request_method` varchar(10) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '請求方式',
`lrl_request_uri` varchar(200) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '請求路徑',
`lrl_response_body` longtext COLLATE utf8mb4_general_ci COMMENT '響應內容',
`lrl_response_headers` text COLLATE utf8mb4_general_ci COMMENT '響應頭信息',
`lrl_time_consuming` int(11) DEFAULT NULL COMMENT '請求耗時(shí)',
`lrl_create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '日志保存時(shí)間',
`lrl_request_params` text COLLATE utf8mb4_general_ci,
`lrl_exception_stack` text COLLATE utf8mb4_general_ci,
PRIMARY KEY (`lrl_id`),
KEY `logging_request_logs_LRL_SERVICE_DETAIL_ID_index` (`lrl_service_detail_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='請求日志信息表';
--
-- Table structure for table `logging_service_details`
--
CREATE TABLE `logging_service_details` (
`lsd_id` varchar(36) COLLATE utf8mb4_general_ci NOT NULL,
`lsd_service_id` varchar(200) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '上報服務(wù)的ID,對應spring.application.name配置值',
`lsd_service_ip` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '上報服務(wù)的IP地址',
`lsd_service_port` int(11) DEFAULT NULL COMMENT '上報服務(wù)的端口號',
`lsd_last_report_time` timestamp NULL DEFAULT NULL COMMENT '最后一次上報時(shí)間,每次上報更新',
`lsd_create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '首次上報時(shí)創(chuàng )建時(shí)間',
PRIMARY KEY (`lsd_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='上報日志的客戶(hù)端服務(wù)詳情';
到目前為止,ApiBoot Logging Admin已經(jīng)準備就緒。接下來(lái),我們需要修改業(yè)務(wù)服務(wù),以將請求日志報告給Logging Admin。
將日志報告給指定的日志記錄管理員
我們將修改使用ApiBoot Logging獲取統一管理請求日志文章的源代碼,并將Logging Admin的地址添加到application.yml中,如下所示:
api:
boot:
# ApiBoot Logging 日志組件配置
logging:
# 配置Logging Admin地址
admin:
server-address: 127.0.0.1:8081
api.boot.logging.admin-service-address的配置格式為:Ip:Port,我們只需要修改一個(gè)地方,所有其他任務(wù)都將在內部交付給ApiBoot Logging。
測試
我們以應用程序的形式啟動(dòng)ApiBoot Logging Admin和業(yè)務(wù)服務(wù)。
使用curl訪(fǎng)問(wèn)測試地址,如下所示:
~ curl http://localhost:8080/test\?name\=admin
你好:admin
我們檢查ApiBoot Logging管理控制臺日志,如下所示:
Receiving Service: 【apiboot-unified-manage-request-logs -> 127.0.0.1】, Request Log Report,Logging Content:[
{
"endTime":1571641723779,
"httpStatus":200,
"requestBody":"",
"requestHeaders":{
"server-region":"JiNan",
"host":"localhost:8080",
"user-agent":"curl/7.64.1",
"accept":"*/*"
},
"requestIp":"0:0:0:0:0:0:0:1",
"requestMethod":"GET",
"requestParam":"{\"name\":\"admin\"}",
"requestUri":"/test",
"responseBody":"你好:admin",
"responseHeaders":{},
"serviceId":"apiboot-unified-manage-request-logs",
"serviceIp":"127.0.0.1",
"servicePort":"8080",
"spanId":"95a73ca0-831b-45df-aa43-2b5887e8d98d",
"startTime":1571641723776,
"timeConsuming":3,
"traceId":"25a7de96-b3dd-48e5-9854-1a8069a4a681"
}
]
我們已經(jīng)看到Logging Admin控制臺打印的報告請求日志,并且尚不確定此請求的日志是否已保存到數據庫中。接下來(lái),我將使用命令行查看數據庫的日志信息。
查看logging_service_details表中的數據
mysql> select * from logging_service_details\G;
*************************** 1. row ***************************
lsd_id: b069366a-25dc-41ec-8f09-242d81755cd0
lsd_service_id: apiboot-unified-manage-request-logs
lsd_service_ip: 10.180.98.112
lsd_service_port: 8080
lsd_last_report_time: 2019-10-21 02:14:26
lsd_create_time: 2019-10-21 15:14:26
logging_service_details存儲報告請求日志的每個(gè)業(yè)務(wù)服務(wù)的基本信息。每個(gè)服務(wù)的基本信息將被緩存在Logging Admin內存中,以方便獲取service_id來(lái)存儲日志,并且唯一性是根據ip + port + service_id確定的。相同的服務(wù)僅保存一次。
查看logging_request_logs表中的數據
mysql> select * from logging_request_logs\G;
*************************** 1. row ***************************
lrl_id: c42761f6-b072-4744-8a17-d8e6097b85de
lrl_service_detail_id: b069366a-25dc-41ec-8f09-242d81755cd0
lrl_trace_id: 055329a0-cfc1-4606-baf0-4fb0cc905ba2
lrl_parent_span_id: NULL
lrl_span_id: aab83092-7749-4f88-8cb6-a949cc060197
lrl_start_time: 1571642065262
lrl_end_time: 1571642065286
lrl_http_status: 200
lrl_request_body:
lrl_request_headers: {"server-region":"JiNan","host":"localhost:8080","user-agent":"curl/7.64.1","accept":"*/*"}
lrl_request_ip: 0:0:0:0:0:0:0:1
lrl_request_method: GET
lrl_request_uri: /test
lrl_response_body: 你好:admin
lrl_response_headers: {}
lrl_time_consuming: 24
lrl_create_time: 2019-10-21 15:14:26
lrl_request_params: {"name":"admin"}
lrl_exception_stack: NULL
敲黑板畫(huà)關(guān)鍵點(diǎn)
在本章中,我們集成了ApiBoot Logging Admin,將業(yè)務(wù)服務(wù)的每個(gè)請求日志報告給Logging Admin,先通過(guò)數據庫保存請求日志,然后再通過(guò)其他方法,并通過(guò)spanId和traceId查看日志下屬每個(gè)請求鏈接與消耗每個(gè)請求中時(shí)間最多的跨度的關(guān)系,以準確地優(yōu)化服務(wù)性能。
作者的個(gè)人博客
使用開(kāi)源框架ApiBoot幫助您成為Api接口服務(wù)架構師
解決方案:接入5118智能原創(chuàng )API教程
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 631 次瀏覽 ? 2020-09-07 05:42
訪(fǎng)問(wèn)5118智能原創(chuàng ) API教程
優(yōu)采云 采集支持調用5118一鍵式智能原創(chuàng ) API接口,處理采集數據標題和內容等;
提醒:第三方API訪(fǎng)問(wèn)功能需要優(yōu)采云旗艦軟件包支持使用,并且用戶(hù)需要提供第三方接口帳戶(hù)信息(即,用戶(hù)需要注冊第三方)界面,以及由第三方界面產(chǎn)生的所有費用,用戶(hù)應承擔);
詳細使用步驟1. 5118智能原創(chuàng ) API接口配置I,API配置入口:
在控制臺左側的列表中單擊[第三方服務(wù)配置] ==“單擊[第三方內容API訪(fǎng)問(wèn)權限] ==”單擊[第三方API配置管理] ==“最后單擊[+5118一鍵式智能原創(chuàng ) API]創(chuàng )建接口配置;
II。配置API接口信息:
[API-Key value]是要從5118背景中獲取相應的Key值,請記住在填寫(xiě)后將其保存;
注意:5118將每次調用的最大長(cháng)度限制為5000個(gè)字符(包括html代碼),因此,當內容長(cháng)度超過(guò)時(shí),優(yōu)采云將被分割并多次調用。此操作將增加api調用的次數,費用也會(huì )相應增加,這是用戶(hù)需要承擔的費用,使用前請務(wù)必注意! ! !
2.創(chuàng )建API處理規則
API處理規則,可以將其設置為調用API接口以處理哪些字段的內容;
I。 API處理規則條目:
在控制臺左側的列表中單擊[第三方服務(wù)配置] ==“單擊[第三方內容API訪(fǎng)問(wèn)] ==”,進(jìn)入[API處理規則管理]頁(yè)面,最后單擊[+添加API處理規則]以創(chuàng )建API處理規則;
II,API處理規則配置:
注意:當API處理1個(gè)字段時(shí),API接口將被調用一次,因此建議不要添加不需要的字段!
3. API處理規則的用法
使用API??處理規則的方式有兩種:手動(dòng)執行和自動(dòng)執行:
I。手動(dòng)執行API處理規則:
單擊采集任務(wù)的[結果數據和發(fā)布]選項卡中的[SEO&API&翻譯和其他工具]按鈕==“選擇[第三方API執行]列==”選擇相應的API處理規則==“執行(數據范圍有兩種執行方法,根據發(fā)布狀態(tài)批量執行和根據列表中選擇的數據執行);
II。自動(dòng)執行API處理規則:
啟用API處理的自動(dòng)執行。任務(wù)完成采集后,API處理將自動(dòng)執行。通常,使用定時(shí)采集和自動(dòng)發(fā)布功能很方便;
在任務(wù)的[自動(dòng)化:發(fā)布和SEO和翻譯]選項卡中,[自動(dòng)執行第三方API配置] ==“選中[采集,自動(dòng)執行API]選項==”選擇要執行的API處理規則==“選擇由API接口處理的數據范圍(通常選擇”要發(fā)布“,所有將導致所有數據被執行多次),最后單擊保存;
4. API處理結果和發(fā)布,查看API接口處理結果:
API接口處理的內容將另存為新字段,例如:標題處理后的新字段:title_5118,以及內容處理后的新字段:content_5118,可以在[結果數據和發(fā)布]和數據預覽界面。
溫馨提示:API處理規則需要一段時(shí)間才能執行,執行后頁(yè)面會(huì )自動(dòng)刷新,并出現API接口處理后的新字段;
II。發(fā)布API接口的處理后內容:
發(fā)布文章之前,請在發(fā)布目標的第二步中修改映射字段,并在A(yíng)PI接口處理之后將標題和內容更改為新的對應字段title_5118和content_5118;
提醒:如果無(wú)法在發(fā)布目標中選擇新字段,請在此任務(wù)下復制或創(chuàng )建新的發(fā)布目標,然后可以在新發(fā)布目標中選擇新字段??梢圆榭丛敿毜慕坛?;
5. 5118-API接口常見(jiàn)問(wèn)題和解決方法I,如何將API處理規則和SEO規則一起使用?
系統默認對標題和內容字段執行SEO功能,需要將其修改為SEO規則中的title_5118和content_5118字段;
優(yōu)采云導航:優(yōu)采云 采集 優(yōu)采云控制臺如何使用優(yōu)采云 SEO工具微信公眾號文章 采集今天的標題采集 查看全部
訪(fǎng)問(wèn)5118智能原創(chuàng ) API教程
訪(fǎng)問(wèn)5118智能原創(chuàng ) API教程
優(yōu)采云 采集支持調用5118一鍵式智能原創(chuàng ) API接口,處理采集數據標題和內容等;
提醒:第三方API訪(fǎng)問(wèn)功能需要優(yōu)采云旗艦軟件包支持使用,并且用戶(hù)需要提供第三方接口帳戶(hù)信息(即,用戶(hù)需要注冊第三方)界面,以及由第三方界面產(chǎn)生的所有費用,用戶(hù)應承擔);
詳細使用步驟1. 5118智能原創(chuàng ) API接口配置I,API配置入口:
在控制臺左側的列表中單擊[第三方服務(wù)配置] ==“單擊[第三方內容API訪(fǎng)問(wèn)權限] ==”單擊[第三方API配置管理] ==“最后單擊[+5118一鍵式智能原創(chuàng ) API]創(chuàng )建接口配置;

II。配置API接口信息:
[API-Key value]是要從5118背景中獲取相應的Key值,請記住在填寫(xiě)后將其保存;
注意:5118將每次調用的最大長(cháng)度限制為5000個(gè)字符(包括html代碼),因此,當內容長(cháng)度超過(guò)時(shí),優(yōu)采云將被分割并多次調用。此操作將增加api調用的次數,費用也會(huì )相應增加,這是用戶(hù)需要承擔的費用,使用前請務(wù)必注意! ! !


2.創(chuàng )建API處理規則
API處理規則,可以將其設置為調用API接口以處理哪些字段的內容;
I。 API處理規則條目:
在控制臺左側的列表中單擊[第三方服務(wù)配置] ==“單擊[第三方內容API訪(fǎng)問(wèn)] ==”,進(jìn)入[API處理規則管理]頁(yè)面,最后單擊[+添加API處理規則]以創(chuàng )建API處理規則;

II,API處理規則配置:

注意:當API處理1個(gè)字段時(shí),API接口將被調用一次,因此建議不要添加不需要的字段!
3. API處理規則的用法
使用API??處理規則的方式有兩種:手動(dòng)執行和自動(dòng)執行:
I。手動(dòng)執行API處理規則:
單擊采集任務(wù)的[結果數據和發(fā)布]選項卡中的[SEO&API&翻譯和其他工具]按鈕==“選擇[第三方API執行]列==”選擇相應的API處理規則==“執行(數據范圍有兩種執行方法,根據發(fā)布狀態(tài)批量執行和根據列表中選擇的數據執行);

II。自動(dòng)執行API處理規則:
啟用API處理的自動(dòng)執行。任務(wù)完成采集后,API處理將自動(dòng)執行。通常,使用定時(shí)采集和自動(dòng)發(fā)布功能很方便;
在任務(wù)的[自動(dòng)化:發(fā)布和SEO和翻譯]選項卡中,[自動(dòng)執行第三方API配置] ==“選中[采集,自動(dòng)執行API]選項==”選擇要執行的API處理規則==“選擇由API接口處理的數據范圍(通常選擇”要發(fā)布“,所有將導致所有數據被執行多次),最后單擊保存;

4. API處理結果和發(fā)布,查看API接口處理結果:
API接口處理的內容將另存為新字段,例如:標題處理后的新字段:title_5118,以及內容處理后的新字段:content_5118,可以在[結果數據和發(fā)布]和數據預覽界面。
溫馨提示:API處理規則需要一段時(shí)間才能執行,執行后頁(yè)面會(huì )自動(dòng)刷新,并出現API接口處理后的新字段;


II。發(fā)布API接口的處理后內容:
發(fā)布文章之前,請在發(fā)布目標的第二步中修改映射字段,并在A(yíng)PI接口處理之后將標題和內容更改為新的對應字段title_5118和content_5118;
提醒:如果無(wú)法在發(fā)布目標中選擇新字段,請在此任務(wù)下復制或創(chuàng )建新的發(fā)布目標,然后可以在新發(fā)布目標中選擇新字段??梢圆榭丛敿毜慕坛?;

5. 5118-API接口常見(jiàn)問(wèn)題和解決方法I,如何將API處理規則和SEO規則一起使用?
系統默認對標題和內容字段執行SEO功能,需要將其修改為SEO規則中的title_5118和content_5118字段;

優(yōu)采云導航:優(yōu)采云 采集 優(yōu)采云控制臺如何使用優(yōu)采云 SEO工具微信公眾號文章 采集今天的標題采集
解決方案:優(yōu)采云采集器采集原理、流程介紹
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 318 次瀏覽 ? 2020-09-04 13:32
寫(xiě)作文章很無(wú)聊,但百度優(yōu)化排名仍然與文章的積累密不可分,因此各種文章 采集器都占據了市場(chǎng),今天SEO教程自學(xué)網(wǎng)站將向您優(yōu)采云 采集器 采集的原理和過(guò)程。
什么是數據采集?我們可以理解,我們打開(kāi)了網(wǎng)站并看到了一篇很好的文章文章,因此我們復制了文章的標題和內容,并將該文章文章轉移到了我們的網(wǎng)站。我們的過(guò)程可以稱(chēng)為采集,它將對您網(wǎng)站上的其他人有用的信息轉移到您自己的網(wǎng)站。
采集器正在執行此操作,但是整個(gè)過(guò)程由軟件完成。我們可以理解,我們復制了文章的標題和內容。我們可以知道內容是什么,標題是什么,但是軟件不知道,所以我們必須告訴軟件如何選擇它。這是編寫(xiě)規則的過(guò)程。復制之后,我們打開(kāi)網(wǎng)站(例如發(fā)布論壇的地方),然后將其發(fā)布。對于軟件,它是模仿我們的帖子,發(fā)布文章,如何發(fā)布,這就是數據發(fā)布的過(guò)程。
優(yōu)采云 采集器是用于采集數據的軟件。它是網(wǎng)絡(luò )上功能最強大的采集器。它可以捕獲您看到的幾乎所有Web內容。
一、 優(yōu)采云 采集器數據捕獲原理:
優(yōu)采云采集器如何抓取數據取決于您的規則。要獲取網(wǎng)頁(yè)的所有內容,您需要首先獲取該網(wǎng)頁(yè)的URL。這是URL。該程序根據規則獲取列表頁(yè)面,分析其中的URL,然后獲取URL的Web內容。根據采集規則,分析下載的網(wǎng)頁(yè),分離標題內容和其他信息,然后保存。如果選擇下載圖像等網(wǎng)絡(luò )資源,則程序將分析采集的數據,找到圖像的下載地址,資源等,然后在本地下載。
二、 優(yōu)采云 采集器數據發(fā)布原則:
采集數據后,默認情況下將其保存在本地。我們可以使用以下方法來(lái)處理數據。
1.什么也不要做。由于數據本身存儲在數據庫中(訪(fǎng)問(wèn),db3,mysql,sqlserver),因此,如果僅查看數據,則可以使用相關(guān)軟件將其打開(kāi)。
2. 網(wǎng)站已發(fā)布到網(wǎng)站。該程序將模仿瀏覽器向您的網(wǎng)站發(fā)送數據,可以達到手動(dòng)發(fā)布的效果。
3.直接轉到數據庫。您只需要編寫(xiě)一些SQL語(yǔ)句,程序就會(huì )根據您的SQL語(yǔ)句將數據導入數據庫。
4.另存為本地文件。該程序將讀取數據庫中的數據,并以某種格式將其另存為本地sql或文本文件。
三、 優(yōu)采云 采集器工作流程:
優(yōu)采云 采集器分兩步采集數據,一個(gè)是采集數據,另一個(gè)是發(fā)布數據。這兩個(gè)過(guò)程可以分開(kāi)。
1.采集數據,包括采集URL和采集內容。此過(guò)程是獲取數據的過(guò)程。我們制定規則并處理采礦過(guò)程的內容。
2,發(fā)布內容是將數據發(fā)布到自己的論壇,cms的過(guò)程也是將數據作為現有過(guò)程執行。您可以使用WEB,數據庫存儲進(jìn)行在線(xiàn)發(fā)布或另存為本地文件。
但我必須在此提醒大多數網(wǎng)站管理員,百度颶風(fēng)算法2. 0的引入進(jìn)一步提高了百度對采集這種現象的懲罰程度和懲罰范圍。在經(jīng)驗豐富的時(shí)代,是否使用文章 采集器取決于您的想法! 查看全部
優(yōu)采云 采集器 采集原理和過(guò)程介紹
寫(xiě)作文章很無(wú)聊,但百度優(yōu)化排名仍然與文章的積累密不可分,因此各種文章 采集器都占據了市場(chǎng),今天SEO教程自學(xué)網(wǎng)站將向您優(yōu)采云 采集器 采集的原理和過(guò)程。
什么是數據采集?我們可以理解,我們打開(kāi)了網(wǎng)站并看到了一篇很好的文章文章,因此我們復制了文章的標題和內容,并將該文章文章轉移到了我們的網(wǎng)站。我們的過(guò)程可以稱(chēng)為采集,它將對您網(wǎng)站上的其他人有用的信息轉移到您自己的網(wǎng)站。
采集器正在執行此操作,但是整個(gè)過(guò)程由軟件完成。我們可以理解,我們復制了文章的標題和內容。我們可以知道內容是什么,標題是什么,但是軟件不知道,所以我們必須告訴軟件如何選擇它。這是編寫(xiě)規則的過(guò)程。復制之后,我們打開(kāi)網(wǎng)站(例如發(fā)布論壇的地方),然后將其發(fā)布。對于軟件,它是模仿我們的帖子,發(fā)布文章,如何發(fā)布,這就是數據發(fā)布的過(guò)程。
優(yōu)采云 采集器是用于采集數據的軟件。它是網(wǎng)絡(luò )上功能最強大的采集器。它可以捕獲您看到的幾乎所有Web內容。
一、 優(yōu)采云 采集器數據捕獲原理:
優(yōu)采云采集器如何抓取數據取決于您的規則。要獲取網(wǎng)頁(yè)的所有內容,您需要首先獲取該網(wǎng)頁(yè)的URL。這是URL。該程序根據規則獲取列表頁(yè)面,分析其中的URL,然后獲取URL的Web內容。根據采集規則,分析下載的網(wǎng)頁(yè),分離標題內容和其他信息,然后保存。如果選擇下載圖像等網(wǎng)絡(luò )資源,則程序將分析采集的數據,找到圖像的下載地址,資源等,然后在本地下載。
二、 優(yōu)采云 采集器數據發(fā)布原則:
采集數據后,默認情況下將其保存在本地。我們可以使用以下方法來(lái)處理數據。
1.什么也不要做。由于數據本身存儲在數據庫中(訪(fǎng)問(wèn),db3,mysql,sqlserver),因此,如果僅查看數據,則可以使用相關(guān)軟件將其打開(kāi)。
2. 網(wǎng)站已發(fā)布到網(wǎng)站。該程序將模仿瀏覽器向您的網(wǎng)站發(fā)送數據,可以達到手動(dòng)發(fā)布的效果。
3.直接轉到數據庫。您只需要編寫(xiě)一些SQL語(yǔ)句,程序就會(huì )根據您的SQL語(yǔ)句將數據導入數據庫。
4.另存為本地文件。該程序將讀取數據庫中的數據,并以某種格式將其另存為本地sql或文本文件。
三、 優(yōu)采云 采集器工作流程:
優(yōu)采云 采集器分兩步采集數據,一個(gè)是采集數據,另一個(gè)是發(fā)布數據。這兩個(gè)過(guò)程可以分開(kāi)。
1.采集數據,包括采集URL和采集內容。此過(guò)程是獲取數據的過(guò)程。我們制定規則并處理采礦過(guò)程的內容。
2,發(fā)布內容是將數據發(fā)布到自己的論壇,cms的過(guò)程也是將數據作為現有過(guò)程執行。您可以使用WEB,數據庫存儲進(jìn)行在線(xiàn)發(fā)布或另存為本地文件。
但我必須在此提醒大多數網(wǎng)站管理員,百度颶風(fēng)算法2. 0的引入進(jìn)一步提高了百度對采集這種現象的懲罰程度和懲罰范圍。在經(jīng)驗豐富的時(shí)代,是否使用文章 采集器取決于您的想法!
最佳實(shí)踐:Python網(wǎng)絡(luò )數據采集4:使用API
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 409 次瀏覽 ? 2020-09-01 06:09
通常情況下,程序員可以使用HTPP協(xié)議向API發(fā)起請求以獲取某些信息,并且API將以XML或JSON格式返回服務(wù)器的響應信息.
通常,您不會(huì )考慮將API用作網(wǎng)絡(luò )數據采集,但實(shí)際上,兩者(都發(fā)送HTTP請求)和結果(都獲取信息)所使用的許多技術(shù)都是相似的;兩者通常是同一個(gè)關(guān)系.
例如,將Wikipedia編輯歷史記錄(與編輯者的IP地址)和IP地址解析API結合起來(lái),以獲取Wikipedia條目的編輯者的地理位置.
4.1 API概述
Google API
4.2 API通用規則
API使用非常標準的規則集來(lái)生成數據,并且所生成的數據以非常標準的方式進(jìn)行組織.
四種方法: GET,POST,PUT,DELETE
驗證: 需要客戶(hù)驗證
4.3服務(wù)器響應
大多數反饋數據格式是XML和JSON
過(guò)去,服務(wù)器使用PHP和.NET等程序作為API的接收器. 現在,服務(wù)器端還使用了一些JavaScript框架作為API的發(fā)送和接收端,例如Angular或Backbone.
API調用:
4.4回聲巢
Echo Nest音樂(lè )數據網(wǎng)站
4.5 Twitter API
pip安裝推特
from twitter import Twitter
t = Twitter(auth=OAuth(,,,))
pythonTweets = t.search.tweets(q = "#python")
print(pythonTweets)
發(fā)布推文4.6 Google API
無(wú)論您要處理哪種信息,包括語(yǔ)言翻譯,地理位置,日歷,甚至是遺傳數據,Google都會(huì )提供API. Google還為其一些著(zhù)名的應用程序提供API,例如Gmail,YouTube和Blogger.
4.7解析JSON數據
import json
from urllib.request import urlopen
def getCountry(ipAddress):
response = urlopen("http://freegeoip.net/json/"+ipAddress).read().decode('utf-8')
responseJson = json.loads(response)
return responseJson.get("country_code")
print(getCountry("50.78.253.58"))
4.8返回主題
將多個(gè)數據源組合為新形式,或使用API??作為工具從新的角度解釋采集中的數據.
首先做一個(gè)采集 Wikipedia的基本程序,找到編輯歷史記錄頁(yè)面,然后在編輯歷史記錄中找出IP地址
# -*- coding: utf-8 -*-
from urllib.request import urlopen
from bs4 import BeautifulSoup
import datetime
import random
import re
import json
random.seed(datetime.datetime.now())
# https://en.wikipedia.org/wiki/Python_(programming_language)
def getLinks(articleUrl):
html = urlopen("http://en.wikipedia.org"+articleUrl)
bsObj = BeautifulSoup(html)
return bsObj.find("div",{"id":"bodyContent"}).findAll("a", href=re.compile("^(/wiki/)((?!:).)*$"))
def getHistoryIPs(pageUrl):
# 編輯歷史頁(yè)面URL鏈接格式是:
# https://en.wikipedia.org/w/index.php?title=Python_(programming_language)&action=history
pageUrl = pageUrl.replace("/wiki/", "")
historyUrl = "https://en.wikipedia.org/w/ind ... ot%3B
print("history url is: "+historyUrl)
html = urlopen(historyUrl)
bsObj = BeautifulSoup(html)
# 找出class屬性是"mw-anonuserlink"的鏈接
# 它們用IP地址代替用戶(hù)名
ipAddresses = bsObj.findAll("a", {"class":"mw-anonuserlink"})
addressList = set()
for ipAddress in ipAddresses:
addressList.add(ipAddress.get_text())
return addressList
links = getLinks("/wiki/Python_(programming_language)")
def getCountry(ipAddress):
try:
response = urlopen("http://freegeoip.net/json/"+ipAddress).read().decode('utf-8')
except HTTPError:
return None
responseJson = json.loads(response)
return responseJson.get("country_code")
while (len(links) > 0):
for link in links:
print("-------------------")
historyIPs = getHistoryIPs(link.attrs["href"])
for historyIP in historyIPs:
#print(historyIP)
country = getCountry(historyIP)
if country is not None:
print(historyIP+" is from "+country)
newLink = links[random.randint(0, len(links)-1)].attrs["href"]
links = getLinks(newLink)
4.9關(guān)于A(yíng)PI的更多信息
Leonard Richardson,Mike Amundsen和Sam Ruby的RESTful Web API()為使用Web API提供了非常全面的理論和實(shí)踐指導. 此外,Mike Amundsen的精彩視頻教學(xué)課程“為Web()設計API”還可以教您創(chuàng )建自己的API. 如果您想方便地共享采集數據,那么他的視頻非常有用 查看全部
Python網(wǎng)絡(luò )數據采集 4: 使用API??
通常情況下,程序員可以使用HTPP協(xié)議向API發(fā)起請求以獲取某些信息,并且API將以XML或JSON格式返回服務(wù)器的響應信息.
通常,您不會(huì )考慮將API用作網(wǎng)絡(luò )數據采集,但實(shí)際上,兩者(都發(fā)送HTTP請求)和結果(都獲取信息)所使用的許多技術(shù)都是相似的;兩者通常是同一個(gè)關(guān)系.
例如,將Wikipedia編輯歷史記錄(與編輯者的IP地址)和IP地址解析API結合起來(lái),以獲取Wikipedia條目的編輯者的地理位置.
4.1 API概述
Google API
4.2 API通用規則
API使用非常標準的規則集來(lái)生成數據,并且所生成的數據以非常標準的方式進(jìn)行組織.
四種方法: GET,POST,PUT,DELETE
驗證: 需要客戶(hù)驗證
4.3服務(wù)器響應
大多數反饋數據格式是XML和JSON
過(guò)去,服務(wù)器使用PHP和.NET等程序作為API的接收器. 現在,服務(wù)器端還使用了一些JavaScript框架作為API的發(fā)送和接收端,例如Angular或Backbone.
API調用:
4.4回聲巢
Echo Nest音樂(lè )數據網(wǎng)站
4.5 Twitter API
pip安裝推特
from twitter import Twitter
t = Twitter(auth=OAuth(,,,))
pythonTweets = t.search.tweets(q = "#python")
print(pythonTweets)
發(fā)布推文4.6 Google API
無(wú)論您要處理哪種信息,包括語(yǔ)言翻譯,地理位置,日歷,甚至是遺傳數據,Google都會(huì )提供API. Google還為其一些著(zhù)名的應用程序提供API,例如Gmail,YouTube和Blogger.
4.7解析JSON數據
import json
from urllib.request import urlopen
def getCountry(ipAddress):
response = urlopen("http://freegeoip.net/json/"+ipAddress).read().decode('utf-8')
responseJson = json.loads(response)
return responseJson.get("country_code")
print(getCountry("50.78.253.58"))
4.8返回主題
將多個(gè)數據源組合為新形式,或使用API??作為工具從新的角度解釋采集中的數據.
首先做一個(gè)采集 Wikipedia的基本程序,找到編輯歷史記錄頁(yè)面,然后在編輯歷史記錄中找出IP地址
# -*- coding: utf-8 -*-
from urllib.request import urlopen
from bs4 import BeautifulSoup
import datetime
import random
import re
import json
random.seed(datetime.datetime.now())
# https://en.wikipedia.org/wiki/Python_(programming_language)
def getLinks(articleUrl):
html = urlopen("http://en.wikipedia.org"+articleUrl)
bsObj = BeautifulSoup(html)
return bsObj.find("div",{"id":"bodyContent"}).findAll("a", href=re.compile("^(/wiki/)((?!:).)*$"))
def getHistoryIPs(pageUrl):
# 編輯歷史頁(yè)面URL鏈接格式是:
# https://en.wikipedia.org/w/index.php?title=Python_(programming_language)&action=history
pageUrl = pageUrl.replace("/wiki/", "")
historyUrl = "https://en.wikipedia.org/w/ind ... ot%3B
print("history url is: "+historyUrl)
html = urlopen(historyUrl)
bsObj = BeautifulSoup(html)
# 找出class屬性是"mw-anonuserlink"的鏈接
# 它們用IP地址代替用戶(hù)名
ipAddresses = bsObj.findAll("a", {"class":"mw-anonuserlink"})
addressList = set()
for ipAddress in ipAddresses:
addressList.add(ipAddress.get_text())
return addressList
links = getLinks("/wiki/Python_(programming_language)")
def getCountry(ipAddress):
try:
response = urlopen("http://freegeoip.net/json/"+ipAddress).read().decode('utf-8')
except HTTPError:
return None
responseJson = json.loads(response)
return responseJson.get("country_code")
while (len(links) > 0):
for link in links:
print("-------------------")
historyIPs = getHistoryIPs(link.attrs["href"])
for historyIP in historyIPs:
#print(historyIP)
country = getCountry(historyIP)
if country is not None:
print(historyIP+" is from "+country)
newLink = links[random.randint(0, len(links)-1)].attrs["href"]
links = getLinks(newLink)
4.9關(guān)于A(yíng)PI的更多信息
Leonard Richardson,Mike Amundsen和Sam Ruby的RESTful Web API()為使用Web API提供了非常全面的理論和實(shí)踐指導. 此外,Mike Amundsen的精彩視頻教學(xué)課程“為Web()設計API”還可以教您創(chuàng )建自己的API. 如果您想方便地共享采集數據,那么他的視頻非常有用
正式推出:QuicklibTrade A股行情采集API方案2.6正式發(fā)布
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 622 次瀏覽 ? 2020-08-31 01:19
/
/x/page/b0822umt6kk.html?pcsharecode=JjoaXqFW&sf=uri
版本升級說(shuō)明
2.6版將采集數據字段從15增加到20
版本2.5進(jìn)行了改進(jìn)和發(fā)布
2.4版是大量個(gè)人使用的初始版本.
QuicklibTrade簡(jiǎn)介
QuicklibTrade是一個(gè)簡(jiǎn)單易用的A股程序交易程序,主要使用采集來(lái)獲取股票軟件客戶(hù)(例如Big Wisdom,Straight Flush,Oriental Fortune,Tongdaxin)的數據,并提供多種接口. 支持直接調用公式編輯器的數據,大大簡(jiǎn)化了策略開(kāi)發(fā). 許多經(jīng)典指標公式都可以直接使用.
關(guān)鍵是免費使用
QuicklibTrade市場(chǎng)數據采集視頻教學(xué)
采集和API調用說(shuō)明
/x/page/y0842b72xbh.html?pcsharecode=Y0h4qOSw&sf=uri
包括使用虛擬機采集市場(chǎng)的說(shuō)明
/x/page/b0822umt6kk.html?pcsharecode=JjoaXqFW&sf=uri
QuicklibTrade免費A股Level2報價(jià)界面
/
注冊
/register.html
下載
/mdapi.asp
其他相關(guān)問(wèn)題,請瀏覽
/ comm / category / 20 /
在第一階段中,僅發(fā)布市場(chǎng)信息采集和接口,而在第二階段中,發(fā)布市場(chǎng)信息的交易接口和LAN網(wǎng)絡(luò )接口
由于每個(gè)主機只能運行1個(gè)DataUpdate.exe,為了使用多個(gè)DataUpdate.exe通過(guò)LAN網(wǎng)絡(luò )接口采集共享數據以加快更新速度,因此采用了虛擬機方法.
已提供虛擬機鏡像網(wǎng)絡(luò )磁盤(pán)下載,主要用于市場(chǎng)的LAN網(wǎng)絡(luò )接口. 每個(gè)虛擬機可以打開(kāi)1個(gè)Big Wisdom和DataUpdate.exe副本以加快數據更新
QuicklibTrade體系結構如下圖所示:
它分為市場(chǎng)界面和交易界面. 本文僅說(shuō)明市場(chǎng)界面. 交易界面計劃于2019年初發(fā)布.
市場(chǎng)報價(jià)接口版本2.1的第一階段支持明智的分界線(xiàn)模式,并且字體選擇經(jīng)典字體. 開(kāi)始菜單保留沖洗,東方財富和通達信的數據采集方案菜單.
1)支持市場(chǎng)數據采集
2)支持指標數據采集
3)支持交易信號,可以使用Great Wisdom公式編輯器制定交易策略,使用特定的熟悉度來(lái)指示購買(mǎi)和出售,將指標加載到Great Wisdom列中,該界面可識別數據的價(jià)值,并直接判斷通過(guò)界面確定交易的熟悉程度.
每次采集同時(shí)支持12個(gè)字段,這12個(gè)字段可以是報價(jià),指標或交易信號.
**運行平臺: ** Windows7,Windows78,Windows10,WindowsServer2008,WindowsServer2012,WindowsServer2016和其他版本
運行虛擬機的網(wǎng)絡(luò )接口必須是64位操作系統
其他接口可用于32位和64位Windows操作系統.
**硬件配置: **請使用單屏顯示,使用2個(gè)或更多屏幕會(huì )導致數據混亂
受支持的接口包括Python接口和C ++接口.
** Python接口: **可以由Python直接調用
從/mdapi.asp(即.py文件)下載的示例是Python2.7的示例,并且理論上支持Python3.x.
Python界面中.dll文件的理論適用于任何Python版本
** C ++接口: **支持所有支持調用DLL的語(yǔ)言,包括C ++,Java,C#,VB.NET,易用語(yǔ)言等.
第一期發(fā)行
?。?)數據更新主程序
?。?)A股CTP接口C ++接口(適用于運行DataUpdate的同一臺計算機)
?。?)A股CTP接口C ++接口演示期貨CTP接口演示
?。?)Dataupdate分布式程序等待發(fā)布,市場(chǎng)數據更新分布式程序
?。?)適用于LAN的Python MSSQL接口,由多個(gè)DataUpdate采集共享
?。?)Python Access接口適用于運行DataUpdate的同一臺計算機
Python ShareMemory接口Python共享內存數據接口,適用于運行DataUpdate的同一臺計算機
還提供了一個(gè)虛擬機環(huán)境,主要用于MSSQL數據庫接口和將來(lái)的LocalNetwork接口(LAN網(wǎng)絡(luò )數據接口)
第二期內容,新界面,版本2.2
?。?)等待發(fā)布的Python LocalNetwork接口Python LAN共享數據接口(適用于LAN,同時(shí)采集多個(gè)DataUpdates)
?。?)等待釋放的C ++ LocalNetwork接口. Python LAN共享數據接口(適用于LAN,同時(shí)共享多個(gè)DataUpdate采集)
使用步驟(以大智慧為例):
1)下載Great Wisdom并安裝Great Wisdom程序
付費版本有Level2版本和免費版本.
Great Wisdom的官方下載:
/detail/function_365.jsp?product=116
2)安裝大智慧
安裝Great Wisdom,安裝完成,Great Wisdom在桌面上.
如果在虛擬機上運行,??則由于路徑較長(cháng),虛擬機可能無(wú)法直接安裝. 安裝物理機后,可以將C盤(pán)下的“ dzh365”目錄復制.
將目錄安裝到虛擬機上以運行大智慧程序
3)注冊并登錄到大智慧
您也可以使用QQ和微信登錄
4)進(jìn)入大智慧股票排序模式
在上圖中的Big Wisdom界面上單擊紅色按鈕以輸入“報價(jià)列表”
5)在標題欄中調出行和列分隔符
在大智慧中,我們使用分頻器模式采集數據,因此我們需要調用分頻器
右鍵單擊并從列菜單中選擇“列分隔符”和“行分隔符”
按從左到右的順序操作標識的列,版本2.1為12列
您還可以為所有列和行設置分隔線(xiàn).
設置完成后,如下圖所示
6)在“大智慧”菜單中設置經(jīng)典字體,不要更改字體大小和樣式顏色
7)啟動(dòng)采集程序,采集程序將自動(dòng)激活打開(kāi)的Big Wisdom程序,并在第一行中標識數據,您可以手動(dòng)檢查標識的數據是否正確.
?。ㄈ绻R別錯誤,通常是由于未將字體設置為經(jīng)典字體引起的,請確保使用經(jīng)典字體再試一次)
從以下URL下載
解壓縮后,運行DataUpdate.exe
8)如果通過(guò)手動(dòng)觀(guān)察識別的第一行中的數字是正確的,請按DdtaUpdate.exe程序的按鈕以打開(kāi)識別,然后Big Wisdom將自動(dòng)在窗口的前面滾動(dòng)并識別它.
可以通過(guò)API獲取報價(jià)的股票代碼的12個(gè)數據字段.
當前,只能識別數字,但是不能識別中文. 因此,無(wú)法識別“大智慧”中的“十億”之類(lèi)的漢字. 請不要識別不是純數字的指標.
仔細檢查黃色框中的數字是否正確識別. 如果它們是錯誤的,則可能是由于字體設置錯誤所致. 請重置字體,然后重試
如果正確,請激活DataUpdate.exe程序,然后單擊按鈕
DataUpdate.exe將自動(dòng)最小化,并開(kāi)始滾動(dòng)窗口以進(jìn)行識別
如果單擊任務(wù)欄圖標,則可以最大化DataUpdate.exe,并且識別將自動(dòng)停止,或單擊按鈕停止.
打開(kāi)C ++和Python API,您可以獲得市場(chǎng)報價(jià)
C ++接口提供與期貨CTP接口相同的方法,熟悉C ++和CTP的朋友可以更快地開(kāi)始使用
1)共享內存接口和Access接口只能在運行DataUpdate.exe的計算機上運行
2)可以將MSSQL接口寫(xiě)入MSSQL數據庫,其他PC主機調用MSSQL數據庫以獲取數據.
3)局域網(wǎng)數據接口(在2.2版之后發(fā)布)將發(fā)布到整個(gè)局域網(wǎng). 局域網(wǎng)中的所有主機都可以通過(guò)API獲取市場(chǎng)信息. 您還可以在多個(gè)主機上運行DataUpdate.exe
這樣,數據更新速度將提高數倍.
在期貨中開(kāi)設一個(gè)帳戶(hù)并綁定該帳戶(hù)以自動(dòng)激活DataUpdate.exe的功能
免費激活方法
1. 請按照以下步驟打開(kāi)期貨帳戶(hù)并綁定期貨帳戶(hù)以激活
宏遠期貨是一家上市公司,隸屬于深灣宏遠
選擇宏遠期貨進(jìn)行網(wǎng)上開(kāi)戶(hù),選擇重慶銷(xiāo)售部門(mén)作為營(yíng)業(yè)部
推薦人填寫(xiě): 上海良北信息技術(shù)有限公司
開(kāi)設帳戶(hù)的詳細步驟:
2. 點(diǎn)激活
您也可以參考激活方法
用戶(hù)注冊| QuickLibTrade中國網(wǎng)站
“期貨紀錄片軟件視頻教學(xué)四集”
“酷交易者期貨復制軟件”
“以低傭金開(kāi)設中國期貨帳戶(hù)”
“ mdshare財務(wù)數據接口包”
“ Python定量交易框架的性能評估”
python定量交易
“ Quicklib程序化交易框架”
Caffe深度學(xué)習框架
“定量社區”
Python人工智能算法庫
<p>tushare,A股Level2數據,A股報價(jià)界面,A股Level2報價(jià)界面,TuShare,中國金融數據,期貨歷史交易記錄下載,歷史數據網(wǎng)絡(luò )磁盤(pán)下載,A股,期貨歷史數據下載,東方財富選擇,金融數據研究終端,iFinD,Go-Goal數據終端,Skysoft數據,新浪Level2報價(jià),恒生數據,數據庫金融數據(費用)以及深度分析API服務(wù),Wind Wind,Tongdaxin免費數據,免費的歷史數據 查看全部
QuicklibTrade A股市場(chǎng)采集API解決方案2.6正式發(fā)布
/

/x/page/b0822umt6kk.html?pcsharecode=JjoaXqFW&sf=uri



版本升級說(shuō)明
2.6版將采集數據字段從15增加到20
版本2.5進(jìn)行了改進(jìn)和發(fā)布
2.4版是大量個(gè)人使用的初始版本.
QuicklibTrade簡(jiǎn)介
QuicklibTrade是一個(gè)簡(jiǎn)單易用的A股程序交易程序,主要使用采集來(lái)獲取股票軟件客戶(hù)(例如Big Wisdom,Straight Flush,Oriental Fortune,Tongdaxin)的數據,并提供多種接口. 支持直接調用公式編輯器的數據,大大簡(jiǎn)化了策略開(kāi)發(fā). 許多經(jīng)典指標公式都可以直接使用.
關(guān)鍵是免費使用
QuicklibTrade市場(chǎng)數據采集視頻教學(xué)
采集和API調用說(shuō)明
/x/page/y0842b72xbh.html?pcsharecode=Y0h4qOSw&sf=uri
包括使用虛擬機采集市場(chǎng)的說(shuō)明
/x/page/b0822umt6kk.html?pcsharecode=JjoaXqFW&sf=uri
QuicklibTrade免費A股Level2報價(jià)界面
/
注冊
/register.html
下載
/mdapi.asp
其他相關(guān)問(wèn)題,請瀏覽
/ comm / category / 20 /
在第一階段中,僅發(fā)布市場(chǎng)信息采集和接口,而在第二階段中,發(fā)布市場(chǎng)信息的交易接口和LAN網(wǎng)絡(luò )接口
由于每個(gè)主機只能運行1個(gè)DataUpdate.exe,為了使用多個(gè)DataUpdate.exe通過(guò)LAN網(wǎng)絡(luò )接口采集共享數據以加快更新速度,因此采用了虛擬機方法.
已提供虛擬機鏡像網(wǎng)絡(luò )磁盤(pán)下載,主要用于市場(chǎng)的LAN網(wǎng)絡(luò )接口. 每個(gè)虛擬機可以打開(kāi)1個(gè)Big Wisdom和DataUpdate.exe副本以加快數據更新
QuicklibTrade體系結構如下圖所示:
它分為市場(chǎng)界面和交易界面. 本文僅說(shuō)明市場(chǎng)界面. 交易界面計劃于2019年初發(fā)布.
市場(chǎng)報價(jià)接口版本2.1的第一階段支持明智的分界線(xiàn)模式,并且字體選擇經(jīng)典字體. 開(kāi)始菜單保留沖洗,東方財富和通達信的數據采集方案菜單.
1)支持市場(chǎng)數據采集
2)支持指標數據采集
3)支持交易信號,可以使用Great Wisdom公式編輯器制定交易策略,使用特定的熟悉度來(lái)指示購買(mǎi)和出售,將指標加載到Great Wisdom列中,該界面可識別數據的價(jià)值,并直接判斷通過(guò)界面確定交易的熟悉程度.
每次采集同時(shí)支持12個(gè)字段,這12個(gè)字段可以是報價(jià),指標或交易信號.
**運行平臺: ** Windows7,Windows78,Windows10,WindowsServer2008,WindowsServer2012,WindowsServer2016和其他版本
運行虛擬機的網(wǎng)絡(luò )接口必須是64位操作系統
其他接口可用于32位和64位Windows操作系統.
**硬件配置: **請使用單屏顯示,使用2個(gè)或更多屏幕會(huì )導致數據混亂
受支持的接口包括Python接口和C ++接口.
** Python接口: **可以由Python直接調用
從/mdapi.asp(即.py文件)下載的示例是Python2.7的示例,并且理論上支持Python3.x.
Python界面中.dll文件的理論適用于任何Python版本
** C ++接口: **支持所有支持調用DLL的語(yǔ)言,包括C ++,Java,C#,VB.NET,易用語(yǔ)言等.
第一期發(fā)行
?。?)數據更新主程序
?。?)A股CTP接口C ++接口(適用于運行DataUpdate的同一臺計算機)
?。?)A股CTP接口C ++接口演示期貨CTP接口演示
?。?)Dataupdate分布式程序等待發(fā)布,市場(chǎng)數據更新分布式程序
?。?)適用于LAN的Python MSSQL接口,由多個(gè)DataUpdate采集共享
?。?)Python Access接口適用于運行DataUpdate的同一臺計算機
Python ShareMemory接口Python共享內存數據接口,適用于運行DataUpdate的同一臺計算機
還提供了一個(gè)虛擬機環(huán)境,主要用于MSSQL數據庫接口和將來(lái)的LocalNetwork接口(LAN網(wǎng)絡(luò )數據接口)
第二期內容,新界面,版本2.2
?。?)等待發(fā)布的Python LocalNetwork接口Python LAN共享數據接口(適用于LAN,同時(shí)采集多個(gè)DataUpdates)
?。?)等待釋放的C ++ LocalNetwork接口. Python LAN共享數據接口(適用于LAN,同時(shí)共享多個(gè)DataUpdate采集)
使用步驟(以大智慧為例):
1)下載Great Wisdom并安裝Great Wisdom程序
付費版本有Level2版本和免費版本.
Great Wisdom的官方下載:
/detail/function_365.jsp?product=116
2)安裝大智慧
安裝Great Wisdom,安裝完成,Great Wisdom在桌面上.
如果在虛擬機上運行,??則由于路徑較長(cháng),虛擬機可能無(wú)法直接安裝. 安裝物理機后,可以將C盤(pán)下的“ dzh365”目錄復制.

將目錄安裝到虛擬機上以運行大智慧程序

3)注冊并登錄到大智慧

您也可以使用QQ和微信登錄
4)進(jìn)入大智慧股票排序模式

在上圖中的Big Wisdom界面上單擊紅色按鈕以輸入“報價(jià)列表”

5)在標題欄中調出行和列分隔符
在大智慧中,我們使用分頻器模式采集數據,因此我們需要調用分頻器
右鍵單擊并從列菜單中選擇“列分隔符”和“行分隔符”
按從左到右的順序操作標識的列,版本2.1為12列
您還可以為所有列和行設置分隔線(xiàn).

設置完成后,如下圖所示

6)在“大智慧”菜單中設置經(jīng)典字體,不要更改字體大小和樣式顏色


7)啟動(dòng)采集程序,采集程序將自動(dòng)激活打開(kāi)的Big Wisdom程序,并在第一行中標識數據,您可以手動(dòng)檢查標識的數據是否正確.
?。ㄈ绻R別錯誤,通常是由于未將字體設置為經(jīng)典字體引起的,請確保使用經(jīng)典字體再試一次)
從以下URL下載

解壓縮后,運行DataUpdate.exe

8)如果通過(guò)手動(dòng)觀(guān)察識別的第一行中的數字是正確的,請按DdtaUpdate.exe程序的按鈕以打開(kāi)識別,然后Big Wisdom將自動(dòng)在窗口的前面滾動(dòng)并識別它.
可以通過(guò)API獲取報價(jià)的股票代碼的12個(gè)數據字段.
當前,只能識別數字,但是不能識別中文. 因此,無(wú)法識別“大智慧”中的“十億”之類(lèi)的漢字. 請不要識別不是純數字的指標.

仔細檢查黃色框中的數字是否正確識別. 如果它們是錯誤的,則可能是由于字體設置錯誤所致. 請重置字體,然后重試

如果正確,請激活DataUpdate.exe程序,然后單擊按鈕
DataUpdate.exe將自動(dòng)最小化,并開(kāi)始滾動(dòng)窗口以進(jìn)行識別
如果單擊任務(wù)欄圖標,則可以最大化DataUpdate.exe,并且識別將自動(dòng)停止,或單擊按鈕停止.
打開(kāi)C ++和Python API,您可以獲得市場(chǎng)報價(jià)
C ++接口提供與期貨CTP接口相同的方法,熟悉C ++和CTP的朋友可以更快地開(kāi)始使用
1)共享內存接口和Access接口只能在運行DataUpdate.exe的計算機上運行
2)可以將MSSQL接口寫(xiě)入MSSQL數據庫,其他PC主機調用MSSQL數據庫以獲取數據.
3)局域網(wǎng)數據接口(在2.2版之后發(fā)布)將發(fā)布到整個(gè)局域網(wǎng). 局域網(wǎng)中的所有主機都可以通過(guò)API獲取市場(chǎng)信息. 您還可以在多個(gè)主機上運行DataUpdate.exe
這樣,數據更新速度將提高數倍.
在期貨中開(kāi)設一個(gè)帳戶(hù)并綁定該帳戶(hù)以自動(dòng)激活DataUpdate.exe的功能
免費激活方法
1. 請按照以下步驟打開(kāi)期貨帳戶(hù)并綁定期貨帳戶(hù)以激活
宏遠期貨是一家上市公司,隸屬于深灣宏遠
選擇宏遠期貨進(jìn)行網(wǎng)上開(kāi)戶(hù),選擇重慶銷(xiāo)售部門(mén)作為營(yíng)業(yè)部
推薦人填寫(xiě): 上海良北信息技術(shù)有限公司
開(kāi)設帳戶(hù)的詳細步驟:
2. 點(diǎn)激活
您也可以參考激活方法
用戶(hù)注冊| QuickLibTrade中國網(wǎng)站


“期貨紀錄片軟件視頻教學(xué)四集”
“酷交易者期貨復制軟件”
“以低傭金開(kāi)設中國期貨帳戶(hù)”
“ mdshare財務(wù)數據接口包”
“ Python定量交易框架的性能評估”
python定量交易
“ Quicklib程序化交易框架”
Caffe深度學(xué)習框架
“定量社區”
Python人工智能算法庫
<p>tushare,A股Level2數據,A股報價(jià)界面,A股Level2報價(jià)界面,TuShare,中國金融數據,期貨歷史交易記錄下載,歷史數據網(wǎng)絡(luò )磁盤(pán)下載,A股,期貨歷史數據下載,東方財富選擇,金融數據研究終端,iFinD,Go-Goal數據終端,Skysoft數據,新浪Level2報價(jià),恒生數據,數據庫金融數據(費用)以及深度分析API服務(wù),Wind Wind,Tongdaxin免費數據,免費的歷史數據
一種基于網(wǎng)路爬蟲(chóng)和新浪API相結合的微博數據的采集方法與流程
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 410 次瀏覽 ? 2020-08-27 06:08
本發(fā)明涉及微博數據采集技術(shù)領(lǐng)域,特別是一種基于網(wǎng)路爬蟲(chóng)和新浪API 相結合的微博數據的采集方法。
背景技術(shù):
對于微博中數據采集非常重要,這樣也能為舉辦微博中社會(huì )安全 事件的探測提供重要的數據基礎。目前,微博的數據采集方式主要有 兩種:基于新浪API和針對新浪微博平臺的網(wǎng)路爬蟲(chóng)?;谛吕薃PI 的方案可以獲取格式比較規范的數據,但是其調用次數有一定的限制, 無(wú)法進(jìn)行大規模的數據爬取,并且有些信息難以獲取到;基于網(wǎng)路爬 蟲(chóng)的方式其實(shí)可以獲取大規模的數據,但是其頁(yè)面的剖析處理過(guò)程比 較復雜,并且其爬取的數據格式不規范,噪聲數據比較多。
技術(shù)實(shí)現要素:
本發(fā)明的目的是要解決現有技術(shù)中存在的不足,提供一種基于網(wǎng)路爬蟲(chóng)和 新浪API相結合的微博數據的采集方法。
為達到上述目的,本發(fā)明是根據以下技術(shù)方案施行的:
一種基于網(wǎng)路爬蟲(chóng)和新浪API相結合的微博數據的采集方法,包括以下步 驟:
Step1:基于新浪API從微博名人榜獲取種子用戶(hù)及其對應的粉絲用戶(hù)和關(guān) 注用戶(hù),加入到種子列表;
Step2:將種子列表轉換為種子URL,并判定種子用戶(hù)列表是否為空,若為 空則步入Step4,否則步入Step3;
Step3:遍歷種子列表,采用網(wǎng)路爬蟲(chóng)的方式,爬取種子用戶(hù)的相關(guān)微博信 息、微博評論信息和用戶(hù)個(gè)人信息,并將微博評論用戶(hù)加入到種子列表中;
Step4:結束。
具體地,所述Step3包括:
獲取種子列表中待爬取URL,并進(jìn)行URL解析與信息獲取,具體包括:獲 取用戶(hù)信息URL并步入相應頁(yè)面爬取用戶(hù)粉絲用戶(hù)和關(guān)注用戶(hù)以及爬取用戶(hù)的 其他相關(guān)信息;獲取用戶(hù)微博URL并步入相應頁(yè)面爬取微博轉發(fā)點(diǎn)贊、評論用 戶(hù)、爬取微博評論文本以及爬取微博其他相關(guān)信息;并將爬取的用戶(hù)粉絲用戶(hù) 和關(guān)注用戶(hù)、用戶(hù)的其他相關(guān)信息、微博轉發(fā)點(diǎn)贊、評論用戶(hù)、爬取微博評論 文本以及爬取微博其他相關(guān)建立相應的微博數據資源庫;同時(shí)將爬取的用戶(hù)粉 絲用戶(hù)和關(guān)注用戶(hù)、爬取的微博轉發(fā)點(diǎn)贊、評論用戶(hù)加入種子列表中。
與現有技術(shù)相比,本發(fā)明通過(guò)將新浪API和針對新浪微博平臺的網(wǎng)路爬蟲(chóng) 相結合,既可以獲取格式比較規范的微博數據,又能進(jìn)行大規模的數據爬取, 并且爬取的數據格式愈發(fā)規范,噪聲數據比較少,進(jìn)而才能為舉辦微博中社會(huì ) 安全風(fēng)波的探測提供重要的數據基礎。
附圖說(shuō)明
圖1為本發(fā)明的流程圖。
具體施行方法
下面結合具體施行例對本發(fā)明作進(jìn)一步描述,在此發(fā)明的示意性施行例以 及說(shuō)明拿來(lái)解釋本發(fā)明,但并不作為對本發(fā)明的限定。
如圖1所示,本施行例的一種基于網(wǎng)路爬蟲(chóng)和新浪API相結合的微博數據 的采集方法,包括以下步驟:
Step1:基于新浪API從微博名人榜獲取種子用戶(hù)及其對應的粉絲用戶(hù)和關(guān) 注用戶(hù),加入到種子列表;
Step2:將種子列表轉換為種子URL,并判定種子用戶(hù)列表是否為空,若為 空則步入Step4,否則步入Step3;
Step3:遍歷種子列表,采用網(wǎng)路爬蟲(chóng)的方式,爬取種子用戶(hù)的相關(guān)微博信 息、微博評論信息和用戶(hù)個(gè)人信息,并將微博評論用戶(hù)加入到種子列表中,具 體步驟為:獲取種子列表中待爬取URL,并進(jìn)行URL解析與信息獲取,具體包 括:獲取用戶(hù)信息URL并步入相應頁(yè)面從微博數據資源庫中爬取用戶(hù)粉絲用戶(hù) 和關(guān)注用戶(hù)以及爬取用戶(hù)的其他相關(guān)信息;獲取用戶(hù)微博URL并步入相應頁(yè)面 從微博數據資源庫中爬取微博轉發(fā)點(diǎn)贊、評論用戶(hù)、爬取微博評論文本以及爬 取微博其他相關(guān)信息;同時(shí)將爬取的用戶(hù)粉絲用戶(hù)和關(guān)注用戶(hù)、爬取的微博轉 發(fā)點(diǎn)贊、評論用戶(hù)加入種子列表中。
Step4:結束。
根據本施行例的方式采集完微博數據后,就可以對采集到的微博文本數據 進(jìn)行處理,清除其中的異常數據和噪音數據,實(shí)現數據格式的標準化,并建立 相應的微博資源庫,進(jìn)而才能為舉辦微博中社會(huì )安全風(fēng)波的探測提供重要的數 據基礎。
本發(fā)明的技術(shù)方案不限于上述具體施行例的限制,凡是按照本發(fā)明的技術(shù) 方案作出的技術(shù)變型,均落入本發(fā)明的保護范圍之內。
當前第1頁(yè)1&nbsp2&nbsp3&nbsp 查看全部
一種基于網(wǎng)路爬蟲(chóng)和新浪API相結合的微博數據的采集方法與流程

本發(fā)明涉及微博數據采集技術(shù)領(lǐng)域,特別是一種基于網(wǎng)路爬蟲(chóng)和新浪API 相結合的微博數據的采集方法。
背景技術(shù):
對于微博中數據采集非常重要,這樣也能為舉辦微博中社會(huì )安全 事件的探測提供重要的數據基礎。目前,微博的數據采集方式主要有 兩種:基于新浪API和針對新浪微博平臺的網(wǎng)路爬蟲(chóng)?;谛吕薃PI 的方案可以獲取格式比較規范的數據,但是其調用次數有一定的限制, 無(wú)法進(jìn)行大規模的數據爬取,并且有些信息難以獲取到;基于網(wǎng)路爬 蟲(chóng)的方式其實(shí)可以獲取大規模的數據,但是其頁(yè)面的剖析處理過(guò)程比 較復雜,并且其爬取的數據格式不規范,噪聲數據比較多。
技術(shù)實(shí)現要素:
本發(fā)明的目的是要解決現有技術(shù)中存在的不足,提供一種基于網(wǎng)路爬蟲(chóng)和 新浪API相結合的微博數據的采集方法。
為達到上述目的,本發(fā)明是根據以下技術(shù)方案施行的:
一種基于網(wǎng)路爬蟲(chóng)和新浪API相結合的微博數據的采集方法,包括以下步 驟:
Step1:基于新浪API從微博名人榜獲取種子用戶(hù)及其對應的粉絲用戶(hù)和關(guān) 注用戶(hù),加入到種子列表;
Step2:將種子列表轉換為種子URL,并判定種子用戶(hù)列表是否為空,若為 空則步入Step4,否則步入Step3;
Step3:遍歷種子列表,采用網(wǎng)路爬蟲(chóng)的方式,爬取種子用戶(hù)的相關(guān)微博信 息、微博評論信息和用戶(hù)個(gè)人信息,并將微博評論用戶(hù)加入到種子列表中;
Step4:結束。
具體地,所述Step3包括:
獲取種子列表中待爬取URL,并進(jìn)行URL解析與信息獲取,具體包括:獲 取用戶(hù)信息URL并步入相應頁(yè)面爬取用戶(hù)粉絲用戶(hù)和關(guān)注用戶(hù)以及爬取用戶(hù)的 其他相關(guān)信息;獲取用戶(hù)微博URL并步入相應頁(yè)面爬取微博轉發(fā)點(diǎn)贊、評論用 戶(hù)、爬取微博評論文本以及爬取微博其他相關(guān)信息;并將爬取的用戶(hù)粉絲用戶(hù) 和關(guān)注用戶(hù)、用戶(hù)的其他相關(guān)信息、微博轉發(fā)點(diǎn)贊、評論用戶(hù)、爬取微博評論 文本以及爬取微博其他相關(guān)建立相應的微博數據資源庫;同時(shí)將爬取的用戶(hù)粉 絲用戶(hù)和關(guān)注用戶(hù)、爬取的微博轉發(fā)點(diǎn)贊、評論用戶(hù)加入種子列表中。
與現有技術(shù)相比,本發(fā)明通過(guò)將新浪API和針對新浪微博平臺的網(wǎng)路爬蟲(chóng) 相結合,既可以獲取格式比較規范的微博數據,又能進(jìn)行大規模的數據爬取, 并且爬取的數據格式愈發(fā)規范,噪聲數據比較少,進(jìn)而才能為舉辦微博中社會(huì ) 安全風(fēng)波的探測提供重要的數據基礎。
附圖說(shuō)明
圖1為本發(fā)明的流程圖。
具體施行方法
下面結合具體施行例對本發(fā)明作進(jìn)一步描述,在此發(fā)明的示意性施行例以 及說(shuō)明拿來(lái)解釋本發(fā)明,但并不作為對本發(fā)明的限定。
如圖1所示,本施行例的一種基于網(wǎng)路爬蟲(chóng)和新浪API相結合的微博數據 的采集方法,包括以下步驟:
Step1:基于新浪API從微博名人榜獲取種子用戶(hù)及其對應的粉絲用戶(hù)和關(guān) 注用戶(hù),加入到種子列表;
Step2:將種子列表轉換為種子URL,并判定種子用戶(hù)列表是否為空,若為 空則步入Step4,否則步入Step3;
Step3:遍歷種子列表,采用網(wǎng)路爬蟲(chóng)的方式,爬取種子用戶(hù)的相關(guān)微博信 息、微博評論信息和用戶(hù)個(gè)人信息,并將微博評論用戶(hù)加入到種子列表中,具 體步驟為:獲取種子列表中待爬取URL,并進(jìn)行URL解析與信息獲取,具體包 括:獲取用戶(hù)信息URL并步入相應頁(yè)面從微博數據資源庫中爬取用戶(hù)粉絲用戶(hù) 和關(guān)注用戶(hù)以及爬取用戶(hù)的其他相關(guān)信息;獲取用戶(hù)微博URL并步入相應頁(yè)面 從微博數據資源庫中爬取微博轉發(fā)點(diǎn)贊、評論用戶(hù)、爬取微博評論文本以及爬 取微博其他相關(guān)信息;同時(shí)將爬取的用戶(hù)粉絲用戶(hù)和關(guān)注用戶(hù)、爬取的微博轉 發(fā)點(diǎn)贊、評論用戶(hù)加入種子列表中。
Step4:結束。
根據本施行例的方式采集完微博數據后,就可以對采集到的微博文本數據 進(jìn)行處理,清除其中的異常數據和噪音數據,實(shí)現數據格式的標準化,并建立 相應的微博資源庫,進(jìn)而才能為舉辦微博中社會(huì )安全風(fēng)波的探測提供重要的數 據基礎。
本發(fā)明的技術(shù)方案不限于上述具體施行例的限制,凡是按照本發(fā)明的技術(shù) 方案作出的技術(shù)變型,均落入本發(fā)明的保護范圍之內。
當前第1頁(yè)1&nbsp2&nbsp3&nbsp
用Python挖掘Twitter數據:數據采集
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 403 次瀏覽 ? 2020-08-26 04:59
這是一系列使用Python專(zhuān)門(mén)用于Twitter數據挖掘的文章中的第一篇。在第一部份中,我們將見(jiàn)到通過(guò)不同的方法來(lái)進(jìn)行Twitter的數據搜集。一旦我們構建好了一個(gè)數據集,在接下來(lái)的環(huán)節中,我們就將會(huì )討論一些有趣的數據應用。
注冊應用
為了才能訪(fǎng)問(wèn)Twitter數據編程,我們須要創(chuàng )建一個(gè)與Twitter的API交互的應用程序。
第一步是注冊一個(gè)你的應用程序。值得注意的是,您須要將您的瀏覽器轉入,登錄到Twitter(如果您仍未登陸),并注冊一個(gè)新的應用程序。您如今可以為您的應用程序選擇一個(gè)名稱(chēng)和說(shuō)明(例如“挖掘演示”或類(lèi)似)。您將收到一個(gè)消費者秘鑰和消費者密碼:這些都是應用程序設置,應一直保密。在您的應用程序的配置頁(yè)面,你也可以要求獲取一個(gè)訪(fǎng)問(wèn)令牌和訪(fǎng)問(wèn)令牌的密碼。類(lèi)似于消費者秘鑰,這些字符串也必須保密:他們提供的應用程序是代表您的賬戶(hù)訪(fǎng)問(wèn)到Twitter。默認權限是只讀的,這是我們在案例中須要的,但假如你決定改變您的許可,在應用中提供修改功能,你就必須再獲得一個(gè)新的訪(fǎng)問(wèn)令牌。
重要提示:使用Twitter的API時(shí)有速度限制,或者你想要提供一個(gè)可下載的數據集也會(huì )有限制,請參見(jiàn): >
您可以使用 Twitter提供的REST APIs與她們的服務(wù)進(jìn)行交互。那里還有一群基于Python的顧客,我們可以重復循環(huán)使用。尤其Tweepy是其中最有趣和最直白的一個(gè),所以我們一起把它安裝上去:
更新:Tweepy發(fā)布的3.4.0版本在Python3上出現了一些問(wèn)題,目前被綁定在GitHub上還不能進(jìn)行使用,因此在新的版本下來(lái)之前,我們仍然使用3.3.0版本。
更多的更新:Tweepy發(fā)布的3.5.0版本早已可以使用,似乎解決了上述提及的在Python3上的問(wèn)題。
為了授權我們的應用程序以代表我們訪(fǎng)問(wèn)Twitter,我們須要使用OAuth的界面:
現在的API變量是我們?yōu)榭梢栽赥witter上執行的大多數操作的入口點(diǎn)。
例如,我們可以看見(jiàn)我們自己的時(shí)間表(或者我們的Twitter主頁(yè)):
Tweepy提供方便的光標插口,對不同類(lèi)型的對象進(jìn)行迭代。在前面的事例中我們用10來(lái)限制我們正在閱讀的tweets的數目,但是其實(shí)也許我們是可以訪(fǎng)問(wèn)更多的。狀態(tài)變量是Status() class的一個(gè)實(shí)例,是訪(fǎng)問(wèn)數據時(shí)一個(gè)漂亮的包裝。Twitter API的JSON響應在_json屬性(帶有前導頓號)上是可用的,它不是純JSON字符串,而是一個(gè)字典。
所以前面的代碼可以被重新寫(xiě)入去處理/存儲JSON:
如果我們想要一個(gè)所有用戶(hù)的名單?來(lái)這里:
那么我們所有的tweets的列表呢? 也很簡(jiǎn)單:
通過(guò)這些方法,我們可以很容易地搜集tweets(以及更多),并將它們儲存為原創(chuàng )的JSON格式,可以很方便的根據我們的儲存格式將其轉換為不同的數據模型(很多NoSQL技術(shù)提供一些批量導出功能)。
process_or_store()功能是您的自定義施行占位符。最簡(jiǎn)單的形式就是你可以只復印出JSON,每行一個(gè)tweet:
流
如果我們要“保持聯(lián)接”,并搜集所有關(guān)于特定風(fēng)波將會(huì )出現的tweets,流API就是我們所須要的。我們須要擴充StreamListener()來(lái)定義我們處理輸入數據的形式。一個(gè)用#python hashtag搜集了所有新的tweet的事例:
根據不同的搜索詞,我們可以在幾分鐘之內搜集到成千上萬(wàn)的tweet。世界性覆蓋的現場(chǎng)活動(dòng)尤其這么(世界杯、超級杯、奧斯卡頒獎典禮等),所以保持關(guān)注JSON文件,看看它下降的速率是多么的快,并審視你的測試可能須要多少tweet。以上腳本將把每位tweet保存在新的行中,所以你可以從Unix shell中使用wc-l python.json命令來(lái)了解到你搜集了多少tweet。
你可以在下邊的要點(diǎn)中見(jiàn)到Twitter的API流的一個(gè)最小工作示例:
twitter_stream_downloader.py
總結
我們早已介紹了tweepy作為通過(guò)Python訪(fǎng)問(wèn)Twitter數據的一個(gè)相當簡(jiǎn)單的工具。我們可以按照明晰的“tweet”項目目標搜集一些不同類(lèi)型的數據。
一旦我們搜集了一些數據,在剖析應用方面的就可以進(jìn)行展開(kāi)了。在接下來(lái)的內容中,我們將討論部份問(wèn)題。
簡(jiǎn)介:Marco Bonzanini是美國紐約的一個(gè)數據科學(xué)家?;钴S于PyData社區的他喜歡從事文本剖析和數據挖掘的應用工作。他是“用Python把握社會(huì )化媒體挖掘”( 2016月7月出版)的作者。
原文>>
文章來(lái)源36大數據, ,微信號dashuju36 ,36大數據是一個(gè)專(zhuān)注大數據創(chuàng )業(yè)、大數據技術(shù)與剖析、大數據商業(yè)與應用的網(wǎng)站。分享大數據的干貨教程和大數據應用案例,提供大數據剖析工具和資料下載,解決大數據產(chǎn)業(yè)鏈上的創(chuàng )業(yè)、技術(shù)、分析、商業(yè)、應用等問(wèn)題,為大數據產(chǎn)業(yè)鏈上的公司和數據行業(yè)從業(yè)人員提供支持與服務(wù)。
via:shumeng
End. 查看全部
用Python挖掘Twitter數據:數據采集
這是一系列使用Python專(zhuān)門(mén)用于Twitter數據挖掘的文章中的第一篇。在第一部份中,我們將見(jiàn)到通過(guò)不同的方法來(lái)進(jìn)行Twitter的數據搜集。一旦我們構建好了一個(gè)數據集,在接下來(lái)的環(huán)節中,我們就將會(huì )討論一些有趣的數據應用。
注冊應用
為了才能訪(fǎng)問(wèn)Twitter數據編程,我們須要創(chuàng )建一個(gè)與Twitter的API交互的應用程序。
第一步是注冊一個(gè)你的應用程序。值得注意的是,您須要將您的瀏覽器轉入,登錄到Twitter(如果您仍未登陸),并注冊一個(gè)新的應用程序。您如今可以為您的應用程序選擇一個(gè)名稱(chēng)和說(shuō)明(例如“挖掘演示”或類(lèi)似)。您將收到一個(gè)消費者秘鑰和消費者密碼:這些都是應用程序設置,應一直保密。在您的應用程序的配置頁(yè)面,你也可以要求獲取一個(gè)訪(fǎng)問(wèn)令牌和訪(fǎng)問(wèn)令牌的密碼。類(lèi)似于消費者秘鑰,這些字符串也必須保密:他們提供的應用程序是代表您的賬戶(hù)訪(fǎng)問(wèn)到Twitter。默認權限是只讀的,這是我們在案例中須要的,但假如你決定改變您的許可,在應用中提供修改功能,你就必須再獲得一個(gè)新的訪(fǎng)問(wèn)令牌。
重要提示:使用Twitter的API時(shí)有速度限制,或者你想要提供一個(gè)可下載的數據集也會(huì )有限制,請參見(jiàn): >
您可以使用 Twitter提供的REST APIs與她們的服務(wù)進(jìn)行交互。那里還有一群基于Python的顧客,我們可以重復循環(huán)使用。尤其Tweepy是其中最有趣和最直白的一個(gè),所以我們一起把它安裝上去:
更新:Tweepy發(fā)布的3.4.0版本在Python3上出現了一些問(wèn)題,目前被綁定在GitHub上還不能進(jìn)行使用,因此在新的版本下來(lái)之前,我們仍然使用3.3.0版本。
更多的更新:Tweepy發(fā)布的3.5.0版本早已可以使用,似乎解決了上述提及的在Python3上的問(wèn)題。
為了授權我們的應用程序以代表我們訪(fǎng)問(wèn)Twitter,我們須要使用OAuth的界面:
現在的API變量是我們?yōu)榭梢栽赥witter上執行的大多數操作的入口點(diǎn)。
例如,我們可以看見(jiàn)我們自己的時(shí)間表(或者我們的Twitter主頁(yè)):
Tweepy提供方便的光標插口,對不同類(lèi)型的對象進(jìn)行迭代。在前面的事例中我們用10來(lái)限制我們正在閱讀的tweets的數目,但是其實(shí)也許我們是可以訪(fǎng)問(wèn)更多的。狀態(tài)變量是Status() class的一個(gè)實(shí)例,是訪(fǎng)問(wèn)數據時(shí)一個(gè)漂亮的包裝。Twitter API的JSON響應在_json屬性(帶有前導頓號)上是可用的,它不是純JSON字符串,而是一個(gè)字典。
所以前面的代碼可以被重新寫(xiě)入去處理/存儲JSON:
如果我們想要一個(gè)所有用戶(hù)的名單?來(lái)這里:
那么我們所有的tweets的列表呢? 也很簡(jiǎn)單:
通過(guò)這些方法,我們可以很容易地搜集tweets(以及更多),并將它們儲存為原創(chuàng )的JSON格式,可以很方便的根據我們的儲存格式將其轉換為不同的數據模型(很多NoSQL技術(shù)提供一些批量導出功能)。
process_or_store()功能是您的自定義施行占位符。最簡(jiǎn)單的形式就是你可以只復印出JSON,每行一個(gè)tweet:
流
如果我們要“保持聯(lián)接”,并搜集所有關(guān)于特定風(fēng)波將會(huì )出現的tweets,流API就是我們所須要的。我們須要擴充StreamListener()來(lái)定義我們處理輸入數據的形式。一個(gè)用#python hashtag搜集了所有新的tweet的事例:
根據不同的搜索詞,我們可以在幾分鐘之內搜集到成千上萬(wàn)的tweet。世界性覆蓋的現場(chǎng)活動(dòng)尤其這么(世界杯、超級杯、奧斯卡頒獎典禮等),所以保持關(guān)注JSON文件,看看它下降的速率是多么的快,并審視你的測試可能須要多少tweet。以上腳本將把每位tweet保存在新的行中,所以你可以從Unix shell中使用wc-l python.json命令來(lái)了解到你搜集了多少tweet。
你可以在下邊的要點(diǎn)中見(jiàn)到Twitter的API流的一個(gè)最小工作示例:
twitter_stream_downloader.py
總結
我們早已介紹了tweepy作為通過(guò)Python訪(fǎng)問(wèn)Twitter數據的一個(gè)相當簡(jiǎn)單的工具。我們可以按照明晰的“tweet”項目目標搜集一些不同類(lèi)型的數據。
一旦我們搜集了一些數據,在剖析應用方面的就可以進(jìn)行展開(kāi)了。在接下來(lái)的內容中,我們將討論部份問(wèn)題。
簡(jiǎn)介:Marco Bonzanini是美國紐約的一個(gè)數據科學(xué)家?;钴S于PyData社區的他喜歡從事文本剖析和數據挖掘的應用工作。他是“用Python把握社會(huì )化媒體挖掘”( 2016月7月出版)的作者。
原文>>
文章來(lái)源36大數據, ,微信號dashuju36 ,36大數據是一個(gè)專(zhuān)注大數據創(chuàng )業(yè)、大數據技術(shù)與剖析、大數據商業(yè)與應用的網(wǎng)站。分享大數據的干貨教程和大數據應用案例,提供大數據剖析工具和資料下載,解決大數據產(chǎn)業(yè)鏈上的創(chuàng )業(yè)、技術(shù)、分析、商業(yè)、應用等問(wèn)題,為大數據產(chǎn)業(yè)鏈上的公司和數據行業(yè)從業(yè)人員提供支持與服務(wù)。
via:shumeng
End.
優(yōu)采云采集怎樣獲取數據API鏈接 優(yōu)采云采集獲取數據API鏈接的方式
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 329 次瀏覽 ? 2020-08-26 04:28
今天給你們帶來(lái)優(yōu)采云采集怎樣獲取數據API鏈接,優(yōu)采云采集獲取數據API鏈接的方式,讓您輕松解決問(wèn)題。
優(yōu)采云采集如何獲取數據API鏈接
具體方式如下:
1
java、cs、php示例代碼點(diǎn)擊下載
這個(gè)教程為你們講解數據API的使用
注:只有在有效期內的旗艦版用戶(hù)才可以使用數據API
如何獲取數據API鏈接?
1.打開(kāi)任務(wù)配置界面,如下圖:
2
2.點(diǎn)下一步,直到最后一步,選擇生成數據導入API接口,如下圖:
3
3.點(diǎn)擊后將會(huì )有一個(gè)彈出窗口,從彈出窗口上復制API鏈接,并可查看API示例:
4
最終的API鏈接格式是:{開(kāi)始時(shí)間}&to={結束時(shí)間},key由系統手動(dòng)生成,請勿更改!最終使用的時(shí)侯須要將{開(kāi)始時(shí)間}和{結束時(shí)間}替換為想要獲取數據的時(shí)間區間(采集時(shí)間),如:/SkieerDataAPI/GetData?key=key&from=2014-11-11 12:00&to=2014-11-11 13:00,時(shí)間區間最長(cháng)為一個(gè)小時(shí)(總數據量不少于1000條,多于1000條的請用 )。pageindex是頁(yè)腳,pageSize是那頁(yè)顯示的數據量 如pageindex=3&pageSize=100的意義為懇求第三頁(yè)的數據,每頁(yè)根據100條數據進(jìn)行界定。
5
如何使用數據API?
數據API返回的是XML格式的數據,您的程序可定時(shí)的通過(guò)API獲取指定時(shí)間段云采集的數據,API返回數據的格式如下圖: 查看全部
優(yōu)采云采集怎樣獲取數據API鏈接 優(yōu)采云采集獲取數據API鏈接的方式
今天給你們帶來(lái)優(yōu)采云采集怎樣獲取數據API鏈接,優(yōu)采云采集獲取數據API鏈接的方式,讓您輕松解決問(wèn)題。
優(yōu)采云采集如何獲取數據API鏈接
具體方式如下:
1
java、cs、php示例代碼點(diǎn)擊下載
這個(gè)教程為你們講解數據API的使用
注:只有在有效期內的旗艦版用戶(hù)才可以使用數據API
如何獲取數據API鏈接?
1.打開(kāi)任務(wù)配置界面,如下圖:

2
2.點(diǎn)下一步,直到最后一步,選擇生成數據導入API接口,如下圖:

3
3.點(diǎn)擊后將會(huì )有一個(gè)彈出窗口,從彈出窗口上復制API鏈接,并可查看API示例:

4
最終的API鏈接格式是:{開(kāi)始時(shí)間}&to={結束時(shí)間},key由系統手動(dòng)生成,請勿更改!最終使用的時(shí)侯須要將{開(kāi)始時(shí)間}和{結束時(shí)間}替換為想要獲取數據的時(shí)間區間(采集時(shí)間),如:/SkieerDataAPI/GetData?key=key&from=2014-11-11 12:00&to=2014-11-11 13:00,時(shí)間區間最長(cháng)為一個(gè)小時(shí)(總數據量不少于1000條,多于1000條的請用 )。pageindex是頁(yè)腳,pageSize是那頁(yè)顯示的數據量 如pageindex=3&pageSize=100的意義為懇求第三頁(yè)的數據,每頁(yè)根據100條數據進(jìn)行界定。
5
如何使用數據API?
數據API返回的是XML格式的數據,您的程序可定時(shí)的通過(guò)API獲取指定時(shí)間段云采集的數據,API返回數據的格式如下圖:
爬蟲(chóng)數據采集技術(shù)趨勢—智能化解析
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 417 次瀏覽 ? 2020-08-26 04:21
用一句話(huà)概括爬蟲(chóng)工程師的工作內容,就是We Structure the World's Knowledge。
爬蟲(chóng)工作內容
互聯(lián)網(wǎng)作為人類(lèi)歷史最大的知識庫房,是沒(méi)有充分結構化的。目前互聯(lián)網(wǎng)僅僅是一些文本等多媒體數據的聚合,內容似乎十分有價(jià)值,但是程序是難以使用這些沒(méi)有結構化的數據。
在2006年左右,有專(zhuān)家提出的web3.0,語(yǔ)義互聯(lián)網(wǎng),知識共享。雖然現今開(kāi)放API,SOA概念越來(lái)越普及,真正語(yǔ)義上的互聯(lián)網(wǎng)的時(shí)代雖然還十分遙遠。因此爬蟲(chóng)仍然是最重要的手段,一端不斷解析,聚合互聯(lián)網(wǎng)上的數據,另外一端向各種各樣的的應用輸送數據。
現有爬蟲(chóng)開(kāi)發(fā)技術(shù)存在問(wèn)題
從急聘市場(chǎng)崗位需求可以看出,近年來(lái)對爬蟲(chóng)工程師需求越來(lái)越強烈。
個(gè)人判定緣由有兩個(gè):
信息聚合是互聯(lián)網(wǎng)公司的基本需求。
數據時(shí)代到來(lái),對數據更強烈的需求。
下面是我整理的部份靠爬蟲(chóng)聚合信息的創(chuàng )業(yè)公司,按照時(shí)間次序排序:
最后5種類(lèi)型,幾乎2014年都是開(kāi)始。很多金融場(chǎng)景相關(guān)應用開(kāi)始出現,這就對準確度和可靠性提出了更高的要求。但現有的爬蟲(chóng)開(kāi)發(fā)技術(shù)能夠滿(mǎn)足高可靠,大規模,高效率開(kāi)發(fā)需求呢?
從軟件工程角度來(lái)看,一件事情若果未能評估,那就難以管理。爬蟲(chóng)開(kāi)發(fā)常常是被吐槽的誘因之一,就是工作量往往難以評估。一般的軟件項目的開(kāi)發(fā)過(guò)程隨著(zhù)時(shí)間推動(dòng),工作量會(huì )漸漸降低,也是你們常常說(shuō)的燒盡療效。
而爬蟲(chóng)開(kāi)發(fā)生命周期如下圖:
爬蟲(chóng)開(kāi)發(fā)主要有兩個(gè)方面內容:下載網(wǎng)頁(yè),解析網(wǎng)頁(yè)。解析網(wǎng)頁(yè)大約搶占開(kāi)發(fā)工作的80%左右。
下載網(wǎng)頁(yè)功能的開(kāi)發(fā)工作,會(huì )涉及IP限制,驗證碼等問(wèn)題,這樣問(wèn)題都是可以預期的。同時(shí),隨著(zhù)現今優(yōu)秀的爬蟲(chóng)框架和云服務(wù)器的普及,問(wèn)題解決上去會(huì )更輕松。
編寫(xiě)解析代碼,雖然有一些基本工具chrome,firecdebug可以使用,但仍然須要人工剖析,編寫(xiě)解析規則。無(wú)論是使用xpath,正則表達式,css selector,都不能減輕這一部分的工作量。
大量重復性工作會(huì )導致以下兩個(gè)問(wèn)題:
即使同類(lèi)型的網(wǎng)頁(yè)看起來(lái)99%是一樣,也須要編撰獨立的爬蟲(chóng)。這都會(huì )給人這樣一種感覺(jué)——爬蟲(chóng)開(kāi)發(fā)大部分的工作內容是重復的。
數據源網(wǎng)頁(yè)改版,幾乎整個(gè)爬蟲(chóng)項目須要重做。重做的工作量幾乎是100%,爬蟲(chóng)工程師心里常常是一萬(wàn)只矮馬跑過(guò)?,F在好多征信數據采集公司的合作伙伴,當數據源網(wǎng)站改版,常常須要一至兩天能夠修補爬蟲(chóng),很明顯這些可靠性是難以滿(mǎn)足金融場(chǎng)景須要。
智能化解析
這是一張新浪新聞的圖片。
可以發(fā)覺(jué),視覺(jué)上很容易了解到,新聞所報導的風(fēng)波的標題,發(fā)表時(shí)間和正文。自然也會(huì )想到,能否通過(guò)一些機器學(xué)習的算法達到手動(dòng)解析的目的?這樣就不用人工編撰解析額,減少重復勞動(dòng)。在2008年開(kāi)始,就要研究機構發(fā)表了相關(guān)論文。
~deepay/mywww/papers/www08-segments.pdf
/en-us/um/people/znie/p048.special.nie.pdf
也就是在2008有一家相關(guān)的創(chuàng )業(yè)公司,在斯坦福大學(xué)孵化。
DiffBot智能化數據采集公司
總部坐落加洲的Diffbot創(chuàng )立于2008年,創(chuàng )始人Mike Tung,是哈佛結業(yè)研究生。Diffbot是通過(guò)人工智能技術(shù),讓“機器”識別網(wǎng)頁(yè)內容,抓取關(guān)鍵內容,并輸出軟件可以直接辨識的結構化數據。其創(chuàng )始人兼首席執行官Mike Tung表示,“Diffbot如今做的,相當于人類(lèi)在瀏覽網(wǎng)頁(yè)文章時(shí)所做的事情,找出頁(yè)面中最核心的相關(guān)信息?!蹦壳癉iffbot早已發(fā)布了頭版API和文章API,還有產(chǎn)品API。服務(wù)的顧客包括三星、eBay、思科、美國在線(xiàn)等。
Diffbot的理念就是通過(guò)“視覺(jué)機器人”來(lái)掃描和辨識不同的網(wǎng)頁(yè)類(lèi)型(主要是非結構化的數據),再將這種豐富的數據源用于其他應用。Mike Tung表示:“我們在獲取頁(yè)面然后會(huì )對其進(jìn)行剖析,然后通過(guò)成熟先進(jìn)的技術(shù)進(jìn)行結構化處理?!敝拔姨峒暗膚e structure the world's knowledge,就是該公司提出的理念。
Diffbot在基于智能采集的基礎上,又開(kāi)發(fā)出好多數據產(chǎn)品,比如知識圖譜,智能商業(yè)BI。在2016騰訊與硅谷風(fēng)投機構Felicis Ventures領(lǐng)投了人工智能創(chuàng )業(yè)公司Diffbot 1000萬(wàn)美元的A輪融資,很多互聯(lián)網(wǎng)大鱷開(kāi)始發(fā)覺(jué)這家公司的價(jià)值。
算法實(shí)踐
通過(guò)智能方法來(lái)解析網(wǎng)頁(yè)須要兩個(gè)步驟:
基于視覺(jué)上的網(wǎng)頁(yè)分割,將網(wǎng)頁(yè)分割幾個(gè)視覺(jué)塊。
通過(guò)機器學(xué)習訓練的方法來(lái)判定各個(gè)視覺(jué)塊的類(lèi)型,是標題,還是正文。其中主要流程和通常機器須要流程沒(méi)哪些區別。這就不詳盡解釋。使用到使用的開(kāi)源框架有:scikit-learn,phantomjs
Scikit-Learn機器學(xué)習庫早已十分成熟,很容易上手。
phantomjs,是一個(gè)headless webkit渲染引擎。做爬蟲(chóng)開(kāi)發(fā)的朋友應當十分須要。
網(wǎng)頁(yè)分割算法
從Diffbot初期發(fā)布的文章來(lái)看,是通過(guò)圖象處理的方法來(lái)切割視覺(jué)塊。使用到的算法有,邊界檢測,文字辨識等算法。但這些方法估算量偏大,復雜度很高。
另外一種實(shí)現方法是基于Dom樹(shù)結構,導出所需的視覺(jué)特點(diǎn)。
聚合時(shí)侯需用的特點(diǎn)變量。主要考慮視覺(jué)相關(guān)的誘因有元素在頁(yè)面上的位置,寬度和高度,Dom的層次。
有一點(diǎn)須要注意的是,現在網(wǎng)頁(yè)好多是動(dòng)態(tài)生成。需要依靠phantomjs工具來(lái)進(jìn)行動(dòng)態(tài)網(wǎng)頁(yè)渲染。
聚類(lèi)算法可以選用的DBSCAN,DBSCAN算法優(yōu)點(diǎn)是愈發(fā)密度來(lái)界定,比起K-mean算法的優(yōu)點(diǎn),是處理任意形狀的聚合。
具體的實(shí)現方法可以參考下邊博文:
分類(lèi)算法
在第一步處理后,網(wǎng)頁(yè)上的標簽,會(huì )被界定分若干類(lèi),需要判定標簽的類(lèi)型,是否是標題,正文,廣告,導航之類(lèi)。需要整理出類(lèi)似下邊的,訓練矩陣。
整個(gè)學(xué)習過(guò)程與通常的機器學(xué)習訓練過(guò)程沒(méi)有區別。由于數據樣本規模不大,分類(lèi)算法基本算法采取。分類(lèi)算法可以選用樸素貝葉斯,或者SVM。
總結和展望
本文介紹的方法比較簡(jiǎn)略,一般來(lái)說(shuō)解析模型只能針對特定的網(wǎng)路訓練解析模型,比如新聞,電商產(chǎn)品頁(yè)。所以不同類(lèi)型的網(wǎng)頁(yè),所須要的特點(diǎn)變量有較大差異。針對不同特征類(lèi)型數據,需要你們自己花時(shí)間去探求和實(shí)踐。
隨著(zhù)數據時(shí)代和智能化時(shí)代到來(lái),爬蟲(chóng)作為重要的數據來(lái)源,自身須要一些技術(shù)提高來(lái)適應時(shí)代的要求,這也就對爬蟲(chóng)工程師提出更高的要求。
本文作者:李國建(點(diǎn)融黑手黨),現就職于點(diǎn)融網(wǎng)成都團隊Data Team,喜歡研究各類(lèi)機器學(xué)習,爬蟲(chóng),自動(dòng)化交易相關(guān)的技術(shù)。 查看全部
爬蟲(chóng)數據采集技術(shù)趨勢—智能化解析
用一句話(huà)概括爬蟲(chóng)工程師的工作內容,就是We Structure the World's Knowledge。
爬蟲(chóng)工作內容
互聯(lián)網(wǎng)作為人類(lèi)歷史最大的知識庫房,是沒(méi)有充分結構化的。目前互聯(lián)網(wǎng)僅僅是一些文本等多媒體數據的聚合,內容似乎十分有價(jià)值,但是程序是難以使用這些沒(méi)有結構化的數據。
在2006年左右,有專(zhuān)家提出的web3.0,語(yǔ)義互聯(lián)網(wǎng),知識共享。雖然現今開(kāi)放API,SOA概念越來(lái)越普及,真正語(yǔ)義上的互聯(lián)網(wǎng)的時(shí)代雖然還十分遙遠。因此爬蟲(chóng)仍然是最重要的手段,一端不斷解析,聚合互聯(lián)網(wǎng)上的數據,另外一端向各種各樣的的應用輸送數據。
現有爬蟲(chóng)開(kāi)發(fā)技術(shù)存在問(wèn)題
從急聘市場(chǎng)崗位需求可以看出,近年來(lái)對爬蟲(chóng)工程師需求越來(lái)越強烈。
個(gè)人判定緣由有兩個(gè):
信息聚合是互聯(lián)網(wǎng)公司的基本需求。
數據時(shí)代到來(lái),對數據更強烈的需求。
下面是我整理的部份靠爬蟲(chóng)聚合信息的創(chuàng )業(yè)公司,按照時(shí)間次序排序:
最后5種類(lèi)型,幾乎2014年都是開(kāi)始。很多金融場(chǎng)景相關(guān)應用開(kāi)始出現,這就對準確度和可靠性提出了更高的要求。但現有的爬蟲(chóng)開(kāi)發(fā)技術(shù)能夠滿(mǎn)足高可靠,大規模,高效率開(kāi)發(fā)需求呢?
從軟件工程角度來(lái)看,一件事情若果未能評估,那就難以管理。爬蟲(chóng)開(kāi)發(fā)常常是被吐槽的誘因之一,就是工作量往往難以評估。一般的軟件項目的開(kāi)發(fā)過(guò)程隨著(zhù)時(shí)間推動(dòng),工作量會(huì )漸漸降低,也是你們常常說(shuō)的燒盡療效。
而爬蟲(chóng)開(kāi)發(fā)生命周期如下圖:
爬蟲(chóng)開(kāi)發(fā)主要有兩個(gè)方面內容:下載網(wǎng)頁(yè),解析網(wǎng)頁(yè)。解析網(wǎng)頁(yè)大約搶占開(kāi)發(fā)工作的80%左右。
下載網(wǎng)頁(yè)功能的開(kāi)發(fā)工作,會(huì )涉及IP限制,驗證碼等問(wèn)題,這樣問(wèn)題都是可以預期的。同時(shí),隨著(zhù)現今優(yōu)秀的爬蟲(chóng)框架和云服務(wù)器的普及,問(wèn)題解決上去會(huì )更輕松。
編寫(xiě)解析代碼,雖然有一些基本工具chrome,firecdebug可以使用,但仍然須要人工剖析,編寫(xiě)解析規則。無(wú)論是使用xpath,正則表達式,css selector,都不能減輕這一部分的工作量。
大量重復性工作會(huì )導致以下兩個(gè)問(wèn)題:
即使同類(lèi)型的網(wǎng)頁(yè)看起來(lái)99%是一樣,也須要編撰獨立的爬蟲(chóng)。這都會(huì )給人這樣一種感覺(jué)——爬蟲(chóng)開(kāi)發(fā)大部分的工作內容是重復的。
數據源網(wǎng)頁(yè)改版,幾乎整個(gè)爬蟲(chóng)項目須要重做。重做的工作量幾乎是100%,爬蟲(chóng)工程師心里常常是一萬(wàn)只矮馬跑過(guò)?,F在好多征信數據采集公司的合作伙伴,當數據源網(wǎng)站改版,常常須要一至兩天能夠修補爬蟲(chóng),很明顯這些可靠性是難以滿(mǎn)足金融場(chǎng)景須要。
智能化解析
這是一張新浪新聞的圖片。
可以發(fā)覺(jué),視覺(jué)上很容易了解到,新聞所報導的風(fēng)波的標題,發(fā)表時(shí)間和正文。自然也會(huì )想到,能否通過(guò)一些機器學(xué)習的算法達到手動(dòng)解析的目的?這樣就不用人工編撰解析額,減少重復勞動(dòng)。在2008年開(kāi)始,就要研究機構發(fā)表了相關(guān)論文。
~deepay/mywww/papers/www08-segments.pdf
/en-us/um/people/znie/p048.special.nie.pdf
也就是在2008有一家相關(guān)的創(chuàng )業(yè)公司,在斯坦福大學(xué)孵化。
DiffBot智能化數據采集公司
總部坐落加洲的Diffbot創(chuàng )立于2008年,創(chuàng )始人Mike Tung,是哈佛結業(yè)研究生。Diffbot是通過(guò)人工智能技術(shù),讓“機器”識別網(wǎng)頁(yè)內容,抓取關(guān)鍵內容,并輸出軟件可以直接辨識的結構化數據。其創(chuàng )始人兼首席執行官Mike Tung表示,“Diffbot如今做的,相當于人類(lèi)在瀏覽網(wǎng)頁(yè)文章時(shí)所做的事情,找出頁(yè)面中最核心的相關(guān)信息?!蹦壳癉iffbot早已發(fā)布了頭版API和文章API,還有產(chǎn)品API。服務(wù)的顧客包括三星、eBay、思科、美國在線(xiàn)等。
Diffbot的理念就是通過(guò)“視覺(jué)機器人”來(lái)掃描和辨識不同的網(wǎng)頁(yè)類(lèi)型(主要是非結構化的數據),再將這種豐富的數據源用于其他應用。Mike Tung表示:“我們在獲取頁(yè)面然后會(huì )對其進(jìn)行剖析,然后通過(guò)成熟先進(jìn)的技術(shù)進(jìn)行結構化處理?!敝拔姨峒暗膚e structure the world's knowledge,就是該公司提出的理念。
Diffbot在基于智能采集的基礎上,又開(kāi)發(fā)出好多數據產(chǎn)品,比如知識圖譜,智能商業(yè)BI。在2016騰訊與硅谷風(fēng)投機構Felicis Ventures領(lǐng)投了人工智能創(chuàng )業(yè)公司Diffbot 1000萬(wàn)美元的A輪融資,很多互聯(lián)網(wǎng)大鱷開(kāi)始發(fā)覺(jué)這家公司的價(jià)值。
算法實(shí)踐
通過(guò)智能方法來(lái)解析網(wǎng)頁(yè)須要兩個(gè)步驟:
基于視覺(jué)上的網(wǎng)頁(yè)分割,將網(wǎng)頁(yè)分割幾個(gè)視覺(jué)塊。
通過(guò)機器學(xué)習訓練的方法來(lái)判定各個(gè)視覺(jué)塊的類(lèi)型,是標題,還是正文。其中主要流程和通常機器須要流程沒(méi)哪些區別。這就不詳盡解釋。使用到使用的開(kāi)源框架有:scikit-learn,phantomjs
Scikit-Learn機器學(xué)習庫早已十分成熟,很容易上手。
phantomjs,是一個(gè)headless webkit渲染引擎。做爬蟲(chóng)開(kāi)發(fā)的朋友應當十分須要。
網(wǎng)頁(yè)分割算法
從Diffbot初期發(fā)布的文章來(lái)看,是通過(guò)圖象處理的方法來(lái)切割視覺(jué)塊。使用到的算法有,邊界檢測,文字辨識等算法。但這些方法估算量偏大,復雜度很高。
另外一種實(shí)現方法是基于Dom樹(shù)結構,導出所需的視覺(jué)特點(diǎn)。
聚合時(shí)侯需用的特點(diǎn)變量。主要考慮視覺(jué)相關(guān)的誘因有元素在頁(yè)面上的位置,寬度和高度,Dom的層次。
有一點(diǎn)須要注意的是,現在網(wǎng)頁(yè)好多是動(dòng)態(tài)生成。需要依靠phantomjs工具來(lái)進(jìn)行動(dòng)態(tài)網(wǎng)頁(yè)渲染。
聚類(lèi)算法可以選用的DBSCAN,DBSCAN算法優(yōu)點(diǎn)是愈發(fā)密度來(lái)界定,比起K-mean算法的優(yōu)點(diǎn),是處理任意形狀的聚合。
具體的實(shí)現方法可以參考下邊博文:
分類(lèi)算法
在第一步處理后,網(wǎng)頁(yè)上的標簽,會(huì )被界定分若干類(lèi),需要判定標簽的類(lèi)型,是否是標題,正文,廣告,導航之類(lèi)。需要整理出類(lèi)似下邊的,訓練矩陣。
整個(gè)學(xué)習過(guò)程與通常的機器學(xué)習訓練過(guò)程沒(méi)有區別。由于數據樣本規模不大,分類(lèi)算法基本算法采取。分類(lèi)算法可以選用樸素貝葉斯,或者SVM。
總結和展望
本文介紹的方法比較簡(jiǎn)略,一般來(lái)說(shuō)解析模型只能針對特定的網(wǎng)路訓練解析模型,比如新聞,電商產(chǎn)品頁(yè)。所以不同類(lèi)型的網(wǎng)頁(yè),所須要的特點(diǎn)變量有較大差異。針對不同特征類(lèi)型數據,需要你們自己花時(shí)間去探求和實(shí)踐。
隨著(zhù)數據時(shí)代和智能化時(shí)代到來(lái),爬蟲(chóng)作為重要的數據來(lái)源,自身須要一些技術(shù)提高來(lái)適應時(shí)代的要求,這也就對爬蟲(chóng)工程師提出更高的要求。
本文作者:李國建(點(diǎn)融黑手黨),現就職于點(diǎn)融網(wǎng)成都團隊Data Team,喜歡研究各類(lèi)機器學(xué)習,爬蟲(chóng),自動(dòng)化交易相關(guān)的技術(shù)。
Python爬蟲(chóng):十分鐘實(shí)現從數據抓取到數據API提供
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 163 次瀏覽 ? 2020-08-26 01:31
歡迎點(diǎn)擊右上角關(guān)注小編,除了分享技術(shù)文章之外還有好多福利,私信學(xué)習資料可以發(fā)放包括不限于Python實(shí)戰演練、PDF電子文檔、面試集錦、學(xué)習資料等。
依舊先從爬蟲(chóng)的基本概念說(shuō)起,你去做爬蟲(chóng)做數據抓取,第一件事想必是去查看目標網(wǎng)站是否有api。有且可以使用的話(huà),皆大歡喜。
假如目標網(wǎng)站自身不提供api,但明天你心情不好就想用api來(lái)抓數據,那如何辦。有個(gè)長(cháng)者說(shuō),沒(méi)api創(chuàng )造api也要上,所以,那就創(chuàng )造api吧~
關(guān)于Toapi
很多時(shí)侯你須要經(jīng)歷抓取數據->存儲數據->構建API的基本步驟,然后在去定時(shí)更新數據。然而你的目的并不是想去學(xué)習搭建穩定可靠手動(dòng)更新的API服務(wù),你只是想用這個(gè)網(wǎng)站的數據而已。Toapi就是因此實(shí)現,可以自動(dòng)化的完成前述任務(wù),達到使用網(wǎng)站實(shí)時(shí)數據的目的。
先看效果圖 (這個(gè)網(wǎng)站是沒(méi)有api的喲)手機點(diǎn)進(jìn)去可能沒(méi)有數據,用pc端瀏覽器就好。
如你所見(jiàn),Toapi會(huì )使數據弄成一塊面包,你只須要將它切出來(lái)喝了(雖然英文的顯示是unicode)。那么話(huà)不多說(shuō),看代碼。
滿(mǎn)打滿(mǎn)算10行代碼吧,你就可以實(shí)現數據的api,心動(dòng)不如行動(dòng)還不給我打錢(qián),啊呸,不好意思,串場(chǎng)了。下面還是解釋下里面的代碼。希望對你有幫助。
對了對了,你寫(xiě)那些代碼不用十分鐘吧,不要算我標題黨。
安裝:pip install toapi 查看全部
Python爬蟲(chóng):十分鐘實(shí)現從數據抓取到數據API提供
歡迎點(diǎn)擊右上角關(guān)注小編,除了分享技術(shù)文章之外還有好多福利,私信學(xué)習資料可以發(fā)放包括不限于Python實(shí)戰演練、PDF電子文檔、面試集錦、學(xué)習資料等。
依舊先從爬蟲(chóng)的基本概念說(shuō)起,你去做爬蟲(chóng)做數據抓取,第一件事想必是去查看目標網(wǎng)站是否有api。有且可以使用的話(huà),皆大歡喜。
假如目標網(wǎng)站自身不提供api,但明天你心情不好就想用api來(lái)抓數據,那如何辦。有個(gè)長(cháng)者說(shuō),沒(méi)api創(chuàng )造api也要上,所以,那就創(chuàng )造api吧~
關(guān)于Toapi
很多時(shí)侯你須要經(jīng)歷抓取數據->存儲數據->構建API的基本步驟,然后在去定時(shí)更新數據。然而你的目的并不是想去學(xué)習搭建穩定可靠手動(dòng)更新的API服務(wù),你只是想用這個(gè)網(wǎng)站的數據而已。Toapi就是因此實(shí)現,可以自動(dòng)化的完成前述任務(wù),達到使用網(wǎng)站實(shí)時(shí)數據的目的。
先看效果圖 (這個(gè)網(wǎng)站是沒(méi)有api的喲)手機點(diǎn)進(jìn)去可能沒(méi)有數據,用pc端瀏覽器就好。
如你所見(jiàn),Toapi會(huì )使數據弄成一塊面包,你只須要將它切出來(lái)喝了(雖然英文的顯示是unicode)。那么話(huà)不多說(shuō),看代碼。
滿(mǎn)打滿(mǎn)算10行代碼吧,你就可以實(shí)現數據的api,心動(dòng)不如行動(dòng)還不給我打錢(qián),啊呸,不好意思,串場(chǎng)了。下面還是解釋下里面的代碼。希望對你有幫助。
對了對了,你寫(xiě)那些代碼不用十分鐘吧,不要算我標題黨。
安裝:pip install toapi
第 7 篇:文章詳情的 API 接口
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 361 次瀏覽 ? 2020-08-26 00:36
作者:HelloGitHub-追夢(mèng)人物
一旦我們使用了視圖集,并實(shí)現了 HTTP 請求對應的 action 方法(對應規則的說(shuō)明見(jiàn) 使用視圖集簡(jiǎn)化代碼),將其在路由器中注冊后,django-restframework 自動(dòng)會(huì )手動(dòng)為我們生成對應的 API 接口。
目前為止,我們只實(shí)現了 GET 請求對應的 action——list 方法,因此路由器只為我們生成了一個(gè) API,這個(gè) API 返回文章資源列表。GET 請求還可以用于獲取單個(gè)資源,對應的 action 為 retrieve,因此,只要我們在視圖集中實(shí)現 retrieve 方法的邏輯,就可以直接生成獲取單篇文章資源的 API 接口。
貼心的是,django-rest-framework 已經(jīng)幫我們把 retrieve 的邏輯在 mixins.RetrieveModelMixin 里寫(xiě)好了,直接混進(jìn)視圖集即可:
現在,路由會(huì )手動(dòng)降低一個(gè) /posts/:pk/ 的 URL 模式,其中 pk 為文章的 id。訪(fǎng)問(wèn)此 API 接口可以獲得指定文章 id 的資源。
實(shí)際上,實(shí)現各個(gè) action 邏輯的混進(jìn)類(lèi)都十分簡(jiǎn)單,以 RetrieveModelMixin 為例,我們來(lái)瞧瞧它的源碼:
retrieve 方法首先調用 get_object 方法獲取需序列化的對象。get_object 方法一般情況下根據以下兩點(diǎn)來(lái)篩選出單個(gè)資源對象:
get_queryset 方法(或者 queryset 屬性,get_queryset 方法返回的值優(yōu)先)返回的資源列表對象。lookup_field 屬性指定的資源篩選數組(默認為 pk)。django-rest-framework 以該數組的值從 get_queryset 返回的資源列表中篩選出單個(gè)資源對象。lookup_field 字段的值將從懇求的 URL 中捕獲,所以你聽(tīng)到文章接口的 url 模式為 /posts/:pk/,假設將 lookup_field 指定為 title,則 url 模式為 /posts/:title/,此時(shí)將按照文章標題獲取單篇文章資源。文章詳情 Serializer
現在,假設我們要獲取 id 為 1 的文章資源,訪(fǎng)問(wèn)獲取單篇文章資源的 API 接口 :10000/api/posts/1/,得到如下的返回結果:
可以看見(jiàn)好多我們須要在詳情頁(yè)中展示的數組值并沒(méi)有返回,比如文章正文(body)。原因是視圖集中指定的文章序列化器為 PostListSerializer,這個(gè)序列化器被用于序列化文章列表。因為展示文章列表數據時(shí),有些數組用不上,所以出于性能考慮,只序列化了部份數組。
顯然,我們須要給文章詳情寫(xiě)一個(gè)新的序列化器了:
詳情序列化器和列表序列化器幾乎一樣,只是在 fields 中指定了更多須要序列化的數組。
同時(shí)注意,為了序列化文章的標簽 tags,我們新增了一個(gè) TagSerializer,由于文章可能有多個(gè)標簽,因為 tags 是一個(gè)列表,要序列化一個(gè)列表資源,需要將序列化器參數 many 的值指定為 True。
動(dòng)態(tài) Serializer
現在新的序列化器寫(xiě)好了,可是在那里指定呢?視圖集中 serializer_class 屬性早已被指定為了 PostListSerializer,那 PostRetrieveSerializer 應該指定在哪呢?
類(lèi)似于視圖集類(lèi)的 queryset 屬性和 get_queryset 方法的關(guān)系, serializer_class 屬性的值也可以通過(guò) get_serializer_class 方法返回的值覆蓋,因此我們可以按照不同的 action 動(dòng)作來(lái)動(dòng)態(tài)指定對應的序列化器。
那么怎樣在視圖集中分辨不同的 action 動(dòng)作呢?視圖集有一個(gè) action 屬性,專(zhuān)門(mén)拿來(lái)記錄當前懇求對應的動(dòng)作。對應關(guān)系如下:
HTTP 請求對應 action 屬性的值GETlist(資源列表)/ retrieve(單個(gè)資源)PUTupdatePATCHpartial_updateDELETEdestory
因此,我們在視圖集中重畫(huà) get_serializer_class 方法,寫(xiě)入我們自己的邏輯,就可以按照不同懇求,分別獲取相應的序列化器了:
后續對于其他動(dòng)作,可以再加 elif 判斷,不過(guò)若果動(dòng)作變多了,就會(huì )有很多的 if 判斷。更好的做好是,給視圖集加一個(gè)屬性,用于配置 action 和 serializer_class 的對應關(guān)系,通過(guò)查表法查找 action 應該使用的序列化器。
現在,再次訪(fǎng)問(wèn)單篇文章 API 接口,可以看見(jiàn)返回了愈加詳盡的博客文章數據了:
『講解開(kāi)源項目系列』——讓對開(kāi)源項目感興趣的人不再懼怕、讓開(kāi)源項目的發(fā)起者不再孤單。跟著(zhù)我們的文章,你會(huì )發(fā)覺(jué)編程的樂(lè )趣、使用和發(fā)覺(jué)參與開(kāi)源項目這么簡(jiǎn)單。歡迎留言聯(lián)系我們、加入我們,讓更多人愛(ài)上開(kāi)源、貢獻開(kāi)源~ 查看全部
第 7 篇:文章詳情的 API 接口
作者:HelloGitHub-追夢(mèng)人物
一旦我們使用了視圖集,并實(shí)現了 HTTP 請求對應的 action 方法(對應規則的說(shuō)明見(jiàn) 使用視圖集簡(jiǎn)化代碼),將其在路由器中注冊后,django-restframework 自動(dòng)會(huì )手動(dòng)為我們生成對應的 API 接口。
目前為止,我們只實(shí)現了 GET 請求對應的 action——list 方法,因此路由器只為我們生成了一個(gè) API,這個(gè) API 返回文章資源列表。GET 請求還可以用于獲取單個(gè)資源,對應的 action 為 retrieve,因此,只要我們在視圖集中實(shí)現 retrieve 方法的邏輯,就可以直接生成獲取單篇文章資源的 API 接口。
貼心的是,django-rest-framework 已經(jīng)幫我們把 retrieve 的邏輯在 mixins.RetrieveModelMixin 里寫(xiě)好了,直接混進(jìn)視圖集即可:
現在,路由會(huì )手動(dòng)降低一個(gè) /posts/:pk/ 的 URL 模式,其中 pk 為文章的 id。訪(fǎng)問(wèn)此 API 接口可以獲得指定文章 id 的資源。
實(shí)際上,實(shí)現各個(gè) action 邏輯的混進(jìn)類(lèi)都十分簡(jiǎn)單,以 RetrieveModelMixin 為例,我們來(lái)瞧瞧它的源碼:
retrieve 方法首先調用 get_object 方法獲取需序列化的對象。get_object 方法一般情況下根據以下兩點(diǎn)來(lái)篩選出單個(gè)資源對象:
get_queryset 方法(或者 queryset 屬性,get_queryset 方法返回的值優(yōu)先)返回的資源列表對象。lookup_field 屬性指定的資源篩選數組(默認為 pk)。django-rest-framework 以該數組的值從 get_queryset 返回的資源列表中篩選出單個(gè)資源對象。lookup_field 字段的值將從懇求的 URL 中捕獲,所以你聽(tīng)到文章接口的 url 模式為 /posts/:pk/,假設將 lookup_field 指定為 title,則 url 模式為 /posts/:title/,此時(shí)將按照文章標題獲取單篇文章資源。文章詳情 Serializer
現在,假設我們要獲取 id 為 1 的文章資源,訪(fǎng)問(wèn)獲取單篇文章資源的 API 接口 :10000/api/posts/1/,得到如下的返回結果:
可以看見(jiàn)好多我們須要在詳情頁(yè)中展示的數組值并沒(méi)有返回,比如文章正文(body)。原因是視圖集中指定的文章序列化器為 PostListSerializer,這個(gè)序列化器被用于序列化文章列表。因為展示文章列表數據時(shí),有些數組用不上,所以出于性能考慮,只序列化了部份數組。
顯然,我們須要給文章詳情寫(xiě)一個(gè)新的序列化器了:
詳情序列化器和列表序列化器幾乎一樣,只是在 fields 中指定了更多須要序列化的數組。
同時(shí)注意,為了序列化文章的標簽 tags,我們新增了一個(gè) TagSerializer,由于文章可能有多個(gè)標簽,因為 tags 是一個(gè)列表,要序列化一個(gè)列表資源,需要將序列化器參數 many 的值指定為 True。
動(dòng)態(tài) Serializer
現在新的序列化器寫(xiě)好了,可是在那里指定呢?視圖集中 serializer_class 屬性早已被指定為了 PostListSerializer,那 PostRetrieveSerializer 應該指定在哪呢?
類(lèi)似于視圖集類(lèi)的 queryset 屬性和 get_queryset 方法的關(guān)系, serializer_class 屬性的值也可以通過(guò) get_serializer_class 方法返回的值覆蓋,因此我們可以按照不同的 action 動(dòng)作來(lái)動(dòng)態(tài)指定對應的序列化器。
那么怎樣在視圖集中分辨不同的 action 動(dòng)作呢?視圖集有一個(gè) action 屬性,專(zhuān)門(mén)拿來(lái)記錄當前懇求對應的動(dòng)作。對應關(guān)系如下:
HTTP 請求對應 action 屬性的值GETlist(資源列表)/ retrieve(單個(gè)資源)PUTupdatePATCHpartial_updateDELETEdestory
因此,我們在視圖集中重畫(huà) get_serializer_class 方法,寫(xiě)入我們自己的邏輯,就可以按照不同懇求,分別獲取相應的序列化器了:
后續對于其他動(dòng)作,可以再加 elif 判斷,不過(guò)若果動(dòng)作變多了,就會(huì )有很多的 if 判斷。更好的做好是,給視圖集加一個(gè)屬性,用于配置 action 和 serializer_class 的對應關(guān)系,通過(guò)查表法查找 action 應該使用的序列化器。
現在,再次訪(fǎng)問(wèn)單篇文章 API 接口,可以看見(jiàn)返回了愈加詳盡的博客文章數據了:
『講解開(kāi)源項目系列』——讓對開(kāi)源項目感興趣的人不再懼怕、讓開(kāi)源項目的發(fā)起者不再孤單。跟著(zhù)我們的文章,你會(huì )發(fā)覺(jué)編程的樂(lè )趣、使用和發(fā)覺(jué)參與開(kāi)源項目這么簡(jiǎn)單。歡迎留言聯(lián)系我們、加入我們,讓更多人愛(ài)上開(kāi)源、貢獻開(kāi)源~
教你三步爬取后端優(yōu)質(zhì)文章
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 204 次瀏覽 ? 2020-08-25 22:36
打開(kāi)官網(wǎng),(F12) 打開(kāi)開(kāi)發(fā)者模式查看network 選項,咱們可以看見(jiàn)獲取文章接口的api如下:
打開(kāi)開(kāi)發(fā)者模式,我們太輕松的找到獲取文章的插口,這就好辦了,說(shuō)實(shí)話(huà)后端開(kāi)發(fā),只要有了插口,那就等于有了一切,我們可以恣意的 coding 了~
第二步
創(chuàng )建服務(wù)器文件 app.js ,通過(guò)superagent 模塊發(fā)送懇求獲取文章數據。
app.js 是我們服務(wù)端代碼,這里通過(guò)服務(wù)端發(fā)送懇求獲取爬蟲(chóng)所要的數據保存出來(lái)。
// 定義一個(gè)函數,用來(lái)獲取首頁(yè)前端文章信息
function getInfo () {
// 利用superagent 模塊發(fā)送請求,獲取前20篇文章。注意請求頭的設置和POST請求體數據(請求參數)
superagent.post('https://web-api..im/query').send(params).set('X-Agent', 'Juejin/Web').end((err, res) => {
if (err) {
return console.log(err)
}
// 保存所有文章信息
const array1 = JSON.parse(res.text).data.articleFeed.items.edges
const num = JSON.parse(res.text).data.articleFeed.items.pageInfo.endCursor
// 篩選出點(diǎn)贊數大于 50 的文章
result = array1.filter(item => {
return item.node.likeCount > 50
})
params.variables.after = num.toString()
// 再次發(fā)送請求獲取另外的20篇文章
superagent.post('https://web-api..im/query').send(params).set('X-Agent', 'Juejin/Web').end((err, res) => {
if (err) {
return console.log(err)
}
const array2 = JSON.parse(res.text).data.articleFeed.items.edges
const result2 = array2.filter(item => {
return item.node.likeCount > 50
})
result2.forEach(item => {
result.push(item)
})
})
})
}
// 調用一次獲取數據
getInfo()
// 設置定時(shí)器,規定10分鐘更新一此數據
setInterval(() => {
getInfo()
}, 10*1000*60)
復制代碼
這里要注意插口那兒須要設置懇求頭的 X-Agent 屬性,一定要在 superagent 發(fā)送 post 請求時(shí)侯帶上,否則會(huì )出錯,另外就是固定的懇求參數 params,這個(gè)可以仿造官網(wǎng)來(lái)寫(xiě)。
第三步
模板引擎渲染數據,發(fā)送結果到瀏覽器渲染
這一步須要利用模板引擎渲染 HTML 頁(yè)面,把從第二步領(lǐng)到的結果渲染到頁(yè)面中,最終返回給瀏覽器渲染。
app.js 代碼:
// 監聽(tīng)路由
app.get('/', (req, res, next) => {
res.render('index.html', {
result
})
})
// 綁定端口,啟動(dòng)服務(wù)
app.listen(3000, () => {
console.log('running...')
})
復制代碼
模板 index.html 代碼 :
{{each result}}
{{$value.node.title}}
{{$value.node.likeCount}}
{{/each}}
復制代碼
寫(xiě)在前面
如果你須要項目的源碼可以在GitHub對應庫房的 node學(xué)習demo案例 文件夾下查找, 謝謝! 查看全部
教你三步爬取后端優(yōu)質(zhì)文章
打開(kāi)官網(wǎng),(F12) 打開(kāi)開(kāi)發(fā)者模式查看network 選項,咱們可以看見(jiàn)獲取文章接口的api如下:
打開(kāi)開(kāi)發(fā)者模式,我們太輕松的找到獲取文章的插口,這就好辦了,說(shuō)實(shí)話(huà)后端開(kāi)發(fā),只要有了插口,那就等于有了一切,我們可以恣意的 coding 了~
第二步
創(chuàng )建服務(wù)器文件 app.js ,通過(guò)superagent 模塊發(fā)送懇求獲取文章數據。
app.js 是我們服務(wù)端代碼,這里通過(guò)服務(wù)端發(fā)送懇求獲取爬蟲(chóng)所要的數據保存出來(lái)。
// 定義一個(gè)函數,用來(lái)獲取首頁(yè)前端文章信息
function getInfo () {
// 利用superagent 模塊發(fā)送請求,獲取前20篇文章。注意請求頭的設置和POST請求體數據(請求參數)
superagent.post('https://web-api..im/query').send(params).set('X-Agent', 'Juejin/Web').end((err, res) => {
if (err) {
return console.log(err)
}
// 保存所有文章信息
const array1 = JSON.parse(res.text).data.articleFeed.items.edges
const num = JSON.parse(res.text).data.articleFeed.items.pageInfo.endCursor
// 篩選出點(diǎn)贊數大于 50 的文章
result = array1.filter(item => {
return item.node.likeCount > 50
})
params.variables.after = num.toString()
// 再次發(fā)送請求獲取另外的20篇文章
superagent.post('https://web-api..im/query').send(params).set('X-Agent', 'Juejin/Web').end((err, res) => {
if (err) {
return console.log(err)
}
const array2 = JSON.parse(res.text).data.articleFeed.items.edges
const result2 = array2.filter(item => {
return item.node.likeCount > 50
})
result2.forEach(item => {
result.push(item)
})
})
})
}
// 調用一次獲取數據
getInfo()
// 設置定時(shí)器,規定10分鐘更新一此數據
setInterval(() => {
getInfo()
}, 10*1000*60)
復制代碼
這里要注意插口那兒須要設置懇求頭的 X-Agent 屬性,一定要在 superagent 發(fā)送 post 請求時(shí)侯帶上,否則會(huì )出錯,另外就是固定的懇求參數 params,這個(gè)可以仿造官網(wǎng)來(lái)寫(xiě)。
第三步
模板引擎渲染數據,發(fā)送結果到瀏覽器渲染
這一步須要利用模板引擎渲染 HTML 頁(yè)面,把從第二步領(lǐng)到的結果渲染到頁(yè)面中,最終返回給瀏覽器渲染。
app.js 代碼:
// 監聽(tīng)路由
app.get('/', (req, res, next) => {
res.render('index.html', {
result
})
})
// 綁定端口,啟動(dòng)服務(wù)
app.listen(3000, () => {
console.log('running...')
})
復制代碼
模板 index.html 代碼 :
{{each result}}
{{$value.node.title}}
{{$value.node.likeCount}}
{{/each}}
復制代碼
寫(xiě)在前面
如果你須要項目的源碼可以在GitHub對應庫房的 node學(xué)習demo案例 文件夾下查找, 謝謝!
API數據提取
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 210 次瀏覽 ? 2020-08-25 22:35
GET
POST
PUT
DELETE
GET 就是你在瀏覽器中輸入網(wǎng)址瀏覽網(wǎng)站所做的事情;POST基本就是當你填寫(xiě)表單或遞交信息到網(wǎng)路服務(wù)器的前端程序時(shí)所做的事情;PUT 在網(wǎng)站交互過(guò)程中不常用,但是在A(yíng)PI 里面有時(shí)會(huì )用到;PUT 請求拿來(lái)更新一個(gè)對象或信息。其實(shí),很多API 在更新信息的時(shí)侯都是用POST懇求取代PUT 請求。究竟是創(chuàng )建一個(gè)新實(shí)體還是更新一個(gè)舊實(shí)體,通常要看API 請求本身是怎樣構筑的。不過(guò),掌握二者的差別還是有用處的,用 API的時(shí)侯你常常會(huì )碰到PUT 請求;DELETE用于刪掉一個(gè)對象。例如,如果我們向發(fā)出一個(gè)DELETE懇求,就會(huì )刪掉ID號是23的用戶(hù)。DELETE方式在公共API 里面不常用,它們主要用于創(chuàng )建信息,不能隨意使一個(gè)用戶(hù)去刪除數據庫的信息。
在懇求驗證方面,有些API 不需要驗證操作(就是說(shuō)任何人都可以使用API,不需要注冊)。有些API 要求顧客驗證是為了估算API 調用的費用,或者是提供了包年的服務(wù)。有些驗證是為了“限制”用戶(hù)使用API(限制每秒鐘、每小時(shí)或每晚API 調用的次數),或者是限制一部分用戶(hù)對某種信息或某類(lèi)API 的訪(fǎng)問(wèn)。
通常API 驗證的方式都是用類(lèi)似令牌(token)的方法調用,每次API 調用就會(huì )把令牌傳遞到服務(wù)器上。這種令牌要么是用戶(hù)注冊的時(shí)侯分配給用戶(hù),要么就是在用戶(hù)調用的時(shí)侯
才提供,可能是常年固定的值,也可能是頻繁變化的,通過(guò)服務(wù)器對用戶(hù)名和密碼的組合處理后生成。令牌不僅在URL鏈接中傳遞,還會(huì )通過(guò)懇求頭里的cookie 把用戶(hù)信息傳遞給服務(wù)器。
在服務(wù)器響應方面,API 有一個(gè)重要的特點(diǎn)是它們會(huì )反饋格式友好的數據。大多數反饋的數據格式都是XML和JSON 。這幾年,JSON 比XML更受歡迎,主要有兩個(gè)緣由。首先,JSON 文件比完整的XML格式小。如
如下邊的XML數據用了98個(gè)字符:
RyanMitchellKludgist
同樣的JSON 格式數據:
{"user":{"firstname":"Ryan","lastname":"Mitchell","username":"Kludgist"}}
只要用73個(gè)字符,比敘述同樣內容的XML文件要小36% 。
JSON 格式比XML更受歡迎的另一個(gè)緣由是網(wǎng)路技術(shù)的改變。過(guò)去,服務(wù)器端用PHP
和.NET 這些程序作為API 的接收端?,F在,服務(wù)器端也會(huì )用一些JavaScript 框架作為API
的發(fā)送和接收端,像Angular或Backbone 等。雖然服務(wù)器端的技術(shù)難以預測它們將要收到
的數據格式,但是象Backbone 之類(lèi)的JavaScript 庫處理JSON 比處理XML要更簡(jiǎn)單。
解析JSON數據
調用API,多數服務(wù)器會(huì )返回JSON格式的數據。Python中通過(guò)json庫的loads()函數可以把json格式的字符串轉換為python對象。
如獲取地理位置信息的百度地圖API懇求響應
>>> import requests
>>> import json
>>>
>>> par={'address':'北京','key':'cb649a25c1f81c1451adbeca73623251'}
>>>
>>> r=requests.get('',par)
>>> r.text
'{"status":"1","info":"OK","infocode":"10000","count":"1","geocodes":[{"formatted_address":"北京市","country":"中國","province":"北京市","citycode":"010","city":"北京市","district":[],"township":[],"neighborhood":{"name":[],"type":[]},"building":{"name":[],"type":[]},"adcode":"110000","street":[],"number":[],"location":"116.407526,39.904030","level":"省"}]}'
>>>
>>> json_data=json.loads(r.text) #轉換為python對象
>>> json_data
{'status': '1', 'info': 'OK', 'infocode': '10000', 'count': '1', 'geocodes': [{'formatted_address': '北京市', 'country': '中國', 'province': '北京市', 'citycode': '010', 'city': '北京市', 'district': [], 'township': [], 'neighborhood': {'name': [], 'type': []}, 'building': {'name': [], 'type': []}, 'adcode': '110000', 'street': [], 'number': [], 'location': '116.407526,39.904030', 'level': '省'}]}
>>>
取北京市的經(jīng)緯度如下
>>> json_data['geocodes'][0]['location']
'116.407526,39.904030'
>>> 查看全部
API數據提取
GET
POST
PUT
DELETE
GET 就是你在瀏覽器中輸入網(wǎng)址瀏覽網(wǎng)站所做的事情;POST基本就是當你填寫(xiě)表單或遞交信息到網(wǎng)路服務(wù)器的前端程序時(shí)所做的事情;PUT 在網(wǎng)站交互過(guò)程中不常用,但是在A(yíng)PI 里面有時(shí)會(huì )用到;PUT 請求拿來(lái)更新一個(gè)對象或信息。其實(shí),很多API 在更新信息的時(shí)侯都是用POST懇求取代PUT 請求。究竟是創(chuàng )建一個(gè)新實(shí)體還是更新一個(gè)舊實(shí)體,通常要看API 請求本身是怎樣構筑的。不過(guò),掌握二者的差別還是有用處的,用 API的時(shí)侯你常常會(huì )碰到PUT 請求;DELETE用于刪掉一個(gè)對象。例如,如果我們向發(fā)出一個(gè)DELETE懇求,就會(huì )刪掉ID號是23的用戶(hù)。DELETE方式在公共API 里面不常用,它們主要用于創(chuàng )建信息,不能隨意使一個(gè)用戶(hù)去刪除數據庫的信息。
在懇求驗證方面,有些API 不需要驗證操作(就是說(shuō)任何人都可以使用API,不需要注冊)。有些API 要求顧客驗證是為了估算API 調用的費用,或者是提供了包年的服務(wù)。有些驗證是為了“限制”用戶(hù)使用API(限制每秒鐘、每小時(shí)或每晚API 調用的次數),或者是限制一部分用戶(hù)對某種信息或某類(lèi)API 的訪(fǎng)問(wèn)。
通常API 驗證的方式都是用類(lèi)似令牌(token)的方法調用,每次API 調用就會(huì )把令牌傳遞到服務(wù)器上。這種令牌要么是用戶(hù)注冊的時(shí)侯分配給用戶(hù),要么就是在用戶(hù)調用的時(shí)侯
才提供,可能是常年固定的值,也可能是頻繁變化的,通過(guò)服務(wù)器對用戶(hù)名和密碼的組合處理后生成。令牌不僅在URL鏈接中傳遞,還會(huì )通過(guò)懇求頭里的cookie 把用戶(hù)信息傳遞給服務(wù)器。
在服務(wù)器響應方面,API 有一個(gè)重要的特點(diǎn)是它們會(huì )反饋格式友好的數據。大多數反饋的數據格式都是XML和JSON 。這幾年,JSON 比XML更受歡迎,主要有兩個(gè)緣由。首先,JSON 文件比完整的XML格式小。如
如下邊的XML數據用了98個(gè)字符:
RyanMitchellKludgist
同樣的JSON 格式數據:
{"user":{"firstname":"Ryan","lastname":"Mitchell","username":"Kludgist"}}
只要用73個(gè)字符,比敘述同樣內容的XML文件要小36% 。
JSON 格式比XML更受歡迎的另一個(gè)緣由是網(wǎng)路技術(shù)的改變。過(guò)去,服務(wù)器端用PHP
和.NET 這些程序作為API 的接收端?,F在,服務(wù)器端也會(huì )用一些JavaScript 框架作為API
的發(fā)送和接收端,像Angular或Backbone 等。雖然服務(wù)器端的技術(shù)難以預測它們將要收到
的數據格式,但是象Backbone 之類(lèi)的JavaScript 庫處理JSON 比處理XML要更簡(jiǎn)單。
解析JSON數據
調用API,多數服務(wù)器會(huì )返回JSON格式的數據。Python中通過(guò)json庫的loads()函數可以把json格式的字符串轉換為python對象。
如獲取地理位置信息的百度地圖API懇求響應
>>> import requests
>>> import json
>>>
>>> par={'address':'北京','key':'cb649a25c1f81c1451adbeca73623251'}
>>>
>>> r=requests.get('',par)
>>> r.text
'{"status":"1","info":"OK","infocode":"10000","count":"1","geocodes":[{"formatted_address":"北京市","country":"中國","province":"北京市","citycode":"010","city":"北京市","district":[],"township":[],"neighborhood":{"name":[],"type":[]},"building":{"name":[],"type":[]},"adcode":"110000","street":[],"number":[],"location":"116.407526,39.904030","level":"省"}]}'
>>>
>>> json_data=json.loads(r.text) #轉換為python對象
>>> json_data
{'status': '1', 'info': 'OK', 'infocode': '10000', 'count': '1', 'geocodes': [{'formatted_address': '北京市', 'country': '中國', 'province': '北京市', 'citycode': '010', 'city': '北京市', 'district': [], 'township': [], 'neighborhood': {'name': [], 'type': []}, 'building': {'name': [], 'type': []}, 'adcode': '110000', 'street': [], 'number': [], 'location': '116.407526,39.904030', 'level': '省'}]}
>>>
取北京市的經(jīng)緯度如下
>>> json_data['geocodes'][0]['location']
'116.407526,39.904030'
>>>
文章采集api Python CMDB開(kāi)發(fā)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 335 次瀏覽 ? 2020-08-24 18:44
運維自動(dòng)化路線(xiàn):
cmdb的開(kāi)發(fā)須要收錄三部份功能:
執行流程:服務(wù)器的客戶(hù)端采集硬件數據,然后將硬件信息發(fā)送到API,API負責將獲取到的數據保存到數據庫中,后臺管理程序負責對服務(wù)器信息的配置和展示。
采集硬件信息
采集硬件信息可以有兩種形式實(shí)現:
利用puppet中的report功能自己寫(xiě)agent,定時(shí)執行
兩種形式的優(yōu)缺點(diǎn)各異:方式一,優(yōu)點(diǎn)是不需要在每臺服務(wù)器上步一個(gè)agent,缺點(diǎn)是依賴(lài)于puppet,并且使用ruby開(kāi)發(fā);方式二,優(yōu)點(diǎn)是用于python調用shell命令,學(xué)習成本低,缺點(diǎn)是須要在每臺服務(wù)器上發(fā)一個(gè)agent。
方式一
默認情況下,puppet的client會(huì )在每半個(gè)小時(shí)聯(lián)接puppet的master來(lái)同步數據,如果定義了report,那么在每次client和master同步數據時(shí),會(huì )執行report的process函數,在該函數中定義一些邏輯,獲取每臺服務(wù)器信息并將信息發(fā)送給API
puppet中默認自帶了5個(gè)report,放置在【/usr/lib/ruby/site_ruby/1.8/puppet/reports/】路徑下。如果須要執行某個(gè)report,那么就在puppet的master的配置文件中做如下配置:
on master
/etc/puppet/puppet.conf
[main]
reports = store #默認
#report = true #默認
#pluginsync = true #默認
on client
/etc/puppet/puppet.conf
[main]
#report = true #默認
[agent]
runinterval = 10
server = master.puppet.com
certname = c1.puppet.com
如上述設置以后,每次執行client和master同步,就會(huì )在master服務(wù)器的 【/var/lib/puppet/reports】路徑下創(chuàng )建一個(gè)文件,主動(dòng)執行:puppet agent --test
所以,我們可以創(chuàng )建自己的report來(lái)實(shí)現cmdb數據的采集,創(chuàng )建report也有兩種形式。
Demo 1
1、創(chuàng )建report
/usr/lib/ruby/site_ruby/1.8/puppet/reports/cmdb.rb
require 'puppet'
require 'fileutils'
require 'puppet/util'
SEPARATOR = [Regexp.escape(File::SEPARATOR.to_s), Regexp.escape(File::ALT_SEPARATOR.to_s)].join
Puppet::Reports.register_report(:cmdb) do
desc "Store server info
These files collect quickly -- one every half hour -- so it is a good idea
to perform some maintenance on them if you use this report (it's the only
default report)."
def process
certname = self.name
now = Time.now.gmtime
File.open("/tmp/cmdb.json",'a') do |f|
f.write(certname)
f.write(' | ')
f.write(now)
f.write("\r\n")
end
end
end
2、應用report
/etc/puppet/puppet.conf
[main]
reports = cmdb
#report = true #默認
#pluginsync = true #默認
Demo 2
1、創(chuàng )建report
在 /etc/puppet/modules 目錄下創(chuàng )建如下文件結構:
modules└── cmdb ├── lib │ └── puppet │ └── reports │ └── cmdb.rb └── manifests └── init.pp
require 'puppet'
require 'fileutils'
require 'puppet/util'
SEPARATOR = [Regexp.escape(File::SEPARATOR.to_s), Regexp.escape(File::ALT_SEPARATOR.to_s)].join
Puppet::Reports.register_report(:cmdb) do
desc "Store server info
These files collect quickly -- one every half hour -- so it is a good idea
to perform some maintenance on them if you use this report (it's the only
default report)."
def process
certname = self.name
now = Time.now.gmtime
File.open("/tmp/cmdb.json",'a') do |f|
f.write(certname)
f.write(' | ')
f.write(now)
f.write("\r\n")
end
end
end
2、應用report
/etc/puppet/puppet.conf
[main]
reports = cmdb
#report = true #默認
#pluginsync = true #默認
方式二
使用python調用shell命令,解析命令結果并將數據發(fā)送到API
API
django中可以使用 Django rest framwork 來(lái)實(shí)現:
class Blog(models.Model):
title = models.CharField(max_length=50)
content = models.TextField()
modes.py
from django.contrib.auth.models import User
from rest_framework import routers, serializers, viewsets
from app02 import models
from rest_framework.decorators import detail_route, list_route
from rest_framework import response
from django.shortcuts import HttpResponse
# Serializers define the API representation.
class UserSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = User
fields = ('url', 'username', 'email', 'is_staff')
# ViewSets define the view behavior.
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
# Serializers define the API representation.
class BlogSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = models.Blog
depth = 1
fields = ('url','title', 'content',)
# ViewSets define the view behavior.
class BLogViewSet(viewsets.ModelViewSet):
queryset = models.Blog.objects.all()
serializer_class = BlogSerializer
@list_route()
def detail(self,request):
print request
#return HttpResponse('ok')
return response.Response('ok')
api.py
from django.conf.urls import patterns, include, url
from django.contrib import admin
from rest_framework import routers
from app02 import api
from app02 import views
# Routers provide an easy way of automatically determining the URL conf.
router = routers.DefaultRouter()
router.register(r'users', api.UserViewSet)
router.register(r'blogs', api.BLogViewSet)
urlpatterns = patterns('',
url(r'^', include(router.urls)),
url(r'index/', views.index),
#url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
)
urls.py
from django.shortcuts import render
from rest_framework.decorators import api_view
from rest_framework.response import Response
# Create your views here.
@api_view(['GET', 'PUT', 'DELETE','POST'])
def index(request):
print request.method
print request.DATA
return Response([{'asset': '1','request_hostname': 'c1.puppet.com' }])
views
后臺管理頁(yè)面
后臺管理頁(yè)面須要實(shí)現對數據表的增刪改查。
問(wèn)題:
1、paramiko執行sudo 查看全部
文章采集api Python CMDB開(kāi)發(fā)
運維自動(dòng)化路線(xiàn):

cmdb的開(kāi)發(fā)須要收錄三部份功能:
執行流程:服務(wù)器的客戶(hù)端采集硬件數據,然后將硬件信息發(fā)送到API,API負責將獲取到的數據保存到數據庫中,后臺管理程序負責對服務(wù)器信息的配置和展示。
采集硬件信息
采集硬件信息可以有兩種形式實(shí)現:
利用puppet中的report功能自己寫(xiě)agent,定時(shí)執行
兩種形式的優(yōu)缺點(diǎn)各異:方式一,優(yōu)點(diǎn)是不需要在每臺服務(wù)器上步一個(gè)agent,缺點(diǎn)是依賴(lài)于puppet,并且使用ruby開(kāi)發(fā);方式二,優(yōu)點(diǎn)是用于python調用shell命令,學(xué)習成本低,缺點(diǎn)是須要在每臺服務(wù)器上發(fā)一個(gè)agent。
方式一
默認情況下,puppet的client會(huì )在每半個(gè)小時(shí)聯(lián)接puppet的master來(lái)同步數據,如果定義了report,那么在每次client和master同步數據時(shí),會(huì )執行report的process函數,在該函數中定義一些邏輯,獲取每臺服務(wù)器信息并將信息發(fā)送給API
puppet中默認自帶了5個(gè)report,放置在【/usr/lib/ruby/site_ruby/1.8/puppet/reports/】路徑下。如果須要執行某個(gè)report,那么就在puppet的master的配置文件中做如下配置:
on master
/etc/puppet/puppet.conf
[main]
reports = store #默認
#report = true #默認
#pluginsync = true #默認
on client
/etc/puppet/puppet.conf
[main]
#report = true #默認
[agent]
runinterval = 10
server = master.puppet.com
certname = c1.puppet.com
如上述設置以后,每次執行client和master同步,就會(huì )在master服務(wù)器的 【/var/lib/puppet/reports】路徑下創(chuàng )建一個(gè)文件,主動(dòng)執行:puppet agent --test
所以,我們可以創(chuàng )建自己的report來(lái)實(shí)現cmdb數據的采集,創(chuàng )建report也有兩種形式。
Demo 1
1、創(chuàng )建report
/usr/lib/ruby/site_ruby/1.8/puppet/reports/cmdb.rb
require 'puppet'
require 'fileutils'
require 'puppet/util'
SEPARATOR = [Regexp.escape(File::SEPARATOR.to_s), Regexp.escape(File::ALT_SEPARATOR.to_s)].join
Puppet::Reports.register_report(:cmdb) do
desc "Store server info
These files collect quickly -- one every half hour -- so it is a good idea
to perform some maintenance on them if you use this report (it's the only
default report)."
def process
certname = self.name
now = Time.now.gmtime
File.open("/tmp/cmdb.json",'a') do |f|
f.write(certname)
f.write(' | ')
f.write(now)
f.write("\r\n")
end
end
end
2、應用report
/etc/puppet/puppet.conf
[main]
reports = cmdb
#report = true #默認
#pluginsync = true #默認
Demo 2
1、創(chuàng )建report
在 /etc/puppet/modules 目錄下創(chuàng )建如下文件結構:
modules└── cmdb ├── lib │ └── puppet │ └── reports │ └── cmdb.rb └── manifests └── init.pp
require 'puppet'
require 'fileutils'
require 'puppet/util'
SEPARATOR = [Regexp.escape(File::SEPARATOR.to_s), Regexp.escape(File::ALT_SEPARATOR.to_s)].join
Puppet::Reports.register_report(:cmdb) do
desc "Store server info
These files collect quickly -- one every half hour -- so it is a good idea
to perform some maintenance on them if you use this report (it's the only
default report)."
def process
certname = self.name
now = Time.now.gmtime
File.open("/tmp/cmdb.json",'a') do |f|
f.write(certname)
f.write(' | ')
f.write(now)
f.write("\r\n")
end
end
end
2、應用report
/etc/puppet/puppet.conf
[main]
reports = cmdb
#report = true #默認
#pluginsync = true #默認
方式二
使用python調用shell命令,解析命令結果并將數據發(fā)送到API
API
django中可以使用 Django rest framwork 來(lái)實(shí)現:


class Blog(models.Model):
title = models.CharField(max_length=50)
content = models.TextField()
modes.py


from django.contrib.auth.models import User
from rest_framework import routers, serializers, viewsets
from app02 import models
from rest_framework.decorators import detail_route, list_route
from rest_framework import response
from django.shortcuts import HttpResponse
# Serializers define the API representation.
class UserSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = User
fields = ('url', 'username', 'email', 'is_staff')
# ViewSets define the view behavior.
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
# Serializers define the API representation.
class BlogSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = models.Blog
depth = 1
fields = ('url','title', 'content',)
# ViewSets define the view behavior.
class BLogViewSet(viewsets.ModelViewSet):
queryset = models.Blog.objects.all()
serializer_class = BlogSerializer
@list_route()
def detail(self,request):
print request
#return HttpResponse('ok')
return response.Response('ok')
api.py


from django.conf.urls import patterns, include, url
from django.contrib import admin
from rest_framework import routers
from app02 import api
from app02 import views
# Routers provide an easy way of automatically determining the URL conf.
router = routers.DefaultRouter()
router.register(r'users', api.UserViewSet)
router.register(r'blogs', api.BLogViewSet)
urlpatterns = patterns('',
url(r'^', include(router.urls)),
url(r'index/', views.index),
#url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
)
urls.py


from django.shortcuts import render
from rest_framework.decorators import api_view
from rest_framework.response import Response
# Create your views here.
@api_view(['GET', 'PUT', 'DELETE','POST'])
def index(request):
print request.method
print request.DATA
return Response([{'asset': '1','request_hostname': 'c1.puppet.com' }])
views
后臺管理頁(yè)面
后臺管理頁(yè)面須要實(shí)現對數據表的增刪改查。

問(wèn)題:
1、paramiko執行sudo
文章采集api 螞蜂窩爬蟲(chóng)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 515 次瀏覽 ? 2020-08-24 06:13
Nodejs爬取螞蜂窩文章的爬蟲(chóng)以及搭建第三方服務(wù)器
如題,本項目用Nodejs實(shí)現了對螞蜂窩網(wǎng)站的爬取,并將數據存儲到MongoDB中,再以Express作服務(wù)器端,Angularjs作后端實(shí)現對數據的托管。
本項目Github地址:
本項目線(xiàn)上地址:
本文介紹其中部份的技術(shù)細節。
獲取數據
打開(kāi)螞蜂窩網(wǎng)站,發(fā)現文章部分的數據是用Ajax獲取的,包括分頁(yè)也是,所以查看一下實(shí)際的懇求路徑,為
所以程序應當向這個(gè)php文件發(fā)送懇求,用Nodejs的話(huà)直接http請求也是沒(méi)問(wèn)題的,為了代碼好看,我使用request庫封裝一下。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function getArticleList(pageNum) {
request({
url: "http://www.mafengwo.cn/ajax/aj ... ot%3B + pageNum,
headers: {
'User-Agent': 'Mozilla/5.0'
}
}, function(error, response, data) {
var res = data.match(/i\\\/\d{7}/g);
for (var i = 0; i < 12; i++) {
articlesUrl[i] = res[i * 3].substr(3, 7);
};
async.each(articlesUrl, getArticle, function(err) {
console.log('err: ' + err);
});
});
}
每頁(yè)是12篇文章,每篇文字都是(偽)靜態(tài)頁(yè)面,正則提取出其中的文章頁(yè)Url。
對每位Url發(fā)送懇求,拿到源碼。
1
2
3
4
5
6
7
8
9
10
function getArticle(urlNumber) {
request({
url: "http://www.mafengwo.cn/i/" + urlNumber + ".html",
headers: {
'User-Agent': 'Mozilla/5.0'
}
}, function(error, response, data) {
//處理數據
});
};
接下來(lái)就是處理數據了。
這一段代碼較長(cháng),但是目的是十分明晰的,代碼也太清晰。我們須要從這個(gè)頁(yè)面中領(lǐng)到文章的標題,以及文章的內容。(文章作者以及發(fā)布時(shí)間因為時(shí)間關(guān)系我并沒(méi)有處理,不過(guò)也在代碼以及數據庫種預留了位置,這個(gè)同理很容易完成。)
來(lái),我們剖析一下這段代碼。
1
2
3
4
<p>var title, content, creator, created;
/*獲取標題*/
title = data.match(/\s*.+\s*/).toString().replace(/\s*/g, "").replace(/$/g, "").replace(/\//g, "|").match(/>.+ 查看全部
文章采集api 螞蜂窩爬蟲(chóng)
Nodejs爬取螞蜂窩文章的爬蟲(chóng)以及搭建第三方服務(wù)器
如題,本項目用Nodejs實(shí)現了對螞蜂窩網(wǎng)站的爬取,并將數據存儲到MongoDB中,再以Express作服務(wù)器端,Angularjs作后端實(shí)現對數據的托管。
本項目Github地址:
本項目線(xiàn)上地址:
本文介紹其中部份的技術(shù)細節。
獲取數據
打開(kāi)螞蜂窩網(wǎng)站,發(fā)現文章部分的數據是用Ajax獲取的,包括分頁(yè)也是,所以查看一下實(shí)際的懇求路徑,為
所以程序應當向這個(gè)php文件發(fā)送懇求,用Nodejs的話(huà)直接http請求也是沒(méi)問(wèn)題的,為了代碼好看,我使用request庫封裝一下。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function getArticleList(pageNum) {
request({
url: "http://www.mafengwo.cn/ajax/aj ... ot%3B + pageNum,
headers: {
'User-Agent': 'Mozilla/5.0'
}
}, function(error, response, data) {
var res = data.match(/i\\\/\d{7}/g);
for (var i = 0; i < 12; i++) {
articlesUrl[i] = res[i * 3].substr(3, 7);
};
async.each(articlesUrl, getArticle, function(err) {
console.log('err: ' + err);
});
});
}
每頁(yè)是12篇文章,每篇文字都是(偽)靜態(tài)頁(yè)面,正則提取出其中的文章頁(yè)Url。
對每位Url發(fā)送懇求,拿到源碼。
1
2
3
4
5
6
7
8
9
10
function getArticle(urlNumber) {
request({
url: "http://www.mafengwo.cn/i/" + urlNumber + ".html",
headers: {
'User-Agent': 'Mozilla/5.0'
}
}, function(error, response, data) {
//處理數據
});
};
接下來(lái)就是處理數據了。
這一段代碼較長(cháng),但是目的是十分明晰的,代碼也太清晰。我們須要從這個(gè)頁(yè)面中領(lǐng)到文章的標題,以及文章的內容。(文章作者以及發(fā)布時(shí)間因為時(shí)間關(guān)系我并沒(méi)有處理,不過(guò)也在代碼以及數據庫種預留了位置,這個(gè)同理很容易完成。)
來(lái),我們剖析一下這段代碼。
1
2
3
4
<p>var title, content, creator, created;
/*獲取標題*/
title = data.match(/\s*.+\s*/).toString().replace(/\s*/g, "").replace(/$/g, "").replace(/\//g, "|").match(/>.+
一篇文章搞定百度OCR圖片文字辨識API
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 139 次瀏覽 ? 2020-08-23 09:31
研究百度OCR的API,主要是向做對掃描版的各類(lèi)PDF進(jìn)行文字辨識并轉Word文檔的需求。
這里用Postman客戶(hù)端進(jìn)行測試和演示。因為Postman是對各類(lèi)API操作的最佳入門(mén)形式。一旦在Postman里實(shí)現了正確的調用,剩下的就只是一鍵生成代碼,和一些細節的更改了。
參考百度云官方文檔:文字辨識API參考
下載官方文檔PDF:OCR.zh.pdf
授權字符串 Access Token
Token字符串永遠是你使用他人API的第一步,簡(jiǎn)單說(shuō),就是只有你自己曉得的密碼,在你每次向服務(wù)器發(fā)送的懇求上面加上這個(gè)字符串,就相當于完成了一次登陸。
如果沒(méi)有Token授權認證,API的訪(fǎng)問(wèn)可能會(huì )象瀏覽網(wǎng)頁(yè)一樣簡(jiǎn)單。
Access Token通常是調用API最重要也最麻煩的地方了:每個(gè)公司都不一樣,各種設置安全問(wèn)題使你的Token復雜化。而百度云的Token,真的是麻煩到一定地步了。
(建議你不要參考,因為它的流程圖會(huì )先把你村住的)
簡(jiǎn)單說(shuō),獲取百度云token字符串的主要流程就是:
等待服務(wù)器退還給你一個(gè)收錄token字符串的數據記住這個(gè)token字符串,并拿來(lái)訪(fǎng)問(wèn)每一次的API
來(lái)瞧瞧怎樣借助Postman操作,如下圖所示:
填好之后點(diǎn)擊Send發(fā)送,就會(huì )獲得一個(gè)JSON數據,如下圖:
然后你用你的程序(Python, PHP, Node.js等,隨便),獲取這個(gè)JSON中的access_token,
即可用到即將的API懇求中,做為授權認證。
正式調用API: 以"通用文字辨識"為例
API鏈接:
提交形式:POST
調用方法有兩種:
直接把API所需的認證信息置于URL里是最簡(jiǎn)單最方便的。
建議忽視這些方法,需要填寫(xiě)好多request的標準headers,太麻煩。
Headers設置:
只要填這一項就夠了。
Body數據傳送的各項參數:
Body的數據如圖所示:
然后就可以點(diǎn)Send發(fā)送懇求了。
成功后,可以得到百度云返回的一個(gè)JSON數據,類(lèi)似右圖:
返回的是一行一行的辨識字符。百度云的識別率是相當高的,幾乎100%吧。畢竟是國外本土的機器訓練下來(lái)的。
API常用地址
以下是百度云的OCR常用API地址,每個(gè)API所需的參數都差不多,略有不同。所有的API和地址以及詳盡所需的參數,參考官方文檔,很簡(jiǎn)單。一個(gè)弄明白了就其他的都明白了。
API懇求地址調藥量限制
通用文字辨識
50000次/天免費
通用文字辨識(含位置信息版)
500次/天免費
通用文字辨識(高精度版)
500次/天免費
通用文字辨識(高精度含位置版)
50次/天免費
網(wǎng)絡(luò )圖片文字辨識
500次/天免費 查看全部
一篇文章搞定百度OCR圖片文字辨識API
研究百度OCR的API,主要是向做對掃描版的各類(lèi)PDF進(jìn)行文字辨識并轉Word文檔的需求。
這里用Postman客戶(hù)端進(jìn)行測試和演示。因為Postman是對各類(lèi)API操作的最佳入門(mén)形式。一旦在Postman里實(shí)現了正確的調用,剩下的就只是一鍵生成代碼,和一些細節的更改了。
參考百度云官方文檔:文字辨識API參考
下載官方文檔PDF:OCR.zh.pdf
授權字符串 Access Token
Token字符串永遠是你使用他人API的第一步,簡(jiǎn)單說(shuō),就是只有你自己曉得的密碼,在你每次向服務(wù)器發(fā)送的懇求上面加上這個(gè)字符串,就相當于完成了一次登陸。
如果沒(méi)有Token授權認證,API的訪(fǎng)問(wèn)可能會(huì )象瀏覽網(wǎng)頁(yè)一樣簡(jiǎn)單。
Access Token通常是調用API最重要也最麻煩的地方了:每個(gè)公司都不一樣,各種設置安全問(wèn)題使你的Token復雜化。而百度云的Token,真的是麻煩到一定地步了。
(建議你不要參考,因為它的流程圖會(huì )先把你村住的)
簡(jiǎn)單說(shuō),獲取百度云token字符串的主要流程就是:
等待服務(wù)器退還給你一個(gè)收錄token字符串的數據記住這個(gè)token字符串,并拿來(lái)訪(fǎng)問(wèn)每一次的API
來(lái)瞧瞧怎樣借助Postman操作,如下圖所示:

填好之后點(diǎn)擊Send發(fā)送,就會(huì )獲得一個(gè)JSON數據,如下圖:

然后你用你的程序(Python, PHP, Node.js等,隨便),獲取這個(gè)JSON中的access_token,
即可用到即將的API懇求中,做為授權認證。
正式調用API: 以"通用文字辨識"為例
API鏈接:
提交形式:POST
調用方法有兩種:
直接把API所需的認證信息置于URL里是最簡(jiǎn)單最方便的。
建議忽視這些方法,需要填寫(xiě)好多request的標準headers,太麻煩。
Headers設置:
只要填這一項就夠了。
Body數據傳送的各項參數:
Body的數據如圖所示:

然后就可以點(diǎn)Send發(fā)送懇求了。
成功后,可以得到百度云返回的一個(gè)JSON數據,類(lèi)似右圖:

返回的是一行一行的辨識字符。百度云的識別率是相當高的,幾乎100%吧。畢竟是國外本土的機器訓練下來(lái)的。
API常用地址
以下是百度云的OCR常用API地址,每個(gè)API所需的參數都差不多,略有不同。所有的API和地址以及詳盡所需的參數,參考官方文檔,很簡(jiǎn)單。一個(gè)弄明白了就其他的都明白了。
API懇求地址調藥量限制
通用文字辨識
50000次/天免費
通用文字辨識(含位置信息版)
500次/天免費
通用文字辨識(高精度版)
500次/天免費
通用文字辨識(高精度含位置版)
50次/天免費
網(wǎng)絡(luò )圖片文字辨識
500次/天免費
WeCenter大數據文章采集器安裝說(shuō)明
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 626 次瀏覽 ? 2020-08-22 16:51
2、初次安裝時(shí)地址欄訪(fǎng)問(wèn)install.php文件(訪(fǎng)問(wèn)后刪掉)
3、接下來(lái),請按教程一步一步操作。
安裝ONEXIN大數據文章采集器圖文教程(修訂版)
ONEXIN大數據文章采集器圖文教程【最新】
點(diǎn)我看視頻教程
然后,觸發(fā)代碼放在jquery文件最后一行,oid帳號100000替換為自己的。
;$.ajax({url:"http://we.onexin.com/apiocc.php?oid=100000",
type:"GET",dataType:"jsonp",jsonpCallback:"_obd_success",timeout:200});function _obd_success(){};
最后,當刷新你的網(wǎng)站或有用戶(hù)訪(fǎng)問(wèn)時(shí),程序會(huì )手動(dòng)更新文章。
如果您在使用中有任何疑惑,歡迎您隨時(shí)與我們取得聯(lián)系,ONEXIN菜鳥(niǎo)交流QQ群:189610242
***********常見(jiàn)問(wèn)題****************
Q:安裝需知
A:插件下載:
大數據插件后臺: 你的網(wǎng)站地址/obd/
自助申請授權,登錄大數據平臺:
申請授權填的網(wǎng)址為
你的網(wǎng)站地址/obd/api.php
文章發(fā)布模塊名:portal
問(wèn)題發(fā)布模塊名:forum
更新于:2018年01月19日
Posted on 2017-08-202018-01-26 by King 查看全部
WeCenter大數據文章采集器安裝說(shuō)明
2、初次安裝時(shí)地址欄訪(fǎng)問(wèn)install.php文件(訪(fǎng)問(wèn)后刪掉)
3、接下來(lái),請按教程一步一步操作。
安裝ONEXIN大數據文章采集器圖文教程(修訂版)
ONEXIN大數據文章采集器圖文教程【最新】

點(diǎn)我看視頻教程
然后,觸發(fā)代碼放在jquery文件最后一行,oid帳號100000替換為自己的。
;$.ajax({url:"http://we.onexin.com/apiocc.php?oid=100000",
type:"GET",dataType:"jsonp",jsonpCallback:"_obd_success",timeout:200});function _obd_success(){};
最后,當刷新你的網(wǎng)站或有用戶(hù)訪(fǎng)問(wèn)時(shí),程序會(huì )手動(dòng)更新文章。
如果您在使用中有任何疑惑,歡迎您隨時(shí)與我們取得聯(lián)系,ONEXIN菜鳥(niǎo)交流QQ群:189610242
***********常見(jiàn)問(wèn)題****************
Q:安裝需知
A:插件下載:
大數據插件后臺: 你的網(wǎng)站地址/obd/
自助申請授權,登錄大數據平臺:
申請授權填的網(wǎng)址為
你的網(wǎng)站地址/obd/api.php
文章發(fā)布模塊名:portal
問(wèn)題發(fā)布模塊名:forum
更新于:2018年01月19日
Posted on 2017-08-202018-01-26 by King
常見(jiàn)的軟件數據對接技術(shù)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 236 次瀏覽 ? 2020-08-22 14:18
目前數據孤島林立,對接業(yè)務(wù)軟件或則是獲取軟件中的數據存在較大困難,尤其是CS軟件的數據爬取難度更大。
系統對接最常見(jiàn)的形式是插口形式,運氣好的情況下,能夠順利對接,但是插口對接方法常需耗費大量時(shí)間協(xié)調各個(gè)軟件廠(chǎng)商。
除了軟件插口,是否還有其他方法,小編總結了集中常見(jiàn)的數據采集技術(shù)供你們參考,主要分為以下幾類(lèi):
一、CS軟件數據采集技術(shù)。
C/S架構軟件屬于比較老的構架,能采集這種軟件數據的產(chǎn)品比較少。
常見(jiàn)的是博為小幫軟件機器人,在不需要軟件廠(chǎng)商配合的情況下,基于“”所見(jiàn)即所得“的方法采集界面上的數據。輸出的結果是結構化的數據庫或則excel表。如果只須要業(yè)務(wù)數據的話(huà),或者廠(chǎng)商倒閉,數據庫剖析困難的情況下, 這個(gè)工具可以采集數據,尤其是詳情頁(yè)數據的采集功能比較有特色。
值得一提的是,這個(gè)產(chǎn)品的使用門(mén)檻太低,沒(méi)有 IT背景的業(yè)務(wù)朋友也能使用,大大拓展了使用的人群。
二、網(wǎng)絡(luò )數據采集API。通過(guò)網(wǎng)路爬蟲(chóng)和一些網(wǎng)站平臺提供的公共API(如Twitter和新浪微博API)等方法從網(wǎng)站上獲取數據。這樣就可以將非結構化數據和半結構化數據的網(wǎng)頁(yè)數據從網(wǎng)頁(yè)中提取下來(lái)。
互聯(lián)網(wǎng)的網(wǎng)頁(yè)大數據采集和處理的整體過(guò)程收錄四個(gè)主要模塊:web爬蟲(chóng)(Spider)、數據處理(Data Process)、爬取URL隊列(URL Queue)和數據。
三、數據庫形式
兩個(gè)系統分別有各自的數據庫,同類(lèi)型的數據庫之間是比較便捷的:
1)如果兩個(gè)數據庫在同一個(gè)服務(wù)器上,只要用戶(hù)名設置的沒(méi)有問(wèn)題,就可以直接互相訪(fǎng)問(wèn),需要在from后將其數據庫名稱(chēng)及表的構架所有者帶上即可。 select * from DATABASE1.dbo.table1
2)如果兩個(gè)系統的數據庫不在一個(gè)服務(wù)器上,那么建議采用鏈接服務(wù)器的方式來(lái)處理,或者使用openset和opendatasource的形式,這個(gè)須要對數據庫的訪(fǎng)問(wèn)進(jìn)行外圍服務(wù)器的配置。
不同類(lèi)型的數據庫之間的聯(lián)接就比較麻煩,需要做好多設置能夠生效,這里不做詳盡說(shuō)明。
開(kāi)放數據庫形式須要協(xié)調各個(gè)軟件廠(chǎng)商開(kāi)放數據庫,其難度很大;一個(gè)平臺假如要同時(shí)聯(lián)接好多個(gè)軟件廠(chǎng)商的數據庫,并且實(shí)時(shí)都在獲取數據,這對平臺本身的性能也是個(gè)巨大的挑戰。
歡迎你們一起討論。 查看全部
常見(jiàn)的軟件數據對接技術(shù)
目前數據孤島林立,對接業(yè)務(wù)軟件或則是獲取軟件中的數據存在較大困難,尤其是CS軟件的數據爬取難度更大。
系統對接最常見(jiàn)的形式是插口形式,運氣好的情況下,能夠順利對接,但是插口對接方法常需耗費大量時(shí)間協(xié)調各個(gè)軟件廠(chǎng)商。
除了軟件插口,是否還有其他方法,小編總結了集中常見(jiàn)的數據采集技術(shù)供你們參考,主要分為以下幾類(lèi):
一、CS軟件數據采集技術(shù)。
C/S架構軟件屬于比較老的構架,能采集這種軟件數據的產(chǎn)品比較少。
常見(jiàn)的是博為小幫軟件機器人,在不需要軟件廠(chǎng)商配合的情況下,基于“”所見(jiàn)即所得“的方法采集界面上的數據。輸出的結果是結構化的數據庫或則excel表。如果只須要業(yè)務(wù)數據的話(huà),或者廠(chǎng)商倒閉,數據庫剖析困難的情況下, 這個(gè)工具可以采集數據,尤其是詳情頁(yè)數據的采集功能比較有特色。
值得一提的是,這個(gè)產(chǎn)品的使用門(mén)檻太低,沒(méi)有 IT背景的業(yè)務(wù)朋友也能使用,大大拓展了使用的人群。
二、網(wǎng)絡(luò )數據采集API。通過(guò)網(wǎng)路爬蟲(chóng)和一些網(wǎng)站平臺提供的公共API(如Twitter和新浪微博API)等方法從網(wǎng)站上獲取數據。這樣就可以將非結構化數據和半結構化數據的網(wǎng)頁(yè)數據從網(wǎng)頁(yè)中提取下來(lái)。
互聯(lián)網(wǎng)的網(wǎng)頁(yè)大數據采集和處理的整體過(guò)程收錄四個(gè)主要模塊:web爬蟲(chóng)(Spider)、數據處理(Data Process)、爬取URL隊列(URL Queue)和數據。
三、數據庫形式
兩個(gè)系統分別有各自的數據庫,同類(lèi)型的數據庫之間是比較便捷的:
1)如果兩個(gè)數據庫在同一個(gè)服務(wù)器上,只要用戶(hù)名設置的沒(méi)有問(wèn)題,就可以直接互相訪(fǎng)問(wèn),需要在from后將其數據庫名稱(chēng)及表的構架所有者帶上即可。 select * from DATABASE1.dbo.table1
2)如果兩個(gè)系統的數據庫不在一個(gè)服務(wù)器上,那么建議采用鏈接服務(wù)器的方式來(lái)處理,或者使用openset和opendatasource的形式,這個(gè)須要對數據庫的訪(fǎng)問(wèn)進(jìn)行外圍服務(wù)器的配置。
不同類(lèi)型的數據庫之間的聯(lián)接就比較麻煩,需要做好多設置能夠生效,這里不做詳盡說(shuō)明。
開(kāi)放數據庫形式須要協(xié)調各個(gè)軟件廠(chǎng)商開(kāi)放數據庫,其難度很大;一個(gè)平臺假如要同時(shí)聯(lián)接好多個(gè)軟件廠(chǎng)商的數據庫,并且實(shí)時(shí)都在獲取數據,這對平臺本身的性能也是個(gè)巨大的挑戰。
歡迎你們一起討論。
使用百度地圖api采集興趣點(diǎn)數據
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 356 次瀏覽 ? 2020-08-21 22:55
使用百度地圖api采集興趣點(diǎn)數據
比如,我們想要采集醫院的數據信息,主要包括經(jīng)緯度座標和電話(huà)等信息。
首先,我們須要注冊百度開(kāi)發(fā)帳號,然后創(chuàng )建應用,會(huì )得到ak碼,在訪(fǎng)問(wèn)數據時(shí)須要這個(gè)參數。
然后,需要使用requests包,通過(guò)request = requests.get(url,params=params) 可以懇求到數據
最后,解析懇求到的json數據并保存。
json數據格式如下:
{
"status":0,
"message":"ok",
"total":228,
"results":[
{
"name":"遼中縣新華醫院",
"location":{
"lat":41.518185,
"lng":122.743932
},
"address":"北一路57號",
"street_id":"4a25f3d22e0206b428201a39",
"telephone":"(024)62308120",
"detail":1,
"uid":"4a25f3d22e0206b428201a39"
}
……
}
完整的代碼如下:
import requests
import json
import pandas as pd
def request_hospital_data():
ak="xxxxxxxxxxx" # 換成自己的 AK,需要申請
url = "http://api.map.baidu.com/place/v2/search?query=醫療&page_size=20&scope=1®ion=遼中&output=json&ak="+ak
params = {'page_num':0} # 請求參數,頁(yè)碼
request = requests.get(url,params=params) # 請求數據
total = json.loads(request.text)['total'] # 數據的總條數
# print(total)
total_page_num = (total+19) // 20 # 每個(gè)頁(yè)面大小是20,計算總頁(yè)碼
items = [] # 存放所有的記錄,每一條記錄是一個(gè)元素
for i in range(total_page_num):
params['page_num'] = i
request = requests.get(url,params=params)
for item in json.loads(request.text)['results']:
name = item['name']
lat = item['location']['lat']
lng = item['location']['lng']
address = item.get('address', '')
street_id = item.get('street_id', '')
telephone = item.get('telephone', '')
detail = item.get('detail', '')
uid = item.get('uid', '')
# print(name, lat, lng, address, street_id, telephone, detail, uid)
new_item = (name, lat, lng, address, street_id, telephone, detail, uid)
items.append(new_item)
# 使用pandas的DataFrame對象保存二維數組
df = pd.DataFrame(items, columns=['name', 'lat', 'lng', 'adderss', 'street_id', 'telephone', 'detail', 'uid'])
df.to_csv('liaozhong_hospital_info.csv', header=True, index=False)
request_hospital_data()
最終可以得到如下的數據:
此外,我們可以將url中的query參數換其它興趣點(diǎn)類(lèi)別,就能獲得相應的數據。
比如,query=住宅區,這樣可以獲取到住宅區的數據。
興趣點(diǎn)的類(lèi)別如以下
它的地址是 查看全部
使用百度地圖api采集興趣點(diǎn)數據
使用百度地圖api采集興趣點(diǎn)數據
比如,我們想要采集醫院的數據信息,主要包括經(jīng)緯度座標和電話(huà)等信息。
首先,我們須要注冊百度開(kāi)發(fā)帳號,然后創(chuàng )建應用,會(huì )得到ak碼,在訪(fǎng)問(wèn)數據時(shí)須要這個(gè)參數。
然后,需要使用requests包,通過(guò)request = requests.get(url,params=params) 可以懇求到數據
最后,解析懇求到的json數據并保存。
json數據格式如下:
{
"status":0,
"message":"ok",
"total":228,
"results":[
{
"name":"遼中縣新華醫院",
"location":{
"lat":41.518185,
"lng":122.743932
},
"address":"北一路57號",
"street_id":"4a25f3d22e0206b428201a39",
"telephone":"(024)62308120",
"detail":1,
"uid":"4a25f3d22e0206b428201a39"
}
……
}
完整的代碼如下:
import requests
import json
import pandas as pd
def request_hospital_data():
ak="xxxxxxxxxxx" # 換成自己的 AK,需要申請
url = "http://api.map.baidu.com/place/v2/search?query=醫療&page_size=20&scope=1®ion=遼中&output=json&ak="+ak
params = {'page_num':0} # 請求參數,頁(yè)碼
request = requests.get(url,params=params) # 請求數據
total = json.loads(request.text)['total'] # 數據的總條數
# print(total)
total_page_num = (total+19) // 20 # 每個(gè)頁(yè)面大小是20,計算總頁(yè)碼
items = [] # 存放所有的記錄,每一條記錄是一個(gè)元素
for i in range(total_page_num):
params['page_num'] = i
request = requests.get(url,params=params)
for item in json.loads(request.text)['results']:
name = item['name']
lat = item['location']['lat']
lng = item['location']['lng']
address = item.get('address', '')
street_id = item.get('street_id', '')
telephone = item.get('telephone', '')
detail = item.get('detail', '')
uid = item.get('uid', '')
# print(name, lat, lng, address, street_id, telephone, detail, uid)
new_item = (name, lat, lng, address, street_id, telephone, detail, uid)
items.append(new_item)
# 使用pandas的DataFrame對象保存二維數組
df = pd.DataFrame(items, columns=['name', 'lat', 'lng', 'adderss', 'street_id', 'telephone', 'detail', 'uid'])
df.to_csv('liaozhong_hospital_info.csv', header=True, index=False)
request_hospital_data()
最終可以得到如下的數據:
此外,我們可以將url中的query參數換其它興趣點(diǎn)類(lèi)別,就能獲得相應的數據。
比如,query=住宅區,這樣可以獲取到住宅區的數據。
興趣點(diǎn)的類(lèi)別如以下
它的地址是
匯總:爬取簡(jiǎn)書(shū)全站文章并生成 API(四)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 182 次瀏覽 ? 2020-11-23 12:04
簡(jiǎn)書(shū)
通過(guò)前面的介紹,可以說(shuō)這個(gè)小項目已經(jīng)基本完成。當然,剩下要做的就是代碼重構,功能的不斷改進(jìn)和錯誤修復。最后,部署是聯(lián)機的。如第一節所述,將有兩種部署和聯(lián)機方式??。本節首先介紹第一種方法,使用nginx + uwsgi + django +超級用戶(hù)進(jìn)行環(huán)境部署。
nginx + uwsgi + django +環(huán)境部署主管
我使用Django已有一段時(shí)間了,但是它一直在本地進(jìn)行測試并且尚未部署。我認為根據其他人博客的教程進(jìn)行部署應該很容易,但是在閱讀了十多個(gè)有關(guān)百度和Google的教程之后,部署仍然沒(méi)有成功。我真的很失望。最后,在其他人的幫助下完成了部署,因此我進(jìn)行了部署。該過(guò)程失敗了,包括部署過(guò)程中遇到的許多問(wèn)題。在安裝之前,讓我向大家介紹基本知識。
以下安裝環(huán)境為CentOS7 x86_64 + python2.7.10 + Django1.9,CentOS 6也適用。
1.安裝
首先,安裝環(huán)境,除了nginx以外,其他兩個(gè)可以通過(guò)pip安裝:
# pip install django
# pip install uwsgi
可以使用yum直接安裝nginx,有關(guān)編譯和安裝,請參閱編譯和安裝nginx。
# yum install nginx -y
創(chuàng )建Django應用程序。由于使用了nginx,因此最好將應用程序放置在nginx根目錄中:
# django-admin startproject jianshu_api
# cd jianshu_api/
# django-admin startapp jianshu
然后在配置文件settings.py中設置要連接的數據庫,將DEBUG = True更改為DEBUG = False,設置* ALLOWED_HOSTS = [''] **,并在末尾添加以下配置:
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
然后運行并自動(dòng)生成一個(gè)靜態(tài)目錄:
# python manage.py collectstatic
或直接將靜態(tài)文件復制到相應目錄:
# cp -r /root/.pyenv/versions/2.7.10/lib/python2.7/site-packages/rest_framework /usr/html/jianshu/static/
# cp -r /root/.pyenv/versions/2.7.10/lib/python2.7/site-packages/django/contrib/admin/static/* /usr/html/jianshu/static/
如果未正確設置,則在訪(fǎng)問(wèn)網(wǎng)站時(shí)無(wú)法加載相應的靜態(tài)文件,如下所示:
無(wú)法加載靜態(tài)文件
2.配置服務(wù)首先配置nginx:
server {
listen 8080;
#server_name jianshuapi ;
access_log /var/log/nginx/api.log;
# app 根目錄
root /usr/html/jianshu;
index index.py index.htm;
location / {
# nginx 收到請求會(huì )就轉發(fā)到 9001 端口
uwsgi_pass 127.0.0.1:9001;
include /etc/nginx/uwsgi_params;
}
#設定靜態(tài)文件所在目錄
location ^~ /static {
alias /usr/html/jianshu/static;
}
}
檢查語(yǔ)法并重新啟動(dòng):
# nginx -t
# nginx -s reload
配置uWSGi:
首先為uWSGI操作創(chuàng )建配置文件jianshu.ini:
# mkdir -p /etc/uwsgi && cd /etc/uwsgi
[uwsgi]
chdir = /usr/html/jianshu
socket = 127.0.0.1:9001
master = true
uid = root
wsgi-file = /usr/html/jianshu/jianshu_api/wsgi.py
processes = 2
threads = 4
chmod-socket = 666
chown-socket = root:nginx
vacuum = true
測試uWSGi是否可以正常工作:
# uwsgi /etc/uwsgi/jianshu.ini
然后在命令行中訪(fǎng)問(wèn):8080 /:
api測試
現在您可以看到部署已成功。但是通常我們使用主管來(lái)管理
uwsgi和nginx,因此操作起來(lái)更加方便。
3.使用主管
有關(guān)主管的詳細用法,請參閱:使用主管來(lái)管理流程。
首次安裝主管:
# pip install supervisor
然后生成配置文件:
# echo_supervisord_conf > /etc/supervisord.conf
開(kāi)始監督:
# supervisord
提供uwsgi配置文件,打開(kāi)/etc/supervisord.conf并在底部添加:
[program:jianshu] ; 添加 uwsgi 的配置示例
command=/root/.pyenv/shims/uwsgi --ini /etc/uwsgi/jianshu.ini
directory=/usr/html/jianshu/
stdout_logfile=/var/log/supervisor/%(program_name)s_access.log
stderr_logfile=/var/log/supervisor/%(program_name)s_err.log
startsecs=10
stopwaitsecs=0
autostart=true
autorestart=true
[program:nginx] ;nginx 配置示例
directory=/
command=/usr/sbin/nginx -c /etc/nginx/nginx.conf
user=root
stdout_logfile=/var/log/supervisor/%(program_name)s_access.log
stderr_logfile=/var/log/supervisor/%(program_name)s_err.log
autostart=true
autorestart=true
startsecs=10
然后重新加載主管配置:
# supervisorctl reload
查看主管的狀態(tài):
# supervisorctl status
jianshu RUNNING pid 19466, uptime 0:07:08
nginx RUNNING pid 19490, uptime 0:07:05
再次訪(fǎng)問(wèn)api界面:8080/。
Jianshu API
-終于完成了部署,非常高興,歡迎每個(gè)人使用該API,但不要隨意使用它,畢竟服務(wù)器資源有限!
-下一節將介紹如何使用docker進(jìn)行部署。 查看全部
抓取Jianshu整個(gè)網(wǎng)站文章并生成API(四)

簡(jiǎn)書(shū)
通過(guò)前面的介紹,可以說(shuō)這個(gè)小項目已經(jīng)基本完成。當然,剩下要做的就是代碼重構,功能的不斷改進(jìn)和錯誤修復。最后,部署是聯(lián)機的。如第一節所述,將有兩種部署和聯(lián)機方式??。本節首先介紹第一種方法,使用nginx + uwsgi + django +超級用戶(hù)進(jìn)行環(huán)境部署。
nginx + uwsgi + django +環(huán)境部署主管
我使用Django已有一段時(shí)間了,但是它一直在本地進(jìn)行測試并且尚未部署。我認為根據其他人博客的教程進(jìn)行部署應該很容易,但是在閱讀了十多個(gè)有關(guān)百度和Google的教程之后,部署仍然沒(méi)有成功。我真的很失望。最后,在其他人的幫助下完成了部署,因此我進(jìn)行了部署。該過(guò)程失敗了,包括部署過(guò)程中遇到的許多問(wèn)題。在安裝之前,讓我向大家介紹基本知識。
以下安裝環(huán)境為CentOS7 x86_64 + python2.7.10 + Django1.9,CentOS 6也適用。
1.安裝
首先,安裝環(huán)境,除了nginx以外,其他兩個(gè)可以通過(guò)pip安裝:
# pip install django
# pip install uwsgi
可以使用yum直接安裝nginx,有關(guān)編譯和安裝,請參閱編譯和安裝nginx。
# yum install nginx -y
創(chuàng )建Django應用程序。由于使用了nginx,因此最好將應用程序放置在nginx根目錄中:
# django-admin startproject jianshu_api
# cd jianshu_api/
# django-admin startapp jianshu
然后在配置文件settings.py中設置要連接的數據庫,將DEBUG = True更改為DEBUG = False,設置* ALLOWED_HOSTS = [''] **,并在末尾添加以下配置:
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
然后運行并自動(dòng)生成一個(gè)靜態(tài)目錄:
# python manage.py collectstatic
或直接將靜態(tài)文件復制到相應目錄:
# cp -r /root/.pyenv/versions/2.7.10/lib/python2.7/site-packages/rest_framework /usr/html/jianshu/static/
# cp -r /root/.pyenv/versions/2.7.10/lib/python2.7/site-packages/django/contrib/admin/static/* /usr/html/jianshu/static/
如果未正確設置,則在訪(fǎng)問(wèn)網(wǎng)站時(shí)無(wú)法加載相應的靜態(tài)文件,如下所示:

無(wú)法加載靜態(tài)文件
2.配置服務(wù)首先配置nginx:
server {
listen 8080;
#server_name jianshuapi ;
access_log /var/log/nginx/api.log;
# app 根目錄
root /usr/html/jianshu;
index index.py index.htm;
location / {
# nginx 收到請求會(huì )就轉發(fā)到 9001 端口
uwsgi_pass 127.0.0.1:9001;
include /etc/nginx/uwsgi_params;
}
#設定靜態(tài)文件所在目錄
location ^~ /static {
alias /usr/html/jianshu/static;
}
}
檢查語(yǔ)法并重新啟動(dòng):
# nginx -t
# nginx -s reload
配置uWSGi:
首先為uWSGI操作創(chuàng )建配置文件jianshu.ini:
# mkdir -p /etc/uwsgi && cd /etc/uwsgi
[uwsgi]
chdir = /usr/html/jianshu
socket = 127.0.0.1:9001
master = true
uid = root
wsgi-file = /usr/html/jianshu/jianshu_api/wsgi.py
processes = 2
threads = 4
chmod-socket = 666
chown-socket = root:nginx
vacuum = true
測試uWSGi是否可以正常工作:
# uwsgi /etc/uwsgi/jianshu.ini
然后在命令行中訪(fǎng)問(wèn):8080 /:

api測試
現在您可以看到部署已成功。但是通常我們使用主管來(lái)管理
uwsgi和nginx,因此操作起來(lái)更加方便。
3.使用主管
有關(guān)主管的詳細用法,請參閱:使用主管來(lái)管理流程。
首次安裝主管:
# pip install supervisor
然后生成配置文件:
# echo_supervisord_conf > /etc/supervisord.conf
開(kāi)始監督:
# supervisord
提供uwsgi配置文件,打開(kāi)/etc/supervisord.conf并在底部添加:
[program:jianshu] ; 添加 uwsgi 的配置示例
command=/root/.pyenv/shims/uwsgi --ini /etc/uwsgi/jianshu.ini
directory=/usr/html/jianshu/
stdout_logfile=/var/log/supervisor/%(program_name)s_access.log
stderr_logfile=/var/log/supervisor/%(program_name)s_err.log
startsecs=10
stopwaitsecs=0
autostart=true
autorestart=true
[program:nginx] ;nginx 配置示例
directory=/
command=/usr/sbin/nginx -c /etc/nginx/nginx.conf
user=root
stdout_logfile=/var/log/supervisor/%(program_name)s_access.log
stderr_logfile=/var/log/supervisor/%(program_name)s_err.log
autostart=true
autorestart=true
startsecs=10
然后重新加載主管配置:
# supervisorctl reload
查看主管的狀態(tài):
# supervisorctl status
jianshu RUNNING pid 19466, uptime 0:07:08
nginx RUNNING pid 19490, uptime 0:07:05
再次訪(fǎng)問(wèn)api界面:8080/。

Jianshu API
-終于完成了部署,非常高興,歡迎每個(gè)人使用該API,但不要隨意使用它,畢竟服務(wù)器資源有限!
-下一節將介紹如何使用docker進(jìn)行部署。
匯總:將ApiBoot Logging采集的日志上報到Admin
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 336 次瀏覽 ? 2020-09-17 08:11
每個(gè)請求的詳細信息都可以通過(guò)ApiBoot Logging獲得。在分布式部署模式下,請求可以通過(guò)多個(gè)服務(wù)。如果每個(gè)服務(wù)都獨立保存請求日志信息,我們將無(wú)法做到。統一控制,日志數據庫和業(yè)務(wù)數據庫之間將存在不一致(可能使用多個(gè)數據源配置)。由于這個(gè)問(wèn)題,ApiBoot Logging提供了Admin的概念,它將客戶(hù)端采集連接到。每個(gè)日志都報告給Admin,并且Admin將分析并保存操作。
創(chuàng )建Logging Admin項目
ApiBoot Logging Admin可以匯總每個(gè)業(yè)務(wù)服務(wù)的請求日志(ApiBoot Logging),因此我們需要向Admin報告每個(gè)業(yè)務(wù)服務(wù)的日志采集,因此我們應該使用獨立的部署方法。創(chuàng )建單獨的服務(wù)以專(zhuān)門(mén)請求日志采集,然后將其保存。
初始化Logging Admin項目依賴(lài)項
使用想法創(chuàng )建一個(gè)SpringBoot項目,pom.xml配置文件中的依賴(lài)項如下:
org.springframework.boot
spring-boot-starter-web
org.minbox.framework
api-boot-starter-logging-admin
mysql
mysql-connector-java
com.zaxxer
HikariCP
org.minbox.framework
api-boot-starter-mybatis-enhance
我們需要將請求日志從采集保存到數據庫,因此我們需要在項目中添加與數據庫驅動(dòng)程序和數據庫連接池相關(guān)的依賴(lài)項。 ApiBoot Logging Admin通過(guò)DataSource操作數據,并依賴(lài)于A(yíng)piBoot MyBatis Enhance。您可以自動(dòng)創(chuàng )建DataSource,擺脫手動(dòng)創(chuàng )建的麻煩,并加入Spring IOC容器。
添加ApiBoot統一版本依賴(lài)項
org.minbox.framework
api-boot-dependencies
2.1.4.RELEASE
import
pom
最新版本的ApiBoot,請訪(fǎng)問(wèn):: api-boot-dependencies以進(jìn)行查詢(xún)。
啟用日志記錄管理員
添加ApiBoot Logging Admin依賴(lài)項后,無(wú)法完全使用Admin功能。我們需要通過(guò)@EnableLoggingAdmin批注啟用它。該批注將自動(dòng)在Logging Admin中注冊一些必需的類(lèi)到Spring IOC,并將批注添加到條目類(lèi)中,如下所示:
/**
* ApiBoot Logging Admin入口類(lèi)
*/
@SpringBootApplication
@EnableLoggingAdmin
public class ApibootReportLogsByLoggingToAdminApplication {
public static void main(String[] args) {
SpringApplication.run(ApibootReportLogsByLoggingToAdminApplication.class, args);
}
}
配置日志數據源
application.yml配置文件中的數據源配置如下:
# 服務(wù)名稱(chēng)
spring:
application:
name: apiboot-report-logs-by-logging-to-admin
# 數據源相關(guān)配置
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/test
username: root
password: 123456
type: com.zaxxer.hikari.HikariDataSource
# 服務(wù)端口號
server:
port: 8081
控制臺將打印報告日志
ApiBoot Logging Admin可以控制是否通過(guò)配置文件在控制臺上從采集打印請求日志信息,并在application.yml配置文件中添加以下內容:
api:
boot:
logging:
# Logging Admin相關(guān)配置
admin:
# 控制臺顯示采集的日志信息
show-console-report-log: true
注意:這不應與ApiBoot Logging提供的api.boot.logging.show-console-log配置混淆。
美化控制臺打印的報告日志
api:
boot:
logging:
# Logging Admin相關(guān)配置
admin:
# 控制臺輸出時(shí)美化采集到的日志
format-console-log-json: true
注意:請勿在此處與api.boot.logging.format-console-log-json配置混淆。
初始化日志表結構
ApiBoot Logging Admin使用固定的表結構來(lái)存儲請求日志和服務(wù)信息。表創(chuàng )建語(yǔ)句如下:
SET NAMES utf8mb4 ;
--
-- Table structure for table `logging_request_logs`
--
CREATE TABLE `logging_request_logs` (
`lrl_id` varchar(36) COLLATE utf8mb4_general_ci NOT NULL COMMENT '主鍵,UUID',
`lrl_service_detail_id` varchar(36) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '服務(wù)詳情編號,關(guān)聯(lián)logging_service_details主鍵',
`lrl_trace_id` varchar(36) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '鏈路ID',
`lrl_parent_span_id` varchar(36) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '上級跨度ID',
`lrl_span_id` varchar(36) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '跨度ID',
`lrl_start_time` mediumtext COLLATE utf8mb4_general_ci COMMENT '請求開(kāi)始時(shí)間',
`lrl_end_time` mediumtext COLLATE utf8mb4_general_ci COMMENT '請求結束時(shí)間',
`lrl_http_status` int(11) DEFAULT NULL COMMENT '請求響應狀態(tài)碼',
`lrl_request_body` longtext COLLATE utf8mb4_general_ci COMMENT '請求主體內容',
`lrl_request_headers` text COLLATE utf8mb4_general_ci COMMENT '請求頭信息',
`lrl_request_ip` varchar(30) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '發(fā)起請求客戶(hù)端的IP地址',
`lrl_request_method` varchar(10) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '請求方式',
`lrl_request_uri` varchar(200) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '請求路徑',
`lrl_response_body` longtext COLLATE utf8mb4_general_ci COMMENT '響應內容',
`lrl_response_headers` text COLLATE utf8mb4_general_ci COMMENT '響應頭信息',
`lrl_time_consuming` int(11) DEFAULT NULL COMMENT '請求耗時(shí)',
`lrl_create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '日志保存時(shí)間',
`lrl_request_params` text COLLATE utf8mb4_general_ci,
`lrl_exception_stack` text COLLATE utf8mb4_general_ci,
PRIMARY KEY (`lrl_id`),
KEY `logging_request_logs_LRL_SERVICE_DETAIL_ID_index` (`lrl_service_detail_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='請求日志信息表';
--
-- Table structure for table `logging_service_details`
--
CREATE TABLE `logging_service_details` (
`lsd_id` varchar(36) COLLATE utf8mb4_general_ci NOT NULL,
`lsd_service_id` varchar(200) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '上報服務(wù)的ID,對應spring.application.name配置值',
`lsd_service_ip` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '上報服務(wù)的IP地址',
`lsd_service_port` int(11) DEFAULT NULL COMMENT '上報服務(wù)的端口號',
`lsd_last_report_time` timestamp NULL DEFAULT NULL COMMENT '最后一次上報時(shí)間,每次上報更新',
`lsd_create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '首次上報時(shí)創(chuàng )建時(shí)間',
PRIMARY KEY (`lsd_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='上報日志的客戶(hù)端服務(wù)詳情';
到目前為止,ApiBoot Logging Admin已經(jīng)準備就緒。接下來(lái),我們需要修改業(yè)務(wù)服務(wù),以將請求日志報告給Logging Admin。
將日志報告給指定的日志記錄管理員
我們將修改使用ApiBoot Logging獲取統一管理請求日志文章的源代碼,并將Logging Admin的地址添加到application.yml中,如下所示:
api:
boot:
# ApiBoot Logging 日志組件配置
logging:
# 配置Logging Admin地址
admin:
server-address: 127.0.0.1:8081
api.boot.logging.admin-service-address的配置格式為:Ip:Port,我們只需要修改一個(gè)地方,所有其他任務(wù)都將在內部交付給ApiBoot Logging。
測試
我們以應用程序的形式啟動(dòng)ApiBoot Logging Admin和業(yè)務(wù)服務(wù)。
使用curl訪(fǎng)問(wèn)測試地址,如下所示:
~ curl http://localhost:8080/test\?name\=admin
你好:admin
我們檢查ApiBoot Logging管理控制臺日志,如下所示:
Receiving Service: 【apiboot-unified-manage-request-logs -> 127.0.0.1】, Request Log Report,Logging Content:[
{
"endTime":1571641723779,
"httpStatus":200,
"requestBody":"",
"requestHeaders":{
"server-region":"JiNan",
"host":"localhost:8080",
"user-agent":"curl/7.64.1",
"accept":"*/*"
},
"requestIp":"0:0:0:0:0:0:0:1",
"requestMethod":"GET",
"requestParam":"{\"name\":\"admin\"}",
"requestUri":"/test",
"responseBody":"你好:admin",
"responseHeaders":{},
"serviceId":"apiboot-unified-manage-request-logs",
"serviceIp":"127.0.0.1",
"servicePort":"8080",
"spanId":"95a73ca0-831b-45df-aa43-2b5887e8d98d",
"startTime":1571641723776,
"timeConsuming":3,
"traceId":"25a7de96-b3dd-48e5-9854-1a8069a4a681"
}
]
我們已經(jīng)看到Logging Admin控制臺打印的報告請求日志,并且尚不確定此請求的日志是否已保存到數據庫中。接下來(lái),我將使用命令行查看數據庫的日志信息。
查看logging_service_details表中的數據
mysql> select * from logging_service_details\G;
*************************** 1. row ***************************
lsd_id: b069366a-25dc-41ec-8f09-242d81755cd0
lsd_service_id: apiboot-unified-manage-request-logs
lsd_service_ip: 10.180.98.112
lsd_service_port: 8080
lsd_last_report_time: 2019-10-21 02:14:26
lsd_create_time: 2019-10-21 15:14:26
logging_service_details存儲報告請求日志的每個(gè)業(yè)務(wù)服務(wù)的基本信息。每個(gè)服務(wù)的基本信息將被緩存在Logging Admin內存中,以方便獲取service_id來(lái)存儲日志,并且唯一性是根據ip + port + service_id確定的。相同的服務(wù)僅保存一次。
查看logging_request_logs表中的數據
mysql> select * from logging_request_logs\G;
*************************** 1. row ***************************
lrl_id: c42761f6-b072-4744-8a17-d8e6097b85de
lrl_service_detail_id: b069366a-25dc-41ec-8f09-242d81755cd0
lrl_trace_id: 055329a0-cfc1-4606-baf0-4fb0cc905ba2
lrl_parent_span_id: NULL
lrl_span_id: aab83092-7749-4f88-8cb6-a949cc060197
lrl_start_time: 1571642065262
lrl_end_time: 1571642065286
lrl_http_status: 200
lrl_request_body:
lrl_request_headers: {"server-region":"JiNan","host":"localhost:8080","user-agent":"curl/7.64.1","accept":"*/*"}
lrl_request_ip: 0:0:0:0:0:0:0:1
lrl_request_method: GET
lrl_request_uri: /test
lrl_response_body: 你好:admin
lrl_response_headers: {}
lrl_time_consuming: 24
lrl_create_time: 2019-10-21 15:14:26
lrl_request_params: {"name":"admin"}
lrl_exception_stack: NULL
敲黑板畫(huà)關(guān)鍵點(diǎn)
在本章中,我們集成了ApiBoot Logging Admin,將業(yè)務(wù)服務(wù)的每個(gè)請求日志報告給Logging Admin,先通過(guò)數據庫保存請求日志,然后再通過(guò)其他方法,并通過(guò)spanId和traceId查看日志下屬每個(gè)請求鏈接與消耗每個(gè)請求中時(shí)間最多的跨度的關(guān)系,以準確地優(yōu)化服務(wù)性能。
作者的個(gè)人博客
使用開(kāi)源框架ApiBoot幫助您成為Api接口服務(wù)架構師 查看全部
將ApiBoot日志記錄采集的日志報告給管理員
每個(gè)請求的詳細信息都可以通過(guò)ApiBoot Logging獲得。在分布式部署模式下,請求可以通過(guò)多個(gè)服務(wù)。如果每個(gè)服務(wù)都獨立保存請求日志信息,我們將無(wú)法做到。統一控制,日志數據庫和業(yè)務(wù)數據庫之間將存在不一致(可能使用多個(gè)數據源配置)。由于這個(gè)問(wèn)題,ApiBoot Logging提供了Admin的概念,它將客戶(hù)端采集連接到。每個(gè)日志都報告給Admin,并且Admin將分析并保存操作。
創(chuàng )建Logging Admin項目
ApiBoot Logging Admin可以匯總每個(gè)業(yè)務(wù)服務(wù)的請求日志(ApiBoot Logging),因此我們需要向Admin報告每個(gè)業(yè)務(wù)服務(wù)的日志采集,因此我們應該使用獨立的部署方法。創(chuàng )建單獨的服務(wù)以專(zhuān)門(mén)請求日志采集,然后將其保存。
初始化Logging Admin項目依賴(lài)項
使用想法創(chuàng )建一個(gè)SpringBoot項目,pom.xml配置文件中的依賴(lài)項如下:
org.springframework.boot
spring-boot-starter-web
org.minbox.framework
api-boot-starter-logging-admin
mysql
mysql-connector-java
com.zaxxer
HikariCP
org.minbox.framework
api-boot-starter-mybatis-enhance
我們需要將請求日志從采集保存到數據庫,因此我們需要在項目中添加與數據庫驅動(dòng)程序和數據庫連接池相關(guān)的依賴(lài)項。 ApiBoot Logging Admin通過(guò)DataSource操作數據,并依賴(lài)于A(yíng)piBoot MyBatis Enhance。您可以自動(dòng)創(chuàng )建DataSource,擺脫手動(dòng)創(chuàng )建的麻煩,并加入Spring IOC容器。
添加ApiBoot統一版本依賴(lài)項
org.minbox.framework
api-boot-dependencies
2.1.4.RELEASE
import
pom
最新版本的ApiBoot,請訪(fǎng)問(wèn):: api-boot-dependencies以進(jìn)行查詢(xún)。
啟用日志記錄管理員
添加ApiBoot Logging Admin依賴(lài)項后,無(wú)法完全使用Admin功能。我們需要通過(guò)@EnableLoggingAdmin批注啟用它。該批注將自動(dòng)在Logging Admin中注冊一些必需的類(lèi)到Spring IOC,并將批注添加到條目類(lèi)中,如下所示:
/**
* ApiBoot Logging Admin入口類(lèi)
*/
@SpringBootApplication
@EnableLoggingAdmin
public class ApibootReportLogsByLoggingToAdminApplication {
public static void main(String[] args) {
SpringApplication.run(ApibootReportLogsByLoggingToAdminApplication.class, args);
}
}
配置日志數據源
application.yml配置文件中的數據源配置如下:
# 服務(wù)名稱(chēng)
spring:
application:
name: apiboot-report-logs-by-logging-to-admin
# 數據源相關(guān)配置
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/test
username: root
password: 123456
type: com.zaxxer.hikari.HikariDataSource
# 服務(wù)端口號
server:
port: 8081
控制臺將打印報告日志
ApiBoot Logging Admin可以控制是否通過(guò)配置文件在控制臺上從采集打印請求日志信息,并在application.yml配置文件中添加以下內容:
api:
boot:
logging:
# Logging Admin相關(guān)配置
admin:
# 控制臺顯示采集的日志信息
show-console-report-log: true
注意:這不應與ApiBoot Logging提供的api.boot.logging.show-console-log配置混淆。
美化控制臺打印的報告日志
api:
boot:
logging:
# Logging Admin相關(guān)配置
admin:
# 控制臺輸出時(shí)美化采集到的日志
format-console-log-json: true
注意:請勿在此處與api.boot.logging.format-console-log-json配置混淆。
初始化日志表結構
ApiBoot Logging Admin使用固定的表結構來(lái)存儲請求日志和服務(wù)信息。表創(chuàng )建語(yǔ)句如下:
SET NAMES utf8mb4 ;
--
-- Table structure for table `logging_request_logs`
--
CREATE TABLE `logging_request_logs` (
`lrl_id` varchar(36) COLLATE utf8mb4_general_ci NOT NULL COMMENT '主鍵,UUID',
`lrl_service_detail_id` varchar(36) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '服務(wù)詳情編號,關(guān)聯(lián)logging_service_details主鍵',
`lrl_trace_id` varchar(36) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '鏈路ID',
`lrl_parent_span_id` varchar(36) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '上級跨度ID',
`lrl_span_id` varchar(36) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '跨度ID',
`lrl_start_time` mediumtext COLLATE utf8mb4_general_ci COMMENT '請求開(kāi)始時(shí)間',
`lrl_end_time` mediumtext COLLATE utf8mb4_general_ci COMMENT '請求結束時(shí)間',
`lrl_http_status` int(11) DEFAULT NULL COMMENT '請求響應狀態(tài)碼',
`lrl_request_body` longtext COLLATE utf8mb4_general_ci COMMENT '請求主體內容',
`lrl_request_headers` text COLLATE utf8mb4_general_ci COMMENT '請求頭信息',
`lrl_request_ip` varchar(30) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '發(fā)起請求客戶(hù)端的IP地址',
`lrl_request_method` varchar(10) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '請求方式',
`lrl_request_uri` varchar(200) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '請求路徑',
`lrl_response_body` longtext COLLATE utf8mb4_general_ci COMMENT '響應內容',
`lrl_response_headers` text COLLATE utf8mb4_general_ci COMMENT '響應頭信息',
`lrl_time_consuming` int(11) DEFAULT NULL COMMENT '請求耗時(shí)',
`lrl_create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '日志保存時(shí)間',
`lrl_request_params` text COLLATE utf8mb4_general_ci,
`lrl_exception_stack` text COLLATE utf8mb4_general_ci,
PRIMARY KEY (`lrl_id`),
KEY `logging_request_logs_LRL_SERVICE_DETAIL_ID_index` (`lrl_service_detail_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='請求日志信息表';
--
-- Table structure for table `logging_service_details`
--
CREATE TABLE `logging_service_details` (
`lsd_id` varchar(36) COLLATE utf8mb4_general_ci NOT NULL,
`lsd_service_id` varchar(200) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '上報服務(wù)的ID,對應spring.application.name配置值',
`lsd_service_ip` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '上報服務(wù)的IP地址',
`lsd_service_port` int(11) DEFAULT NULL COMMENT '上報服務(wù)的端口號',
`lsd_last_report_time` timestamp NULL DEFAULT NULL COMMENT '最后一次上報時(shí)間,每次上報更新',
`lsd_create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '首次上報時(shí)創(chuàng )建時(shí)間',
PRIMARY KEY (`lsd_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='上報日志的客戶(hù)端服務(wù)詳情';
到目前為止,ApiBoot Logging Admin已經(jīng)準備就緒。接下來(lái),我們需要修改業(yè)務(wù)服務(wù),以將請求日志報告給Logging Admin。
將日志報告給指定的日志記錄管理員
我們將修改使用ApiBoot Logging獲取統一管理請求日志文章的源代碼,并將Logging Admin的地址添加到application.yml中,如下所示:
api:
boot:
# ApiBoot Logging 日志組件配置
logging:
# 配置Logging Admin地址
admin:
server-address: 127.0.0.1:8081
api.boot.logging.admin-service-address的配置格式為:Ip:Port,我們只需要修改一個(gè)地方,所有其他任務(wù)都將在內部交付給ApiBoot Logging。
測試
我們以應用程序的形式啟動(dòng)ApiBoot Logging Admin和業(yè)務(wù)服務(wù)。
使用curl訪(fǎng)問(wèn)測試地址,如下所示:
~ curl http://localhost:8080/test\?name\=admin
你好:admin
我們檢查ApiBoot Logging管理控制臺日志,如下所示:
Receiving Service: 【apiboot-unified-manage-request-logs -> 127.0.0.1】, Request Log Report,Logging Content:[
{
"endTime":1571641723779,
"httpStatus":200,
"requestBody":"",
"requestHeaders":{
"server-region":"JiNan",
"host":"localhost:8080",
"user-agent":"curl/7.64.1",
"accept":"*/*"
},
"requestIp":"0:0:0:0:0:0:0:1",
"requestMethod":"GET",
"requestParam":"{\"name\":\"admin\"}",
"requestUri":"/test",
"responseBody":"你好:admin",
"responseHeaders":{},
"serviceId":"apiboot-unified-manage-request-logs",
"serviceIp":"127.0.0.1",
"servicePort":"8080",
"spanId":"95a73ca0-831b-45df-aa43-2b5887e8d98d",
"startTime":1571641723776,
"timeConsuming":3,
"traceId":"25a7de96-b3dd-48e5-9854-1a8069a4a681"
}
]
我們已經(jīng)看到Logging Admin控制臺打印的報告請求日志,并且尚不確定此請求的日志是否已保存到數據庫中。接下來(lái),我將使用命令行查看數據庫的日志信息。
查看logging_service_details表中的數據
mysql> select * from logging_service_details\G;
*************************** 1. row ***************************
lsd_id: b069366a-25dc-41ec-8f09-242d81755cd0
lsd_service_id: apiboot-unified-manage-request-logs
lsd_service_ip: 10.180.98.112
lsd_service_port: 8080
lsd_last_report_time: 2019-10-21 02:14:26
lsd_create_time: 2019-10-21 15:14:26
logging_service_details存儲報告請求日志的每個(gè)業(yè)務(wù)服務(wù)的基本信息。每個(gè)服務(wù)的基本信息將被緩存在Logging Admin內存中,以方便獲取service_id來(lái)存儲日志,并且唯一性是根據ip + port + service_id確定的。相同的服務(wù)僅保存一次。
查看logging_request_logs表中的數據
mysql> select * from logging_request_logs\G;
*************************** 1. row ***************************
lrl_id: c42761f6-b072-4744-8a17-d8e6097b85de
lrl_service_detail_id: b069366a-25dc-41ec-8f09-242d81755cd0
lrl_trace_id: 055329a0-cfc1-4606-baf0-4fb0cc905ba2
lrl_parent_span_id: NULL
lrl_span_id: aab83092-7749-4f88-8cb6-a949cc060197
lrl_start_time: 1571642065262
lrl_end_time: 1571642065286
lrl_http_status: 200
lrl_request_body:
lrl_request_headers: {"server-region":"JiNan","host":"localhost:8080","user-agent":"curl/7.64.1","accept":"*/*"}
lrl_request_ip: 0:0:0:0:0:0:0:1
lrl_request_method: GET
lrl_request_uri: /test
lrl_response_body: 你好:admin
lrl_response_headers: {}
lrl_time_consuming: 24
lrl_create_time: 2019-10-21 15:14:26
lrl_request_params: {"name":"admin"}
lrl_exception_stack: NULL
敲黑板畫(huà)關(guān)鍵點(diǎn)
在本章中,我們集成了ApiBoot Logging Admin,將業(yè)務(wù)服務(wù)的每個(gè)請求日志報告給Logging Admin,先通過(guò)數據庫保存請求日志,然后再通過(guò)其他方法,并通過(guò)spanId和traceId查看日志下屬每個(gè)請求鏈接與消耗每個(gè)請求中時(shí)間最多的跨度的關(guān)系,以準確地優(yōu)化服務(wù)性能。
作者的個(gè)人博客
使用開(kāi)源框架ApiBoot幫助您成為Api接口服務(wù)架構師
解決方案:接入5118智能原創(chuàng )API教程
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 631 次瀏覽 ? 2020-09-07 05:42
訪(fǎng)問(wèn)5118智能原創(chuàng ) API教程
優(yōu)采云 采集支持調用5118一鍵式智能原創(chuàng ) API接口,處理采集數據標題和內容等;
提醒:第三方API訪(fǎng)問(wèn)功能需要優(yōu)采云旗艦軟件包支持使用,并且用戶(hù)需要提供第三方接口帳戶(hù)信息(即,用戶(hù)需要注冊第三方)界面,以及由第三方界面產(chǎn)生的所有費用,用戶(hù)應承擔);
詳細使用步驟1. 5118智能原創(chuàng ) API接口配置I,API配置入口:
在控制臺左側的列表中單擊[第三方服務(wù)配置] ==“單擊[第三方內容API訪(fǎng)問(wèn)權限] ==”單擊[第三方API配置管理] ==“最后單擊[+5118一鍵式智能原創(chuàng ) API]創(chuàng )建接口配置;
II。配置API接口信息:
[API-Key value]是要從5118背景中獲取相應的Key值,請記住在填寫(xiě)后將其保存;
注意:5118將每次調用的最大長(cháng)度限制為5000個(gè)字符(包括html代碼),因此,當內容長(cháng)度超過(guò)時(shí),優(yōu)采云將被分割并多次調用。此操作將增加api調用的次數,費用也會(huì )相應增加,這是用戶(hù)需要承擔的費用,使用前請務(wù)必注意! ! !
2.創(chuàng )建API處理規則
API處理規則,可以將其設置為調用API接口以處理哪些字段的內容;
I。 API處理規則條目:
在控制臺左側的列表中單擊[第三方服務(wù)配置] ==“單擊[第三方內容API訪(fǎng)問(wèn)] ==”,進(jìn)入[API處理規則管理]頁(yè)面,最后單擊[+添加API處理規則]以創(chuàng )建API處理規則;
II,API處理規則配置:
注意:當API處理1個(gè)字段時(shí),API接口將被調用一次,因此建議不要添加不需要的字段!
3. API處理規則的用法
使用API??處理規則的方式有兩種:手動(dòng)執行和自動(dòng)執行:
I。手動(dòng)執行API處理規則:
單擊采集任務(wù)的[結果數據和發(fā)布]選項卡中的[SEO&API&翻譯和其他工具]按鈕==“選擇[第三方API執行]列==”選擇相應的API處理規則==“執行(數據范圍有兩種執行方法,根據發(fā)布狀態(tài)批量執行和根據列表中選擇的數據執行);
II。自動(dòng)執行API處理規則:
啟用API處理的自動(dòng)執行。任務(wù)完成采集后,API處理將自動(dòng)執行。通常,使用定時(shí)采集和自動(dòng)發(fā)布功能很方便;
在任務(wù)的[自動(dòng)化:發(fā)布和SEO和翻譯]選項卡中,[自動(dòng)執行第三方API配置] ==“選中[采集,自動(dòng)執行API]選項==”選擇要執行的API處理規則==“選擇由API接口處理的數據范圍(通常選擇”要發(fā)布“,所有將導致所有數據被執行多次),最后單擊保存;
4. API處理結果和發(fā)布,查看API接口處理結果:
API接口處理的內容將另存為新字段,例如:標題處理后的新字段:title_5118,以及內容處理后的新字段:content_5118,可以在[結果數據和發(fā)布]和數據預覽界面。
溫馨提示:API處理規則需要一段時(shí)間才能執行,執行后頁(yè)面會(huì )自動(dòng)刷新,并出現API接口處理后的新字段;
II。發(fā)布API接口的處理后內容:
發(fā)布文章之前,請在發(fā)布目標的第二步中修改映射字段,并在A(yíng)PI接口處理之后將標題和內容更改為新的對應字段title_5118和content_5118;
提醒:如果無(wú)法在發(fā)布目標中選擇新字段,請在此任務(wù)下復制或創(chuàng )建新的發(fā)布目標,然后可以在新發(fā)布目標中選擇新字段??梢圆榭丛敿毜慕坛?;
5. 5118-API接口常見(jiàn)問(wèn)題和解決方法I,如何將API處理規則和SEO規則一起使用?
系統默認對標題和內容字段執行SEO功能,需要將其修改為SEO規則中的title_5118和content_5118字段;
優(yōu)采云導航:優(yōu)采云 采集 優(yōu)采云控制臺如何使用優(yōu)采云 SEO工具微信公眾號文章 采集今天的標題采集 查看全部
訪(fǎng)問(wèn)5118智能原創(chuàng ) API教程
訪(fǎng)問(wèn)5118智能原創(chuàng ) API教程
優(yōu)采云 采集支持調用5118一鍵式智能原創(chuàng ) API接口,處理采集數據標題和內容等;
提醒:第三方API訪(fǎng)問(wèn)功能需要優(yōu)采云旗艦軟件包支持使用,并且用戶(hù)需要提供第三方接口帳戶(hù)信息(即,用戶(hù)需要注冊第三方)界面,以及由第三方界面產(chǎn)生的所有費用,用戶(hù)應承擔);
詳細使用步驟1. 5118智能原創(chuàng ) API接口配置I,API配置入口:
在控制臺左側的列表中單擊[第三方服務(wù)配置] ==“單擊[第三方內容API訪(fǎng)問(wèn)權限] ==”單擊[第三方API配置管理] ==“最后單擊[+5118一鍵式智能原創(chuàng ) API]創(chuàng )建接口配置;

II。配置API接口信息:
[API-Key value]是要從5118背景中獲取相應的Key值,請記住在填寫(xiě)后將其保存;
注意:5118將每次調用的最大長(cháng)度限制為5000個(gè)字符(包括html代碼),因此,當內容長(cháng)度超過(guò)時(shí),優(yōu)采云將被分割并多次調用。此操作將增加api調用的次數,費用也會(huì )相應增加,這是用戶(hù)需要承擔的費用,使用前請務(wù)必注意! ! !


2.創(chuàng )建API處理規則
API處理規則,可以將其設置為調用API接口以處理哪些字段的內容;
I。 API處理規則條目:
在控制臺左側的列表中單擊[第三方服務(wù)配置] ==“單擊[第三方內容API訪(fǎng)問(wèn)] ==”,進(jìn)入[API處理規則管理]頁(yè)面,最后單擊[+添加API處理規則]以創(chuàng )建API處理規則;

II,API處理規則配置:

注意:當API處理1個(gè)字段時(shí),API接口將被調用一次,因此建議不要添加不需要的字段!
3. API處理規則的用法
使用API??處理規則的方式有兩種:手動(dòng)執行和自動(dòng)執行:
I。手動(dòng)執行API處理規則:
單擊采集任務(wù)的[結果數據和發(fā)布]選項卡中的[SEO&API&翻譯和其他工具]按鈕==“選擇[第三方API執行]列==”選擇相應的API處理規則==“執行(數據范圍有兩種執行方法,根據發(fā)布狀態(tài)批量執行和根據列表中選擇的數據執行);

II。自動(dòng)執行API處理規則:
啟用API處理的自動(dòng)執行。任務(wù)完成采集后,API處理將自動(dòng)執行。通常,使用定時(shí)采集和自動(dòng)發(fā)布功能很方便;
在任務(wù)的[自動(dòng)化:發(fā)布和SEO和翻譯]選項卡中,[自動(dòng)執行第三方API配置] ==“選中[采集,自動(dòng)執行API]選項==”選擇要執行的API處理規則==“選擇由API接口處理的數據范圍(通常選擇”要發(fā)布“,所有將導致所有數據被執行多次),最后單擊保存;

4. API處理結果和發(fā)布,查看API接口處理結果:
API接口處理的內容將另存為新字段,例如:標題處理后的新字段:title_5118,以及內容處理后的新字段:content_5118,可以在[結果數據和發(fā)布]和數據預覽界面。
溫馨提示:API處理規則需要一段時(shí)間才能執行,執行后頁(yè)面會(huì )自動(dòng)刷新,并出現API接口處理后的新字段;


II。發(fā)布API接口的處理后內容:
發(fā)布文章之前,請在發(fā)布目標的第二步中修改映射字段,并在A(yíng)PI接口處理之后將標題和內容更改為新的對應字段title_5118和content_5118;
提醒:如果無(wú)法在發(fā)布目標中選擇新字段,請在此任務(wù)下復制或創(chuàng )建新的發(fā)布目標,然后可以在新發(fā)布目標中選擇新字段??梢圆榭丛敿毜慕坛?;

5. 5118-API接口常見(jiàn)問(wèn)題和解決方法I,如何將API處理規則和SEO規則一起使用?
系統默認對標題和內容字段執行SEO功能,需要將其修改為SEO規則中的title_5118和content_5118字段;

優(yōu)采云導航:優(yōu)采云 采集 優(yōu)采云控制臺如何使用優(yōu)采云 SEO工具微信公眾號文章 采集今天的標題采集
解決方案:優(yōu)采云采集器采集原理、流程介紹
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 318 次瀏覽 ? 2020-09-04 13:32
寫(xiě)作文章很無(wú)聊,但百度優(yōu)化排名仍然與文章的積累密不可分,因此各種文章 采集器都占據了市場(chǎng),今天SEO教程自學(xué)網(wǎng)站將向您優(yōu)采云 采集器 采集的原理和過(guò)程。
什么是數據采集?我們可以理解,我們打開(kāi)了網(wǎng)站并看到了一篇很好的文章文章,因此我們復制了文章的標題和內容,并將該文章文章轉移到了我們的網(wǎng)站。我們的過(guò)程可以稱(chēng)為采集,它將對您網(wǎng)站上的其他人有用的信息轉移到您自己的網(wǎng)站。
采集器正在執行此操作,但是整個(gè)過(guò)程由軟件完成。我們可以理解,我們復制了文章的標題和內容。我們可以知道內容是什么,標題是什么,但是軟件不知道,所以我們必須告訴軟件如何選擇它。這是編寫(xiě)規則的過(guò)程。復制之后,我們打開(kāi)網(wǎng)站(例如發(fā)布論壇的地方),然后將其發(fā)布。對于軟件,它是模仿我們的帖子,發(fā)布文章,如何發(fā)布,這就是數據發(fā)布的過(guò)程。
優(yōu)采云 采集器是用于采集數據的軟件。它是網(wǎng)絡(luò )上功能最強大的采集器。它可以捕獲您看到的幾乎所有Web內容。
一、 優(yōu)采云 采集器數據捕獲原理:
優(yōu)采云采集器如何抓取數據取決于您的規則。要獲取網(wǎng)頁(yè)的所有內容,您需要首先獲取該網(wǎng)頁(yè)的URL。這是URL。該程序根據規則獲取列表頁(yè)面,分析其中的URL,然后獲取URL的Web內容。根據采集規則,分析下載的網(wǎng)頁(yè),分離標題內容和其他信息,然后保存。如果選擇下載圖像等網(wǎng)絡(luò )資源,則程序將分析采集的數據,找到圖像的下載地址,資源等,然后在本地下載。
二、 優(yōu)采云 采集器數據發(fā)布原則:
采集數據后,默認情況下將其保存在本地。我們可以使用以下方法來(lái)處理數據。
1.什么也不要做。由于數據本身存儲在數據庫中(訪(fǎng)問(wèn),db3,mysql,sqlserver),因此,如果僅查看數據,則可以使用相關(guān)軟件將其打開(kāi)。
2. 網(wǎng)站已發(fā)布到網(wǎng)站。該程序將模仿瀏覽器向您的網(wǎng)站發(fā)送數據,可以達到手動(dòng)發(fā)布的效果。
3.直接轉到數據庫。您只需要編寫(xiě)一些SQL語(yǔ)句,程序就會(huì )根據您的SQL語(yǔ)句將數據導入數據庫。
4.另存為本地文件。該程序將讀取數據庫中的數據,并以某種格式將其另存為本地sql或文本文件。
三、 優(yōu)采云 采集器工作流程:
優(yōu)采云 采集器分兩步采集數據,一個(gè)是采集數據,另一個(gè)是發(fā)布數據。這兩個(gè)過(guò)程可以分開(kāi)。
1.采集數據,包括采集URL和采集內容。此過(guò)程是獲取數據的過(guò)程。我們制定規則并處理采礦過(guò)程的內容。
2,發(fā)布內容是將數據發(fā)布到自己的論壇,cms的過(guò)程也是將數據作為現有過(guò)程執行。您可以使用WEB,數據庫存儲進(jìn)行在線(xiàn)發(fā)布或另存為本地文件。
但我必須在此提醒大多數網(wǎng)站管理員,百度颶風(fēng)算法2. 0的引入進(jìn)一步提高了百度對采集這種現象的懲罰程度和懲罰范圍。在經(jīng)驗豐富的時(shí)代,是否使用文章 采集器取決于您的想法! 查看全部
優(yōu)采云 采集器 采集原理和過(guò)程介紹
寫(xiě)作文章很無(wú)聊,但百度優(yōu)化排名仍然與文章的積累密不可分,因此各種文章 采集器都占據了市場(chǎng),今天SEO教程自學(xué)網(wǎng)站將向您優(yōu)采云 采集器 采集的原理和過(guò)程。
什么是數據采集?我們可以理解,我們打開(kāi)了網(wǎng)站并看到了一篇很好的文章文章,因此我們復制了文章的標題和內容,并將該文章文章轉移到了我們的網(wǎng)站。我們的過(guò)程可以稱(chēng)為采集,它將對您網(wǎng)站上的其他人有用的信息轉移到您自己的網(wǎng)站。
采集器正在執行此操作,但是整個(gè)過(guò)程由軟件完成。我們可以理解,我們復制了文章的標題和內容。我們可以知道內容是什么,標題是什么,但是軟件不知道,所以我們必須告訴軟件如何選擇它。這是編寫(xiě)規則的過(guò)程。復制之后,我們打開(kāi)網(wǎng)站(例如發(fā)布論壇的地方),然后將其發(fā)布。對于軟件,它是模仿我們的帖子,發(fā)布文章,如何發(fā)布,這就是數據發(fā)布的過(guò)程。
優(yōu)采云 采集器是用于采集數據的軟件。它是網(wǎng)絡(luò )上功能最強大的采集器。它可以捕獲您看到的幾乎所有Web內容。
一、 優(yōu)采云 采集器數據捕獲原理:
優(yōu)采云采集器如何抓取數據取決于您的規則。要獲取網(wǎng)頁(yè)的所有內容,您需要首先獲取該網(wǎng)頁(yè)的URL。這是URL。該程序根據規則獲取列表頁(yè)面,分析其中的URL,然后獲取URL的Web內容。根據采集規則,分析下載的網(wǎng)頁(yè),分離標題內容和其他信息,然后保存。如果選擇下載圖像等網(wǎng)絡(luò )資源,則程序將分析采集的數據,找到圖像的下載地址,資源等,然后在本地下載。
二、 優(yōu)采云 采集器數據發(fā)布原則:
采集數據后,默認情況下將其保存在本地。我們可以使用以下方法來(lái)處理數據。
1.什么也不要做。由于數據本身存儲在數據庫中(訪(fǎng)問(wèn),db3,mysql,sqlserver),因此,如果僅查看數據,則可以使用相關(guān)軟件將其打開(kāi)。
2. 網(wǎng)站已發(fā)布到網(wǎng)站。該程序將模仿瀏覽器向您的網(wǎng)站發(fā)送數據,可以達到手動(dòng)發(fā)布的效果。
3.直接轉到數據庫。您只需要編寫(xiě)一些SQL語(yǔ)句,程序就會(huì )根據您的SQL語(yǔ)句將數據導入數據庫。
4.另存為本地文件。該程序將讀取數據庫中的數據,并以某種格式將其另存為本地sql或文本文件。
三、 優(yōu)采云 采集器工作流程:
優(yōu)采云 采集器分兩步采集數據,一個(gè)是采集數據,另一個(gè)是發(fā)布數據。這兩個(gè)過(guò)程可以分開(kāi)。
1.采集數據,包括采集URL和采集內容。此過(guò)程是獲取數據的過(guò)程。我們制定規則并處理采礦過(guò)程的內容。
2,發(fā)布內容是將數據發(fā)布到自己的論壇,cms的過(guò)程也是將數據作為現有過(guò)程執行。您可以使用WEB,數據庫存儲進(jìn)行在線(xiàn)發(fā)布或另存為本地文件。
但我必須在此提醒大多數網(wǎng)站管理員,百度颶風(fēng)算法2. 0的引入進(jìn)一步提高了百度對采集這種現象的懲罰程度和懲罰范圍。在經(jīng)驗豐富的時(shí)代,是否使用文章 采集器取決于您的想法!
最佳實(shí)踐:Python網(wǎng)絡(luò )數據采集4:使用API
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 409 次瀏覽 ? 2020-09-01 06:09
通常情況下,程序員可以使用HTPP協(xié)議向API發(fā)起請求以獲取某些信息,并且API將以XML或JSON格式返回服務(wù)器的響應信息.
通常,您不會(huì )考慮將API用作網(wǎng)絡(luò )數據采集,但實(shí)際上,兩者(都發(fā)送HTTP請求)和結果(都獲取信息)所使用的許多技術(shù)都是相似的;兩者通常是同一個(gè)關(guān)系.
例如,將Wikipedia編輯歷史記錄(與編輯者的IP地址)和IP地址解析API結合起來(lái),以獲取Wikipedia條目的編輯者的地理位置.
4.1 API概述
Google API
4.2 API通用規則
API使用非常標準的規則集來(lái)生成數據,并且所生成的數據以非常標準的方式進(jìn)行組織.
四種方法: GET,POST,PUT,DELETE
驗證: 需要客戶(hù)驗證
4.3服務(wù)器響應
大多數反饋數據格式是XML和JSON
過(guò)去,服務(wù)器使用PHP和.NET等程序作為API的接收器. 現在,服務(wù)器端還使用了一些JavaScript框架作為API的發(fā)送和接收端,例如Angular或Backbone.
API調用:
4.4回聲巢
Echo Nest音樂(lè )數據網(wǎng)站
4.5 Twitter API
pip安裝推特
from twitter import Twitter
t = Twitter(auth=OAuth(,,,))
pythonTweets = t.search.tweets(q = "#python")
print(pythonTweets)
發(fā)布推文4.6 Google API
無(wú)論您要處理哪種信息,包括語(yǔ)言翻譯,地理位置,日歷,甚至是遺傳數據,Google都會(huì )提供API. Google還為其一些著(zhù)名的應用程序提供API,例如Gmail,YouTube和Blogger.
4.7解析JSON數據
import json
from urllib.request import urlopen
def getCountry(ipAddress):
response = urlopen("http://freegeoip.net/json/"+ipAddress).read().decode('utf-8')
responseJson = json.loads(response)
return responseJson.get("country_code")
print(getCountry("50.78.253.58"))
4.8返回主題
將多個(gè)數據源組合為新形式,或使用API??作為工具從新的角度解釋采集中的數據.
首先做一個(gè)采集 Wikipedia的基本程序,找到編輯歷史記錄頁(yè)面,然后在編輯歷史記錄中找出IP地址
# -*- coding: utf-8 -*-
from urllib.request import urlopen
from bs4 import BeautifulSoup
import datetime
import random
import re
import json
random.seed(datetime.datetime.now())
# https://en.wikipedia.org/wiki/Python_(programming_language)
def getLinks(articleUrl):
html = urlopen("http://en.wikipedia.org"+articleUrl)
bsObj = BeautifulSoup(html)
return bsObj.find("div",{"id":"bodyContent"}).findAll("a", href=re.compile("^(/wiki/)((?!:).)*$"))
def getHistoryIPs(pageUrl):
# 編輯歷史頁(yè)面URL鏈接格式是:
# https://en.wikipedia.org/w/index.php?title=Python_(programming_language)&action=history
pageUrl = pageUrl.replace("/wiki/", "")
historyUrl = "https://en.wikipedia.org/w/ind ... ot%3B
print("history url is: "+historyUrl)
html = urlopen(historyUrl)
bsObj = BeautifulSoup(html)
# 找出class屬性是"mw-anonuserlink"的鏈接
# 它們用IP地址代替用戶(hù)名
ipAddresses = bsObj.findAll("a", {"class":"mw-anonuserlink"})
addressList = set()
for ipAddress in ipAddresses:
addressList.add(ipAddress.get_text())
return addressList
links = getLinks("/wiki/Python_(programming_language)")
def getCountry(ipAddress):
try:
response = urlopen("http://freegeoip.net/json/"+ipAddress).read().decode('utf-8')
except HTTPError:
return None
responseJson = json.loads(response)
return responseJson.get("country_code")
while (len(links) > 0):
for link in links:
print("-------------------")
historyIPs = getHistoryIPs(link.attrs["href"])
for historyIP in historyIPs:
#print(historyIP)
country = getCountry(historyIP)
if country is not None:
print(historyIP+" is from "+country)
newLink = links[random.randint(0, len(links)-1)].attrs["href"]
links = getLinks(newLink)
4.9關(guān)于A(yíng)PI的更多信息
Leonard Richardson,Mike Amundsen和Sam Ruby的RESTful Web API()為使用Web API提供了非常全面的理論和實(shí)踐指導. 此外,Mike Amundsen的精彩視頻教學(xué)課程“為Web()設計API”還可以教您創(chuàng )建自己的API. 如果您想方便地共享采集數據,那么他的視頻非常有用 查看全部
Python網(wǎng)絡(luò )數據采集 4: 使用API??
通常情況下,程序員可以使用HTPP協(xié)議向API發(fā)起請求以獲取某些信息,并且API將以XML或JSON格式返回服務(wù)器的響應信息.
通常,您不會(huì )考慮將API用作網(wǎng)絡(luò )數據采集,但實(shí)際上,兩者(都發(fā)送HTTP請求)和結果(都獲取信息)所使用的許多技術(shù)都是相似的;兩者通常是同一個(gè)關(guān)系.
例如,將Wikipedia編輯歷史記錄(與編輯者的IP地址)和IP地址解析API結合起來(lái),以獲取Wikipedia條目的編輯者的地理位置.
4.1 API概述
Google API
4.2 API通用規則
API使用非常標準的規則集來(lái)生成數據,并且所生成的數據以非常標準的方式進(jìn)行組織.
四種方法: GET,POST,PUT,DELETE
驗證: 需要客戶(hù)驗證
4.3服務(wù)器響應
大多數反饋數據格式是XML和JSON
過(guò)去,服務(wù)器使用PHP和.NET等程序作為API的接收器. 現在,服務(wù)器端還使用了一些JavaScript框架作為API的發(fā)送和接收端,例如Angular或Backbone.
API調用:
4.4回聲巢
Echo Nest音樂(lè )數據網(wǎng)站
4.5 Twitter API
pip安裝推特
from twitter import Twitter
t = Twitter(auth=OAuth(,,,))
pythonTweets = t.search.tweets(q = "#python")
print(pythonTweets)
發(fā)布推文4.6 Google API
無(wú)論您要處理哪種信息,包括語(yǔ)言翻譯,地理位置,日歷,甚至是遺傳數據,Google都會(huì )提供API. Google還為其一些著(zhù)名的應用程序提供API,例如Gmail,YouTube和Blogger.
4.7解析JSON數據
import json
from urllib.request import urlopen
def getCountry(ipAddress):
response = urlopen("http://freegeoip.net/json/"+ipAddress).read().decode('utf-8')
responseJson = json.loads(response)
return responseJson.get("country_code")
print(getCountry("50.78.253.58"))
4.8返回主題
將多個(gè)數據源組合為新形式,或使用API??作為工具從新的角度解釋采集中的數據.
首先做一個(gè)采集 Wikipedia的基本程序,找到編輯歷史記錄頁(yè)面,然后在編輯歷史記錄中找出IP地址
# -*- coding: utf-8 -*-
from urllib.request import urlopen
from bs4 import BeautifulSoup
import datetime
import random
import re
import json
random.seed(datetime.datetime.now())
# https://en.wikipedia.org/wiki/Python_(programming_language)
def getLinks(articleUrl):
html = urlopen("http://en.wikipedia.org"+articleUrl)
bsObj = BeautifulSoup(html)
return bsObj.find("div",{"id":"bodyContent"}).findAll("a", href=re.compile("^(/wiki/)((?!:).)*$"))
def getHistoryIPs(pageUrl):
# 編輯歷史頁(yè)面URL鏈接格式是:
# https://en.wikipedia.org/w/index.php?title=Python_(programming_language)&action=history
pageUrl = pageUrl.replace("/wiki/", "")
historyUrl = "https://en.wikipedia.org/w/ind ... ot%3B
print("history url is: "+historyUrl)
html = urlopen(historyUrl)
bsObj = BeautifulSoup(html)
# 找出class屬性是"mw-anonuserlink"的鏈接
# 它們用IP地址代替用戶(hù)名
ipAddresses = bsObj.findAll("a", {"class":"mw-anonuserlink"})
addressList = set()
for ipAddress in ipAddresses:
addressList.add(ipAddress.get_text())
return addressList
links = getLinks("/wiki/Python_(programming_language)")
def getCountry(ipAddress):
try:
response = urlopen("http://freegeoip.net/json/"+ipAddress).read().decode('utf-8')
except HTTPError:
return None
responseJson = json.loads(response)
return responseJson.get("country_code")
while (len(links) > 0):
for link in links:
print("-------------------")
historyIPs = getHistoryIPs(link.attrs["href"])
for historyIP in historyIPs:
#print(historyIP)
country = getCountry(historyIP)
if country is not None:
print(historyIP+" is from "+country)
newLink = links[random.randint(0, len(links)-1)].attrs["href"]
links = getLinks(newLink)
4.9關(guān)于A(yíng)PI的更多信息
Leonard Richardson,Mike Amundsen和Sam Ruby的RESTful Web API()為使用Web API提供了非常全面的理論和實(shí)踐指導. 此外,Mike Amundsen的精彩視頻教學(xué)課程“為Web()設計API”還可以教您創(chuàng )建自己的API. 如果您想方便地共享采集數據,那么他的視頻非常有用
正式推出:QuicklibTrade A股行情采集API方案2.6正式發(fā)布
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 622 次瀏覽 ? 2020-08-31 01:19
/
/x/page/b0822umt6kk.html?pcsharecode=JjoaXqFW&sf=uri
版本升級說(shuō)明
2.6版將采集數據字段從15增加到20
版本2.5進(jìn)行了改進(jìn)和發(fā)布
2.4版是大量個(gè)人使用的初始版本.
QuicklibTrade簡(jiǎn)介
QuicklibTrade是一個(gè)簡(jiǎn)單易用的A股程序交易程序,主要使用采集來(lái)獲取股票軟件客戶(hù)(例如Big Wisdom,Straight Flush,Oriental Fortune,Tongdaxin)的數據,并提供多種接口. 支持直接調用公式編輯器的數據,大大簡(jiǎn)化了策略開(kāi)發(fā). 許多經(jīng)典指標公式都可以直接使用.
關(guān)鍵是免費使用
QuicklibTrade市場(chǎng)數據采集視頻教學(xué)
采集和API調用說(shuō)明
/x/page/y0842b72xbh.html?pcsharecode=Y0h4qOSw&sf=uri
包括使用虛擬機采集市場(chǎng)的說(shuō)明
/x/page/b0822umt6kk.html?pcsharecode=JjoaXqFW&sf=uri
QuicklibTrade免費A股Level2報價(jià)界面
/
注冊
/register.html
下載
/mdapi.asp
其他相關(guān)問(wèn)題,請瀏覽
/ comm / category / 20 /
在第一階段中,僅發(fā)布市場(chǎng)信息采集和接口,而在第二階段中,發(fā)布市場(chǎng)信息的交易接口和LAN網(wǎng)絡(luò )接口
由于每個(gè)主機只能運行1個(gè)DataUpdate.exe,為了使用多個(gè)DataUpdate.exe通過(guò)LAN網(wǎng)絡(luò )接口采集共享數據以加快更新速度,因此采用了虛擬機方法.
已提供虛擬機鏡像網(wǎng)絡(luò )磁盤(pán)下載,主要用于市場(chǎng)的LAN網(wǎng)絡(luò )接口. 每個(gè)虛擬機可以打開(kāi)1個(gè)Big Wisdom和DataUpdate.exe副本以加快數據更新
QuicklibTrade體系結構如下圖所示:
它分為市場(chǎng)界面和交易界面. 本文僅說(shuō)明市場(chǎng)界面. 交易界面計劃于2019年初發(fā)布.
市場(chǎng)報價(jià)接口版本2.1的第一階段支持明智的分界線(xiàn)模式,并且字體選擇經(jīng)典字體. 開(kāi)始菜單保留沖洗,東方財富和通達信的數據采集方案菜單.
1)支持市場(chǎng)數據采集
2)支持指標數據采集
3)支持交易信號,可以使用Great Wisdom公式編輯器制定交易策略,使用特定的熟悉度來(lái)指示購買(mǎi)和出售,將指標加載到Great Wisdom列中,該界面可識別數據的價(jià)值,并直接判斷通過(guò)界面確定交易的熟悉程度.
每次采集同時(shí)支持12個(gè)字段,這12個(gè)字段可以是報價(jià),指標或交易信號.
**運行平臺: ** Windows7,Windows78,Windows10,WindowsServer2008,WindowsServer2012,WindowsServer2016和其他版本
運行虛擬機的網(wǎng)絡(luò )接口必須是64位操作系統
其他接口可用于32位和64位Windows操作系統.
**硬件配置: **請使用單屏顯示,使用2個(gè)或更多屏幕會(huì )導致數據混亂
受支持的接口包括Python接口和C ++接口.
** Python接口: **可以由Python直接調用
從/mdapi.asp(即.py文件)下載的示例是Python2.7的示例,并且理論上支持Python3.x.
Python界面中.dll文件的理論適用于任何Python版本
** C ++接口: **支持所有支持調用DLL的語(yǔ)言,包括C ++,Java,C#,VB.NET,易用語(yǔ)言等.
第一期發(fā)行
?。?)數據更新主程序
?。?)A股CTP接口C ++接口(適用于運行DataUpdate的同一臺計算機)
?。?)A股CTP接口C ++接口演示期貨CTP接口演示
?。?)Dataupdate分布式程序等待發(fā)布,市場(chǎng)數據更新分布式程序
?。?)適用于LAN的Python MSSQL接口,由多個(gè)DataUpdate采集共享
?。?)Python Access接口適用于運行DataUpdate的同一臺計算機
Python ShareMemory接口Python共享內存數據接口,適用于運行DataUpdate的同一臺計算機
還提供了一個(gè)虛擬機環(huán)境,主要用于MSSQL數據庫接口和將來(lái)的LocalNetwork接口(LAN網(wǎng)絡(luò )數據接口)
第二期內容,新界面,版本2.2
?。?)等待發(fā)布的Python LocalNetwork接口Python LAN共享數據接口(適用于LAN,同時(shí)采集多個(gè)DataUpdates)
?。?)等待釋放的C ++ LocalNetwork接口. Python LAN共享數據接口(適用于LAN,同時(shí)共享多個(gè)DataUpdate采集)
使用步驟(以大智慧為例):
1)下載Great Wisdom并安裝Great Wisdom程序
付費版本有Level2版本和免費版本.
Great Wisdom的官方下載:
/detail/function_365.jsp?product=116
2)安裝大智慧
安裝Great Wisdom,安裝完成,Great Wisdom在桌面上.
如果在虛擬機上運行,??則由于路徑較長(cháng),虛擬機可能無(wú)法直接安裝. 安裝物理機后,可以將C盤(pán)下的“ dzh365”目錄復制.
將目錄安裝到虛擬機上以運行大智慧程序
3)注冊并登錄到大智慧
您也可以使用QQ和微信登錄
4)進(jìn)入大智慧股票排序模式
在上圖中的Big Wisdom界面上單擊紅色按鈕以輸入“報價(jià)列表”
5)在標題欄中調出行和列分隔符
在大智慧中,我們使用分頻器模式采集數據,因此我們需要調用分頻器
右鍵單擊并從列菜單中選擇“列分隔符”和“行分隔符”
按從左到右的順序操作標識的列,版本2.1為12列
您還可以為所有列和行設置分隔線(xiàn).
設置完成后,如下圖所示
6)在“大智慧”菜單中設置經(jīng)典字體,不要更改字體大小和樣式顏色
7)啟動(dòng)采集程序,采集程序將自動(dòng)激活打開(kāi)的Big Wisdom程序,并在第一行中標識數據,您可以手動(dòng)檢查標識的數據是否正確.
?。ㄈ绻R別錯誤,通常是由于未將字體設置為經(jīng)典字體引起的,請確保使用經(jīng)典字體再試一次)
從以下URL下載
解壓縮后,運行DataUpdate.exe
8)如果通過(guò)手動(dòng)觀(guān)察識別的第一行中的數字是正確的,請按DdtaUpdate.exe程序的按鈕以打開(kāi)識別,然后Big Wisdom將自動(dòng)在窗口的前面滾動(dòng)并識別它.
可以通過(guò)API獲取報價(jià)的股票代碼的12個(gè)數據字段.
當前,只能識別數字,但是不能識別中文. 因此,無(wú)法識別“大智慧”中的“十億”之類(lèi)的漢字. 請不要識別不是純數字的指標.
仔細檢查黃色框中的數字是否正確識別. 如果它們是錯誤的,則可能是由于字體設置錯誤所致. 請重置字體,然后重試
如果正確,請激活DataUpdate.exe程序,然后單擊按鈕
DataUpdate.exe將自動(dòng)最小化,并開(kāi)始滾動(dòng)窗口以進(jìn)行識別
如果單擊任務(wù)欄圖標,則可以最大化DataUpdate.exe,并且識別將自動(dòng)停止,或單擊按鈕停止.
打開(kāi)C ++和Python API,您可以獲得市場(chǎng)報價(jià)
C ++接口提供與期貨CTP接口相同的方法,熟悉C ++和CTP的朋友可以更快地開(kāi)始使用
1)共享內存接口和Access接口只能在運行DataUpdate.exe的計算機上運行
2)可以將MSSQL接口寫(xiě)入MSSQL數據庫,其他PC主機調用MSSQL數據庫以獲取數據.
3)局域網(wǎng)數據接口(在2.2版之后發(fā)布)將發(fā)布到整個(gè)局域網(wǎng). 局域網(wǎng)中的所有主機都可以通過(guò)API獲取市場(chǎng)信息. 您還可以在多個(gè)主機上運行DataUpdate.exe
這樣,數據更新速度將提高數倍.
在期貨中開(kāi)設一個(gè)帳戶(hù)并綁定該帳戶(hù)以自動(dòng)激活DataUpdate.exe的功能
免費激活方法
1. 請按照以下步驟打開(kāi)期貨帳戶(hù)并綁定期貨帳戶(hù)以激活
宏遠期貨是一家上市公司,隸屬于深灣宏遠
選擇宏遠期貨進(jìn)行網(wǎng)上開(kāi)戶(hù),選擇重慶銷(xiāo)售部門(mén)作為營(yíng)業(yè)部
推薦人填寫(xiě): 上海良北信息技術(shù)有限公司
開(kāi)設帳戶(hù)的詳細步驟:
2. 點(diǎn)激活
您也可以參考激活方法
用戶(hù)注冊| QuickLibTrade中國網(wǎng)站
“期貨紀錄片軟件視頻教學(xué)四集”
“酷交易者期貨復制軟件”
“以低傭金開(kāi)設中國期貨帳戶(hù)”
“ mdshare財務(wù)數據接口包”
“ Python定量交易框架的性能評估”
python定量交易
“ Quicklib程序化交易框架”
Caffe深度學(xué)習框架
“定量社區”
Python人工智能算法庫
<p>tushare,A股Level2數據,A股報價(jià)界面,A股Level2報價(jià)界面,TuShare,中國金融數據,期貨歷史交易記錄下載,歷史數據網(wǎng)絡(luò )磁盤(pán)下載,A股,期貨歷史數據下載,東方財富選擇,金融數據研究終端,iFinD,Go-Goal數據終端,Skysoft數據,新浪Level2報價(jià),恒生數據,數據庫金融數據(費用)以及深度分析API服務(wù),Wind Wind,Tongdaxin免費數據,免費的歷史數據 查看全部
QuicklibTrade A股市場(chǎng)采集API解決方案2.6正式發(fā)布
/

/x/page/b0822umt6kk.html?pcsharecode=JjoaXqFW&sf=uri



版本升級說(shuō)明
2.6版將采集數據字段從15增加到20
版本2.5進(jìn)行了改進(jìn)和發(fā)布
2.4版是大量個(gè)人使用的初始版本.
QuicklibTrade簡(jiǎn)介
QuicklibTrade是一個(gè)簡(jiǎn)單易用的A股程序交易程序,主要使用采集來(lái)獲取股票軟件客戶(hù)(例如Big Wisdom,Straight Flush,Oriental Fortune,Tongdaxin)的數據,并提供多種接口. 支持直接調用公式編輯器的數據,大大簡(jiǎn)化了策略開(kāi)發(fā). 許多經(jīng)典指標公式都可以直接使用.
關(guān)鍵是免費使用
QuicklibTrade市場(chǎng)數據采集視頻教學(xué)
采集和API調用說(shuō)明
/x/page/y0842b72xbh.html?pcsharecode=Y0h4qOSw&sf=uri
包括使用虛擬機采集市場(chǎng)的說(shuō)明
/x/page/b0822umt6kk.html?pcsharecode=JjoaXqFW&sf=uri
QuicklibTrade免費A股Level2報價(jià)界面
/
注冊
/register.html
下載
/mdapi.asp
其他相關(guān)問(wèn)題,請瀏覽
/ comm / category / 20 /
在第一階段中,僅發(fā)布市場(chǎng)信息采集和接口,而在第二階段中,發(fā)布市場(chǎng)信息的交易接口和LAN網(wǎng)絡(luò )接口
由于每個(gè)主機只能運行1個(gè)DataUpdate.exe,為了使用多個(gè)DataUpdate.exe通過(guò)LAN網(wǎng)絡(luò )接口采集共享數據以加快更新速度,因此采用了虛擬機方法.
已提供虛擬機鏡像網(wǎng)絡(luò )磁盤(pán)下載,主要用于市場(chǎng)的LAN網(wǎng)絡(luò )接口. 每個(gè)虛擬機可以打開(kāi)1個(gè)Big Wisdom和DataUpdate.exe副本以加快數據更新
QuicklibTrade體系結構如下圖所示:
它分為市場(chǎng)界面和交易界面. 本文僅說(shuō)明市場(chǎng)界面. 交易界面計劃于2019年初發(fā)布.
市場(chǎng)報價(jià)接口版本2.1的第一階段支持明智的分界線(xiàn)模式,并且字體選擇經(jīng)典字體. 開(kāi)始菜單保留沖洗,東方財富和通達信的數據采集方案菜單.
1)支持市場(chǎng)數據采集
2)支持指標數據采集
3)支持交易信號,可以使用Great Wisdom公式編輯器制定交易策略,使用特定的熟悉度來(lái)指示購買(mǎi)和出售,將指標加載到Great Wisdom列中,該界面可識別數據的價(jià)值,并直接判斷通過(guò)界面確定交易的熟悉程度.
每次采集同時(shí)支持12個(gè)字段,這12個(gè)字段可以是報價(jià),指標或交易信號.
**運行平臺: ** Windows7,Windows78,Windows10,WindowsServer2008,WindowsServer2012,WindowsServer2016和其他版本
運行虛擬機的網(wǎng)絡(luò )接口必須是64位操作系統
其他接口可用于32位和64位Windows操作系統.
**硬件配置: **請使用單屏顯示,使用2個(gè)或更多屏幕會(huì )導致數據混亂
受支持的接口包括Python接口和C ++接口.
** Python接口: **可以由Python直接調用
從/mdapi.asp(即.py文件)下載的示例是Python2.7的示例,并且理論上支持Python3.x.
Python界面中.dll文件的理論適用于任何Python版本
** C ++接口: **支持所有支持調用DLL的語(yǔ)言,包括C ++,Java,C#,VB.NET,易用語(yǔ)言等.
第一期發(fā)行
?。?)數據更新主程序
?。?)A股CTP接口C ++接口(適用于運行DataUpdate的同一臺計算機)
?。?)A股CTP接口C ++接口演示期貨CTP接口演示
?。?)Dataupdate分布式程序等待發(fā)布,市場(chǎng)數據更新分布式程序
?。?)適用于LAN的Python MSSQL接口,由多個(gè)DataUpdate采集共享
?。?)Python Access接口適用于運行DataUpdate的同一臺計算機
Python ShareMemory接口Python共享內存數據接口,適用于運行DataUpdate的同一臺計算機
還提供了一個(gè)虛擬機環(huán)境,主要用于MSSQL數據庫接口和將來(lái)的LocalNetwork接口(LAN網(wǎng)絡(luò )數據接口)
第二期內容,新界面,版本2.2
?。?)等待發(fā)布的Python LocalNetwork接口Python LAN共享數據接口(適用于LAN,同時(shí)采集多個(gè)DataUpdates)
?。?)等待釋放的C ++ LocalNetwork接口. Python LAN共享數據接口(適用于LAN,同時(shí)共享多個(gè)DataUpdate采集)
使用步驟(以大智慧為例):
1)下載Great Wisdom并安裝Great Wisdom程序
付費版本有Level2版本和免費版本.
Great Wisdom的官方下載:
/detail/function_365.jsp?product=116
2)安裝大智慧
安裝Great Wisdom,安裝完成,Great Wisdom在桌面上.
如果在虛擬機上運行,??則由于路徑較長(cháng),虛擬機可能無(wú)法直接安裝. 安裝物理機后,可以將C盤(pán)下的“ dzh365”目錄復制.

將目錄安裝到虛擬機上以運行大智慧程序

3)注冊并登錄到大智慧

您也可以使用QQ和微信登錄
4)進(jìn)入大智慧股票排序模式

在上圖中的Big Wisdom界面上單擊紅色按鈕以輸入“報價(jià)列表”

5)在標題欄中調出行和列分隔符
在大智慧中,我們使用分頻器模式采集數據,因此我們需要調用分頻器
右鍵單擊并從列菜單中選擇“列分隔符”和“行分隔符”
按從左到右的順序操作標識的列,版本2.1為12列
您還可以為所有列和行設置分隔線(xiàn).

設置完成后,如下圖所示

6)在“大智慧”菜單中設置經(jīng)典字體,不要更改字體大小和樣式顏色


7)啟動(dòng)采集程序,采集程序將自動(dòng)激活打開(kāi)的Big Wisdom程序,并在第一行中標識數據,您可以手動(dòng)檢查標識的數據是否正確.
?。ㄈ绻R別錯誤,通常是由于未將字體設置為經(jīng)典字體引起的,請確保使用經(jīng)典字體再試一次)
從以下URL下載

解壓縮后,運行DataUpdate.exe

8)如果通過(guò)手動(dòng)觀(guān)察識別的第一行中的數字是正確的,請按DdtaUpdate.exe程序的按鈕以打開(kāi)識別,然后Big Wisdom將自動(dòng)在窗口的前面滾動(dòng)并識別它.
可以通過(guò)API獲取報價(jià)的股票代碼的12個(gè)數據字段.
當前,只能識別數字,但是不能識別中文. 因此,無(wú)法識別“大智慧”中的“十億”之類(lèi)的漢字. 請不要識別不是純數字的指標.

仔細檢查黃色框中的數字是否正確識別. 如果它們是錯誤的,則可能是由于字體設置錯誤所致. 請重置字體,然后重試

如果正確,請激活DataUpdate.exe程序,然后單擊按鈕
DataUpdate.exe將自動(dòng)最小化,并開(kāi)始滾動(dòng)窗口以進(jìn)行識別
如果單擊任務(wù)欄圖標,則可以最大化DataUpdate.exe,并且識別將自動(dòng)停止,或單擊按鈕停止.
打開(kāi)C ++和Python API,您可以獲得市場(chǎng)報價(jià)
C ++接口提供與期貨CTP接口相同的方法,熟悉C ++和CTP的朋友可以更快地開(kāi)始使用
1)共享內存接口和Access接口只能在運行DataUpdate.exe的計算機上運行
2)可以將MSSQL接口寫(xiě)入MSSQL數據庫,其他PC主機調用MSSQL數據庫以獲取數據.
3)局域網(wǎng)數據接口(在2.2版之后發(fā)布)將發(fā)布到整個(gè)局域網(wǎng). 局域網(wǎng)中的所有主機都可以通過(guò)API獲取市場(chǎng)信息. 您還可以在多個(gè)主機上運行DataUpdate.exe
這樣,數據更新速度將提高數倍.
在期貨中開(kāi)設一個(gè)帳戶(hù)并綁定該帳戶(hù)以自動(dòng)激活DataUpdate.exe的功能
免費激活方法
1. 請按照以下步驟打開(kāi)期貨帳戶(hù)并綁定期貨帳戶(hù)以激活
宏遠期貨是一家上市公司,隸屬于深灣宏遠
選擇宏遠期貨進(jìn)行網(wǎng)上開(kāi)戶(hù),選擇重慶銷(xiāo)售部門(mén)作為營(yíng)業(yè)部
推薦人填寫(xiě): 上海良北信息技術(shù)有限公司
開(kāi)設帳戶(hù)的詳細步驟:
2. 點(diǎn)激活
您也可以參考激活方法
用戶(hù)注冊| QuickLibTrade中國網(wǎng)站


“期貨紀錄片軟件視頻教學(xué)四集”
“酷交易者期貨復制軟件”
“以低傭金開(kāi)設中國期貨帳戶(hù)”
“ mdshare財務(wù)數據接口包”
“ Python定量交易框架的性能評估”
python定量交易
“ Quicklib程序化交易框架”
Caffe深度學(xué)習框架
“定量社區”
Python人工智能算法庫
<p>tushare,A股Level2數據,A股報價(jià)界面,A股Level2報價(jià)界面,TuShare,中國金融數據,期貨歷史交易記錄下載,歷史數據網(wǎng)絡(luò )磁盤(pán)下載,A股,期貨歷史數據下載,東方財富選擇,金融數據研究終端,iFinD,Go-Goal數據終端,Skysoft數據,新浪Level2報價(jià),恒生數據,數據庫金融數據(費用)以及深度分析API服務(wù),Wind Wind,Tongdaxin免費數據,免費的歷史數據
一種基于網(wǎng)路爬蟲(chóng)和新浪API相結合的微博數據的采集方法與流程
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 410 次瀏覽 ? 2020-08-27 06:08
本發(fā)明涉及微博數據采集技術(shù)領(lǐng)域,特別是一種基于網(wǎng)路爬蟲(chóng)和新浪API 相結合的微博數據的采集方法。
背景技術(shù):
對于微博中數據采集非常重要,這樣也能為舉辦微博中社會(huì )安全 事件的探測提供重要的數據基礎。目前,微博的數據采集方式主要有 兩種:基于新浪API和針對新浪微博平臺的網(wǎng)路爬蟲(chóng)?;谛吕薃PI 的方案可以獲取格式比較規范的數據,但是其調用次數有一定的限制, 無(wú)法進(jìn)行大規模的數據爬取,并且有些信息難以獲取到;基于網(wǎng)路爬 蟲(chóng)的方式其實(shí)可以獲取大規模的數據,但是其頁(yè)面的剖析處理過(guò)程比 較復雜,并且其爬取的數據格式不規范,噪聲數據比較多。
技術(shù)實(shí)現要素:
本發(fā)明的目的是要解決現有技術(shù)中存在的不足,提供一種基于網(wǎng)路爬蟲(chóng)和 新浪API相結合的微博數據的采集方法。
為達到上述目的,本發(fā)明是根據以下技術(shù)方案施行的:
一種基于網(wǎng)路爬蟲(chóng)和新浪API相結合的微博數據的采集方法,包括以下步 驟:
Step1:基于新浪API從微博名人榜獲取種子用戶(hù)及其對應的粉絲用戶(hù)和關(guān) 注用戶(hù),加入到種子列表;
Step2:將種子列表轉換為種子URL,并判定種子用戶(hù)列表是否為空,若為 空則步入Step4,否則步入Step3;
Step3:遍歷種子列表,采用網(wǎng)路爬蟲(chóng)的方式,爬取種子用戶(hù)的相關(guān)微博信 息、微博評論信息和用戶(hù)個(gè)人信息,并將微博評論用戶(hù)加入到種子列表中;
Step4:結束。
具體地,所述Step3包括:
獲取種子列表中待爬取URL,并進(jìn)行URL解析與信息獲取,具體包括:獲 取用戶(hù)信息URL并步入相應頁(yè)面爬取用戶(hù)粉絲用戶(hù)和關(guān)注用戶(hù)以及爬取用戶(hù)的 其他相關(guān)信息;獲取用戶(hù)微博URL并步入相應頁(yè)面爬取微博轉發(fā)點(diǎn)贊、評論用 戶(hù)、爬取微博評論文本以及爬取微博其他相關(guān)信息;并將爬取的用戶(hù)粉絲用戶(hù) 和關(guān)注用戶(hù)、用戶(hù)的其他相關(guān)信息、微博轉發(fā)點(diǎn)贊、評論用戶(hù)、爬取微博評論 文本以及爬取微博其他相關(guān)建立相應的微博數據資源庫;同時(shí)將爬取的用戶(hù)粉 絲用戶(hù)和關(guān)注用戶(hù)、爬取的微博轉發(fā)點(diǎn)贊、評論用戶(hù)加入種子列表中。
與現有技術(shù)相比,本發(fā)明通過(guò)將新浪API和針對新浪微博平臺的網(wǎng)路爬蟲(chóng) 相結合,既可以獲取格式比較規范的微博數據,又能進(jìn)行大規模的數據爬取, 并且爬取的數據格式愈發(fā)規范,噪聲數據比較少,進(jìn)而才能為舉辦微博中社會(huì ) 安全風(fēng)波的探測提供重要的數據基礎。
附圖說(shuō)明
圖1為本發(fā)明的流程圖。
具體施行方法
下面結合具體施行例對本發(fā)明作進(jìn)一步描述,在此發(fā)明的示意性施行例以 及說(shuō)明拿來(lái)解釋本發(fā)明,但并不作為對本發(fā)明的限定。
如圖1所示,本施行例的一種基于網(wǎng)路爬蟲(chóng)和新浪API相結合的微博數據 的采集方法,包括以下步驟:
Step1:基于新浪API從微博名人榜獲取種子用戶(hù)及其對應的粉絲用戶(hù)和關(guān) 注用戶(hù),加入到種子列表;
Step2:將種子列表轉換為種子URL,并判定種子用戶(hù)列表是否為空,若為 空則步入Step4,否則步入Step3;
Step3:遍歷種子列表,采用網(wǎng)路爬蟲(chóng)的方式,爬取種子用戶(hù)的相關(guān)微博信 息、微博評論信息和用戶(hù)個(gè)人信息,并將微博評論用戶(hù)加入到種子列表中,具 體步驟為:獲取種子列表中待爬取URL,并進(jìn)行URL解析與信息獲取,具體包 括:獲取用戶(hù)信息URL并步入相應頁(yè)面從微博數據資源庫中爬取用戶(hù)粉絲用戶(hù) 和關(guān)注用戶(hù)以及爬取用戶(hù)的其他相關(guān)信息;獲取用戶(hù)微博URL并步入相應頁(yè)面 從微博數據資源庫中爬取微博轉發(fā)點(diǎn)贊、評論用戶(hù)、爬取微博評論文本以及爬 取微博其他相關(guān)信息;同時(shí)將爬取的用戶(hù)粉絲用戶(hù)和關(guān)注用戶(hù)、爬取的微博轉 發(fā)點(diǎn)贊、評論用戶(hù)加入種子列表中。
Step4:結束。
根據本施行例的方式采集完微博數據后,就可以對采集到的微博文本數據 進(jìn)行處理,清除其中的異常數據和噪音數據,實(shí)現數據格式的標準化,并建立 相應的微博資源庫,進(jìn)而才能為舉辦微博中社會(huì )安全風(fēng)波的探測提供重要的數 據基礎。
本發(fā)明的技術(shù)方案不限于上述具體施行例的限制,凡是按照本發(fā)明的技術(shù) 方案作出的技術(shù)變型,均落入本發(fā)明的保護范圍之內。
當前第1頁(yè)1&nbsp2&nbsp3&nbsp 查看全部
一種基于網(wǎng)路爬蟲(chóng)和新浪API相結合的微博數據的采集方法與流程

本發(fā)明涉及微博數據采集技術(shù)領(lǐng)域,特別是一種基于網(wǎng)路爬蟲(chóng)和新浪API 相結合的微博數據的采集方法。
背景技術(shù):
對于微博中數據采集非常重要,這樣也能為舉辦微博中社會(huì )安全 事件的探測提供重要的數據基礎。目前,微博的數據采集方式主要有 兩種:基于新浪API和針對新浪微博平臺的網(wǎng)路爬蟲(chóng)?;谛吕薃PI 的方案可以獲取格式比較規范的數據,但是其調用次數有一定的限制, 無(wú)法進(jìn)行大規模的數據爬取,并且有些信息難以獲取到;基于網(wǎng)路爬 蟲(chóng)的方式其實(shí)可以獲取大規模的數據,但是其頁(yè)面的剖析處理過(guò)程比 較復雜,并且其爬取的數據格式不規范,噪聲數據比較多。
技術(shù)實(shí)現要素:
本發(fā)明的目的是要解決現有技術(shù)中存在的不足,提供一種基于網(wǎng)路爬蟲(chóng)和 新浪API相結合的微博數據的采集方法。
為達到上述目的,本發(fā)明是根據以下技術(shù)方案施行的:
一種基于網(wǎng)路爬蟲(chóng)和新浪API相結合的微博數據的采集方法,包括以下步 驟:
Step1:基于新浪API從微博名人榜獲取種子用戶(hù)及其對應的粉絲用戶(hù)和關(guān) 注用戶(hù),加入到種子列表;
Step2:將種子列表轉換為種子URL,并判定種子用戶(hù)列表是否為空,若為 空則步入Step4,否則步入Step3;
Step3:遍歷種子列表,采用網(wǎng)路爬蟲(chóng)的方式,爬取種子用戶(hù)的相關(guān)微博信 息、微博評論信息和用戶(hù)個(gè)人信息,并將微博評論用戶(hù)加入到種子列表中;
Step4:結束。
具體地,所述Step3包括:
獲取種子列表中待爬取URL,并進(jìn)行URL解析與信息獲取,具體包括:獲 取用戶(hù)信息URL并步入相應頁(yè)面爬取用戶(hù)粉絲用戶(hù)和關(guān)注用戶(hù)以及爬取用戶(hù)的 其他相關(guān)信息;獲取用戶(hù)微博URL并步入相應頁(yè)面爬取微博轉發(fā)點(diǎn)贊、評論用 戶(hù)、爬取微博評論文本以及爬取微博其他相關(guān)信息;并將爬取的用戶(hù)粉絲用戶(hù) 和關(guān)注用戶(hù)、用戶(hù)的其他相關(guān)信息、微博轉發(fā)點(diǎn)贊、評論用戶(hù)、爬取微博評論 文本以及爬取微博其他相關(guān)建立相應的微博數據資源庫;同時(shí)將爬取的用戶(hù)粉 絲用戶(hù)和關(guān)注用戶(hù)、爬取的微博轉發(fā)點(diǎn)贊、評論用戶(hù)加入種子列表中。
與現有技術(shù)相比,本發(fā)明通過(guò)將新浪API和針對新浪微博平臺的網(wǎng)路爬蟲(chóng) 相結合,既可以獲取格式比較規范的微博數據,又能進(jìn)行大規模的數據爬取, 并且爬取的數據格式愈發(fā)規范,噪聲數據比較少,進(jìn)而才能為舉辦微博中社會(huì ) 安全風(fēng)波的探測提供重要的數據基礎。
附圖說(shuō)明
圖1為本發(fā)明的流程圖。
具體施行方法
下面結合具體施行例對本發(fā)明作進(jìn)一步描述,在此發(fā)明的示意性施行例以 及說(shuō)明拿來(lái)解釋本發(fā)明,但并不作為對本發(fā)明的限定。
如圖1所示,本施行例的一種基于網(wǎng)路爬蟲(chóng)和新浪API相結合的微博數據 的采集方法,包括以下步驟:
Step1:基于新浪API從微博名人榜獲取種子用戶(hù)及其對應的粉絲用戶(hù)和關(guān) 注用戶(hù),加入到種子列表;
Step2:將種子列表轉換為種子URL,并判定種子用戶(hù)列表是否為空,若為 空則步入Step4,否則步入Step3;
Step3:遍歷種子列表,采用網(wǎng)路爬蟲(chóng)的方式,爬取種子用戶(hù)的相關(guān)微博信 息、微博評論信息和用戶(hù)個(gè)人信息,并將微博評論用戶(hù)加入到種子列表中,具 體步驟為:獲取種子列表中待爬取URL,并進(jìn)行URL解析與信息獲取,具體包 括:獲取用戶(hù)信息URL并步入相應頁(yè)面從微博數據資源庫中爬取用戶(hù)粉絲用戶(hù) 和關(guān)注用戶(hù)以及爬取用戶(hù)的其他相關(guān)信息;獲取用戶(hù)微博URL并步入相應頁(yè)面 從微博數據資源庫中爬取微博轉發(fā)點(diǎn)贊、評論用戶(hù)、爬取微博評論文本以及爬 取微博其他相關(guān)信息;同時(shí)將爬取的用戶(hù)粉絲用戶(hù)和關(guān)注用戶(hù)、爬取的微博轉 發(fā)點(diǎn)贊、評論用戶(hù)加入種子列表中。
Step4:結束。
根據本施行例的方式采集完微博數據后,就可以對采集到的微博文本數據 進(jìn)行處理,清除其中的異常數據和噪音數據,實(shí)現數據格式的標準化,并建立 相應的微博資源庫,進(jìn)而才能為舉辦微博中社會(huì )安全風(fēng)波的探測提供重要的數 據基礎。
本發(fā)明的技術(shù)方案不限于上述具體施行例的限制,凡是按照本發(fā)明的技術(shù) 方案作出的技術(shù)變型,均落入本發(fā)明的保護范圍之內。
當前第1頁(yè)1&nbsp2&nbsp3&nbsp
用Python挖掘Twitter數據:數據采集
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 403 次瀏覽 ? 2020-08-26 04:59
這是一系列使用Python專(zhuān)門(mén)用于Twitter數據挖掘的文章中的第一篇。在第一部份中,我們將見(jiàn)到通過(guò)不同的方法來(lái)進(jìn)行Twitter的數據搜集。一旦我們構建好了一個(gè)數據集,在接下來(lái)的環(huán)節中,我們就將會(huì )討論一些有趣的數據應用。
注冊應用
為了才能訪(fǎng)問(wèn)Twitter數據編程,我們須要創(chuàng )建一個(gè)與Twitter的API交互的應用程序。
第一步是注冊一個(gè)你的應用程序。值得注意的是,您須要將您的瀏覽器轉入,登錄到Twitter(如果您仍未登陸),并注冊一個(gè)新的應用程序。您如今可以為您的應用程序選擇一個(gè)名稱(chēng)和說(shuō)明(例如“挖掘演示”或類(lèi)似)。您將收到一個(gè)消費者秘鑰和消費者密碼:這些都是應用程序設置,應一直保密。在您的應用程序的配置頁(yè)面,你也可以要求獲取一個(gè)訪(fǎng)問(wèn)令牌和訪(fǎng)問(wèn)令牌的密碼。類(lèi)似于消費者秘鑰,這些字符串也必須保密:他們提供的應用程序是代表您的賬戶(hù)訪(fǎng)問(wèn)到Twitter。默認權限是只讀的,這是我們在案例中須要的,但假如你決定改變您的許可,在應用中提供修改功能,你就必須再獲得一個(gè)新的訪(fǎng)問(wèn)令牌。
重要提示:使用Twitter的API時(shí)有速度限制,或者你想要提供一個(gè)可下載的數據集也會(huì )有限制,請參見(jiàn): >
您可以使用 Twitter提供的REST APIs與她們的服務(wù)進(jìn)行交互。那里還有一群基于Python的顧客,我們可以重復循環(huán)使用。尤其Tweepy是其中最有趣和最直白的一個(gè),所以我們一起把它安裝上去:
更新:Tweepy發(fā)布的3.4.0版本在Python3上出現了一些問(wèn)題,目前被綁定在GitHub上還不能進(jìn)行使用,因此在新的版本下來(lái)之前,我們仍然使用3.3.0版本。
更多的更新:Tweepy發(fā)布的3.5.0版本早已可以使用,似乎解決了上述提及的在Python3上的問(wèn)題。
為了授權我們的應用程序以代表我們訪(fǎng)問(wèn)Twitter,我們須要使用OAuth的界面:
現在的API變量是我們?yōu)榭梢栽赥witter上執行的大多數操作的入口點(diǎn)。
例如,我們可以看見(jiàn)我們自己的時(shí)間表(或者我們的Twitter主頁(yè)):
Tweepy提供方便的光標插口,對不同類(lèi)型的對象進(jìn)行迭代。在前面的事例中我們用10來(lái)限制我們正在閱讀的tweets的數目,但是其實(shí)也許我們是可以訪(fǎng)問(wèn)更多的。狀態(tài)變量是Status() class的一個(gè)實(shí)例,是訪(fǎng)問(wèn)數據時(shí)一個(gè)漂亮的包裝。Twitter API的JSON響應在_json屬性(帶有前導頓號)上是可用的,它不是純JSON字符串,而是一個(gè)字典。
所以前面的代碼可以被重新寫(xiě)入去處理/存儲JSON:
如果我們想要一個(gè)所有用戶(hù)的名單?來(lái)這里:
那么我們所有的tweets的列表呢? 也很簡(jiǎn)單:
通過(guò)這些方法,我們可以很容易地搜集tweets(以及更多),并將它們儲存為原創(chuàng )的JSON格式,可以很方便的根據我們的儲存格式將其轉換為不同的數據模型(很多NoSQL技術(shù)提供一些批量導出功能)。
process_or_store()功能是您的自定義施行占位符。最簡(jiǎn)單的形式就是你可以只復印出JSON,每行一個(gè)tweet:
流
如果我們要“保持聯(lián)接”,并搜集所有關(guān)于特定風(fēng)波將會(huì )出現的tweets,流API就是我們所須要的。我們須要擴充StreamListener()來(lái)定義我們處理輸入數據的形式。一個(gè)用#python hashtag搜集了所有新的tweet的事例:
根據不同的搜索詞,我們可以在幾分鐘之內搜集到成千上萬(wàn)的tweet。世界性覆蓋的現場(chǎng)活動(dòng)尤其這么(世界杯、超級杯、奧斯卡頒獎典禮等),所以保持關(guān)注JSON文件,看看它下降的速率是多么的快,并審視你的測試可能須要多少tweet。以上腳本將把每位tweet保存在新的行中,所以你可以從Unix shell中使用wc-l python.json命令來(lái)了解到你搜集了多少tweet。
你可以在下邊的要點(diǎn)中見(jiàn)到Twitter的API流的一個(gè)最小工作示例:
twitter_stream_downloader.py
總結
我們早已介紹了tweepy作為通過(guò)Python訪(fǎng)問(wèn)Twitter數據的一個(gè)相當簡(jiǎn)單的工具。我們可以按照明晰的“tweet”項目目標搜集一些不同類(lèi)型的數據。
一旦我們搜集了一些數據,在剖析應用方面的就可以進(jìn)行展開(kāi)了。在接下來(lái)的內容中,我們將討論部份問(wèn)題。
簡(jiǎn)介:Marco Bonzanini是美國紐約的一個(gè)數據科學(xué)家?;钴S于PyData社區的他喜歡從事文本剖析和數據挖掘的應用工作。他是“用Python把握社會(huì )化媒體挖掘”( 2016月7月出版)的作者。
原文>>
文章來(lái)源36大數據, ,微信號dashuju36 ,36大數據是一個(gè)專(zhuān)注大數據創(chuàng )業(yè)、大數據技術(shù)與剖析、大數據商業(yè)與應用的網(wǎng)站。分享大數據的干貨教程和大數據應用案例,提供大數據剖析工具和資料下載,解決大數據產(chǎn)業(yè)鏈上的創(chuàng )業(yè)、技術(shù)、分析、商業(yè)、應用等問(wèn)題,為大數據產(chǎn)業(yè)鏈上的公司和數據行業(yè)從業(yè)人員提供支持與服務(wù)。
via:shumeng
End. 查看全部
用Python挖掘Twitter數據:數據采集
這是一系列使用Python專(zhuān)門(mén)用于Twitter數據挖掘的文章中的第一篇。在第一部份中,我們將見(jiàn)到通過(guò)不同的方法來(lái)進(jìn)行Twitter的數據搜集。一旦我們構建好了一個(gè)數據集,在接下來(lái)的環(huán)節中,我們就將會(huì )討論一些有趣的數據應用。
注冊應用
為了才能訪(fǎng)問(wèn)Twitter數據編程,我們須要創(chuàng )建一個(gè)與Twitter的API交互的應用程序。
第一步是注冊一個(gè)你的應用程序。值得注意的是,您須要將您的瀏覽器轉入,登錄到Twitter(如果您仍未登陸),并注冊一個(gè)新的應用程序。您如今可以為您的應用程序選擇一個(gè)名稱(chēng)和說(shuō)明(例如“挖掘演示”或類(lèi)似)。您將收到一個(gè)消費者秘鑰和消費者密碼:這些都是應用程序設置,應一直保密。在您的應用程序的配置頁(yè)面,你也可以要求獲取一個(gè)訪(fǎng)問(wèn)令牌和訪(fǎng)問(wèn)令牌的密碼。類(lèi)似于消費者秘鑰,這些字符串也必須保密:他們提供的應用程序是代表您的賬戶(hù)訪(fǎng)問(wèn)到Twitter。默認權限是只讀的,這是我們在案例中須要的,但假如你決定改變您的許可,在應用中提供修改功能,你就必須再獲得一個(gè)新的訪(fǎng)問(wèn)令牌。
重要提示:使用Twitter的API時(shí)有速度限制,或者你想要提供一個(gè)可下載的數據集也會(huì )有限制,請參見(jiàn): >
您可以使用 Twitter提供的REST APIs與她們的服務(wù)進(jìn)行交互。那里還有一群基于Python的顧客,我們可以重復循環(huán)使用。尤其Tweepy是其中最有趣和最直白的一個(gè),所以我們一起把它安裝上去:
更新:Tweepy發(fā)布的3.4.0版本在Python3上出現了一些問(wèn)題,目前被綁定在GitHub上還不能進(jìn)行使用,因此在新的版本下來(lái)之前,我們仍然使用3.3.0版本。
更多的更新:Tweepy發(fā)布的3.5.0版本早已可以使用,似乎解決了上述提及的在Python3上的問(wèn)題。
為了授權我們的應用程序以代表我們訪(fǎng)問(wèn)Twitter,我們須要使用OAuth的界面:
現在的API變量是我們?yōu)榭梢栽赥witter上執行的大多數操作的入口點(diǎn)。
例如,我們可以看見(jiàn)我們自己的時(shí)間表(或者我們的Twitter主頁(yè)):
Tweepy提供方便的光標插口,對不同類(lèi)型的對象進(jìn)行迭代。在前面的事例中我們用10來(lái)限制我們正在閱讀的tweets的數目,但是其實(shí)也許我們是可以訪(fǎng)問(wèn)更多的。狀態(tài)變量是Status() class的一個(gè)實(shí)例,是訪(fǎng)問(wèn)數據時(shí)一個(gè)漂亮的包裝。Twitter API的JSON響應在_json屬性(帶有前導頓號)上是可用的,它不是純JSON字符串,而是一個(gè)字典。
所以前面的代碼可以被重新寫(xiě)入去處理/存儲JSON:
如果我們想要一個(gè)所有用戶(hù)的名單?來(lái)這里:
那么我們所有的tweets的列表呢? 也很簡(jiǎn)單:
通過(guò)這些方法,我們可以很容易地搜集tweets(以及更多),并將它們儲存為原創(chuàng )的JSON格式,可以很方便的根據我們的儲存格式將其轉換為不同的數據模型(很多NoSQL技術(shù)提供一些批量導出功能)。
process_or_store()功能是您的自定義施行占位符。最簡(jiǎn)單的形式就是你可以只復印出JSON,每行一個(gè)tweet:
流
如果我們要“保持聯(lián)接”,并搜集所有關(guān)于特定風(fēng)波將會(huì )出現的tweets,流API就是我們所須要的。我們須要擴充StreamListener()來(lái)定義我們處理輸入數據的形式。一個(gè)用#python hashtag搜集了所有新的tweet的事例:
根據不同的搜索詞,我們可以在幾分鐘之內搜集到成千上萬(wàn)的tweet。世界性覆蓋的現場(chǎng)活動(dòng)尤其這么(世界杯、超級杯、奧斯卡頒獎典禮等),所以保持關(guān)注JSON文件,看看它下降的速率是多么的快,并審視你的測試可能須要多少tweet。以上腳本將把每位tweet保存在新的行中,所以你可以從Unix shell中使用wc-l python.json命令來(lái)了解到你搜集了多少tweet。
你可以在下邊的要點(diǎn)中見(jiàn)到Twitter的API流的一個(gè)最小工作示例:
twitter_stream_downloader.py
總結
我們早已介紹了tweepy作為通過(guò)Python訪(fǎng)問(wèn)Twitter數據的一個(gè)相當簡(jiǎn)單的工具。我們可以按照明晰的“tweet”項目目標搜集一些不同類(lèi)型的數據。
一旦我們搜集了一些數據,在剖析應用方面的就可以進(jìn)行展開(kāi)了。在接下來(lái)的內容中,我們將討論部份問(wèn)題。
簡(jiǎn)介:Marco Bonzanini是美國紐約的一個(gè)數據科學(xué)家?;钴S于PyData社區的他喜歡從事文本剖析和數據挖掘的應用工作。他是“用Python把握社會(huì )化媒體挖掘”( 2016月7月出版)的作者。
原文>>
文章來(lái)源36大數據, ,微信號dashuju36 ,36大數據是一個(gè)專(zhuān)注大數據創(chuàng )業(yè)、大數據技術(shù)與剖析、大數據商業(yè)與應用的網(wǎng)站。分享大數據的干貨教程和大數據應用案例,提供大數據剖析工具和資料下載,解決大數據產(chǎn)業(yè)鏈上的創(chuàng )業(yè)、技術(shù)、分析、商業(yè)、應用等問(wèn)題,為大數據產(chǎn)業(yè)鏈上的公司和數據行業(yè)從業(yè)人員提供支持與服務(wù)。
via:shumeng
End.
優(yōu)采云采集怎樣獲取數據API鏈接 優(yōu)采云采集獲取數據API鏈接的方式
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 329 次瀏覽 ? 2020-08-26 04:28
今天給你們帶來(lái)優(yōu)采云采集怎樣獲取數據API鏈接,優(yōu)采云采集獲取數據API鏈接的方式,讓您輕松解決問(wèn)題。
優(yōu)采云采集如何獲取數據API鏈接
具體方式如下:
1
java、cs、php示例代碼點(diǎn)擊下載
這個(gè)教程為你們講解數據API的使用
注:只有在有效期內的旗艦版用戶(hù)才可以使用數據API
如何獲取數據API鏈接?
1.打開(kāi)任務(wù)配置界面,如下圖:
2
2.點(diǎn)下一步,直到最后一步,選擇生成數據導入API接口,如下圖:
3
3.點(diǎn)擊后將會(huì )有一個(gè)彈出窗口,從彈出窗口上復制API鏈接,并可查看API示例:
4
最終的API鏈接格式是:{開(kāi)始時(shí)間}&to={結束時(shí)間},key由系統手動(dòng)生成,請勿更改!最終使用的時(shí)侯須要將{開(kāi)始時(shí)間}和{結束時(shí)間}替換為想要獲取數據的時(shí)間區間(采集時(shí)間),如:/SkieerDataAPI/GetData?key=key&from=2014-11-11 12:00&to=2014-11-11 13:00,時(shí)間區間最長(cháng)為一個(gè)小時(shí)(總數據量不少于1000條,多于1000條的請用 )。pageindex是頁(yè)腳,pageSize是那頁(yè)顯示的數據量 如pageindex=3&pageSize=100的意義為懇求第三頁(yè)的數據,每頁(yè)根據100條數據進(jìn)行界定。
5
如何使用數據API?
數據API返回的是XML格式的數據,您的程序可定時(shí)的通過(guò)API獲取指定時(shí)間段云采集的數據,API返回數據的格式如下圖: 查看全部
優(yōu)采云采集怎樣獲取數據API鏈接 優(yōu)采云采集獲取數據API鏈接的方式
今天給你們帶來(lái)優(yōu)采云采集怎樣獲取數據API鏈接,優(yōu)采云采集獲取數據API鏈接的方式,讓您輕松解決問(wèn)題。
優(yōu)采云采集如何獲取數據API鏈接
具體方式如下:
1
java、cs、php示例代碼點(diǎn)擊下載
這個(gè)教程為你們講解數據API的使用
注:只有在有效期內的旗艦版用戶(hù)才可以使用數據API
如何獲取數據API鏈接?
1.打開(kāi)任務(wù)配置界面,如下圖:

2
2.點(diǎn)下一步,直到最后一步,選擇生成數據導入API接口,如下圖:

3
3.點(diǎn)擊后將會(huì )有一個(gè)彈出窗口,從彈出窗口上復制API鏈接,并可查看API示例:

4
最終的API鏈接格式是:{開(kāi)始時(shí)間}&to={結束時(shí)間},key由系統手動(dòng)生成,請勿更改!最終使用的時(shí)侯須要將{開(kāi)始時(shí)間}和{結束時(shí)間}替換為想要獲取數據的時(shí)間區間(采集時(shí)間),如:/SkieerDataAPI/GetData?key=key&from=2014-11-11 12:00&to=2014-11-11 13:00,時(shí)間區間最長(cháng)為一個(gè)小時(shí)(總數據量不少于1000條,多于1000條的請用 )。pageindex是頁(yè)腳,pageSize是那頁(yè)顯示的數據量 如pageindex=3&pageSize=100的意義為懇求第三頁(yè)的數據,每頁(yè)根據100條數據進(jìn)行界定。
5
如何使用數據API?
數據API返回的是XML格式的數據,您的程序可定時(shí)的通過(guò)API獲取指定時(shí)間段云采集的數據,API返回數據的格式如下圖:
爬蟲(chóng)數據采集技術(shù)趨勢—智能化解析
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 417 次瀏覽 ? 2020-08-26 04:21
用一句話(huà)概括爬蟲(chóng)工程師的工作內容,就是We Structure the World's Knowledge。
爬蟲(chóng)工作內容
互聯(lián)網(wǎng)作為人類(lèi)歷史最大的知識庫房,是沒(méi)有充分結構化的。目前互聯(lián)網(wǎng)僅僅是一些文本等多媒體數據的聚合,內容似乎十分有價(jià)值,但是程序是難以使用這些沒(méi)有結構化的數據。
在2006年左右,有專(zhuān)家提出的web3.0,語(yǔ)義互聯(lián)網(wǎng),知識共享。雖然現今開(kāi)放API,SOA概念越來(lái)越普及,真正語(yǔ)義上的互聯(lián)網(wǎng)的時(shí)代雖然還十分遙遠。因此爬蟲(chóng)仍然是最重要的手段,一端不斷解析,聚合互聯(lián)網(wǎng)上的數據,另外一端向各種各樣的的應用輸送數據。
現有爬蟲(chóng)開(kāi)發(fā)技術(shù)存在問(wèn)題
從急聘市場(chǎng)崗位需求可以看出,近年來(lái)對爬蟲(chóng)工程師需求越來(lái)越強烈。
個(gè)人判定緣由有兩個(gè):
信息聚合是互聯(lián)網(wǎng)公司的基本需求。
數據時(shí)代到來(lái),對數據更強烈的需求。
下面是我整理的部份靠爬蟲(chóng)聚合信息的創(chuàng )業(yè)公司,按照時(shí)間次序排序:
最后5種類(lèi)型,幾乎2014年都是開(kāi)始。很多金融場(chǎng)景相關(guān)應用開(kāi)始出現,這就對準確度和可靠性提出了更高的要求。但現有的爬蟲(chóng)開(kāi)發(fā)技術(shù)能夠滿(mǎn)足高可靠,大規模,高效率開(kāi)發(fā)需求呢?
從軟件工程角度來(lái)看,一件事情若果未能評估,那就難以管理。爬蟲(chóng)開(kāi)發(fā)常常是被吐槽的誘因之一,就是工作量往往難以評估。一般的軟件項目的開(kāi)發(fā)過(guò)程隨著(zhù)時(shí)間推動(dòng),工作量會(huì )漸漸降低,也是你們常常說(shuō)的燒盡療效。
而爬蟲(chóng)開(kāi)發(fā)生命周期如下圖:
爬蟲(chóng)開(kāi)發(fā)主要有兩個(gè)方面內容:下載網(wǎng)頁(yè),解析網(wǎng)頁(yè)。解析網(wǎng)頁(yè)大約搶占開(kāi)發(fā)工作的80%左右。
下載網(wǎng)頁(yè)功能的開(kāi)發(fā)工作,會(huì )涉及IP限制,驗證碼等問(wèn)題,這樣問(wèn)題都是可以預期的。同時(shí),隨著(zhù)現今優(yōu)秀的爬蟲(chóng)框架和云服務(wù)器的普及,問(wèn)題解決上去會(huì )更輕松。
編寫(xiě)解析代碼,雖然有一些基本工具chrome,firecdebug可以使用,但仍然須要人工剖析,編寫(xiě)解析規則。無(wú)論是使用xpath,正則表達式,css selector,都不能減輕這一部分的工作量。
大量重復性工作會(huì )導致以下兩個(gè)問(wèn)題:
即使同類(lèi)型的網(wǎng)頁(yè)看起來(lái)99%是一樣,也須要編撰獨立的爬蟲(chóng)。這都會(huì )給人這樣一種感覺(jué)——爬蟲(chóng)開(kāi)發(fā)大部分的工作內容是重復的。
數據源網(wǎng)頁(yè)改版,幾乎整個(gè)爬蟲(chóng)項目須要重做。重做的工作量幾乎是100%,爬蟲(chóng)工程師心里常常是一萬(wàn)只矮馬跑過(guò)?,F在好多征信數據采集公司的合作伙伴,當數據源網(wǎng)站改版,常常須要一至兩天能夠修補爬蟲(chóng),很明顯這些可靠性是難以滿(mǎn)足金融場(chǎng)景須要。
智能化解析
這是一張新浪新聞的圖片。
可以發(fā)覺(jué),視覺(jué)上很容易了解到,新聞所報導的風(fēng)波的標題,發(fā)表時(shí)間和正文。自然也會(huì )想到,能否通過(guò)一些機器學(xué)習的算法達到手動(dòng)解析的目的?這樣就不用人工編撰解析額,減少重復勞動(dòng)。在2008年開(kāi)始,就要研究機構發(fā)表了相關(guān)論文。
~deepay/mywww/papers/www08-segments.pdf
/en-us/um/people/znie/p048.special.nie.pdf
也就是在2008有一家相關(guān)的創(chuàng )業(yè)公司,在斯坦福大學(xué)孵化。
DiffBot智能化數據采集公司
總部坐落加洲的Diffbot創(chuàng )立于2008年,創(chuàng )始人Mike Tung,是哈佛結業(yè)研究生。Diffbot是通過(guò)人工智能技術(shù),讓“機器”識別網(wǎng)頁(yè)內容,抓取關(guān)鍵內容,并輸出軟件可以直接辨識的結構化數據。其創(chuàng )始人兼首席執行官Mike Tung表示,“Diffbot如今做的,相當于人類(lèi)在瀏覽網(wǎng)頁(yè)文章時(shí)所做的事情,找出頁(yè)面中最核心的相關(guān)信息?!蹦壳癉iffbot早已發(fā)布了頭版API和文章API,還有產(chǎn)品API。服務(wù)的顧客包括三星、eBay、思科、美國在線(xiàn)等。
Diffbot的理念就是通過(guò)“視覺(jué)機器人”來(lái)掃描和辨識不同的網(wǎng)頁(yè)類(lèi)型(主要是非結構化的數據),再將這種豐富的數據源用于其他應用。Mike Tung表示:“我們在獲取頁(yè)面然后會(huì )對其進(jìn)行剖析,然后通過(guò)成熟先進(jìn)的技術(shù)進(jìn)行結構化處理?!敝拔姨峒暗膚e structure the world's knowledge,就是該公司提出的理念。
Diffbot在基于智能采集的基礎上,又開(kāi)發(fā)出好多數據產(chǎn)品,比如知識圖譜,智能商業(yè)BI。在2016騰訊與硅谷風(fēng)投機構Felicis Ventures領(lǐng)投了人工智能創(chuàng )業(yè)公司Diffbot 1000萬(wàn)美元的A輪融資,很多互聯(lián)網(wǎng)大鱷開(kāi)始發(fā)覺(jué)這家公司的價(jià)值。
算法實(shí)踐
通過(guò)智能方法來(lái)解析網(wǎng)頁(yè)須要兩個(gè)步驟:
基于視覺(jué)上的網(wǎng)頁(yè)分割,將網(wǎng)頁(yè)分割幾個(gè)視覺(jué)塊。
通過(guò)機器學(xué)習訓練的方法來(lái)判定各個(gè)視覺(jué)塊的類(lèi)型,是標題,還是正文。其中主要流程和通常機器須要流程沒(méi)哪些區別。這就不詳盡解釋。使用到使用的開(kāi)源框架有:scikit-learn,phantomjs
Scikit-Learn機器學(xué)習庫早已十分成熟,很容易上手。
phantomjs,是一個(gè)headless webkit渲染引擎。做爬蟲(chóng)開(kāi)發(fā)的朋友應當十分須要。
網(wǎng)頁(yè)分割算法
從Diffbot初期發(fā)布的文章來(lái)看,是通過(guò)圖象處理的方法來(lái)切割視覺(jué)塊。使用到的算法有,邊界檢測,文字辨識等算法。但這些方法估算量偏大,復雜度很高。
另外一種實(shí)現方法是基于Dom樹(shù)結構,導出所需的視覺(jué)特點(diǎn)。
聚合時(shí)侯需用的特點(diǎn)變量。主要考慮視覺(jué)相關(guān)的誘因有元素在頁(yè)面上的位置,寬度和高度,Dom的層次。
有一點(diǎn)須要注意的是,現在網(wǎng)頁(yè)好多是動(dòng)態(tài)生成。需要依靠phantomjs工具來(lái)進(jìn)行動(dòng)態(tài)網(wǎng)頁(yè)渲染。
聚類(lèi)算法可以選用的DBSCAN,DBSCAN算法優(yōu)點(diǎn)是愈發(fā)密度來(lái)界定,比起K-mean算法的優(yōu)點(diǎn),是處理任意形狀的聚合。
具體的實(shí)現方法可以參考下邊博文:
分類(lèi)算法
在第一步處理后,網(wǎng)頁(yè)上的標簽,會(huì )被界定分若干類(lèi),需要判定標簽的類(lèi)型,是否是標題,正文,廣告,導航之類(lèi)。需要整理出類(lèi)似下邊的,訓練矩陣。
整個(gè)學(xué)習過(guò)程與通常的機器學(xué)習訓練過(guò)程沒(méi)有區別。由于數據樣本規模不大,分類(lèi)算法基本算法采取。分類(lèi)算法可以選用樸素貝葉斯,或者SVM。
總結和展望
本文介紹的方法比較簡(jiǎn)略,一般來(lái)說(shuō)解析模型只能針對特定的網(wǎng)路訓練解析模型,比如新聞,電商產(chǎn)品頁(yè)。所以不同類(lèi)型的網(wǎng)頁(yè),所須要的特點(diǎn)變量有較大差異。針對不同特征類(lèi)型數據,需要你們自己花時(shí)間去探求和實(shí)踐。
隨著(zhù)數據時(shí)代和智能化時(shí)代到來(lái),爬蟲(chóng)作為重要的數據來(lái)源,自身須要一些技術(shù)提高來(lái)適應時(shí)代的要求,這也就對爬蟲(chóng)工程師提出更高的要求。
本文作者:李國建(點(diǎn)融黑手黨),現就職于點(diǎn)融網(wǎng)成都團隊Data Team,喜歡研究各類(lèi)機器學(xué)習,爬蟲(chóng),自動(dòng)化交易相關(guān)的技術(shù)。 查看全部
爬蟲(chóng)數據采集技術(shù)趨勢—智能化解析
用一句話(huà)概括爬蟲(chóng)工程師的工作內容,就是We Structure the World's Knowledge。
爬蟲(chóng)工作內容
互聯(lián)網(wǎng)作為人類(lèi)歷史最大的知識庫房,是沒(méi)有充分結構化的。目前互聯(lián)網(wǎng)僅僅是一些文本等多媒體數據的聚合,內容似乎十分有價(jià)值,但是程序是難以使用這些沒(méi)有結構化的數據。
在2006年左右,有專(zhuān)家提出的web3.0,語(yǔ)義互聯(lián)網(wǎng),知識共享。雖然現今開(kāi)放API,SOA概念越來(lái)越普及,真正語(yǔ)義上的互聯(lián)網(wǎng)的時(shí)代雖然還十分遙遠。因此爬蟲(chóng)仍然是最重要的手段,一端不斷解析,聚合互聯(lián)網(wǎng)上的數據,另外一端向各種各樣的的應用輸送數據。
現有爬蟲(chóng)開(kāi)發(fā)技術(shù)存在問(wèn)題
從急聘市場(chǎng)崗位需求可以看出,近年來(lái)對爬蟲(chóng)工程師需求越來(lái)越強烈。
個(gè)人判定緣由有兩個(gè):
信息聚合是互聯(lián)網(wǎng)公司的基本需求。
數據時(shí)代到來(lái),對數據更強烈的需求。
下面是我整理的部份靠爬蟲(chóng)聚合信息的創(chuàng )業(yè)公司,按照時(shí)間次序排序:
最后5種類(lèi)型,幾乎2014年都是開(kāi)始。很多金融場(chǎng)景相關(guān)應用開(kāi)始出現,這就對準確度和可靠性提出了更高的要求。但現有的爬蟲(chóng)開(kāi)發(fā)技術(shù)能夠滿(mǎn)足高可靠,大規模,高效率開(kāi)發(fā)需求呢?
從軟件工程角度來(lái)看,一件事情若果未能評估,那就難以管理。爬蟲(chóng)開(kāi)發(fā)常常是被吐槽的誘因之一,就是工作量往往難以評估。一般的軟件項目的開(kāi)發(fā)過(guò)程隨著(zhù)時(shí)間推動(dòng),工作量會(huì )漸漸降低,也是你們常常說(shuō)的燒盡療效。
而爬蟲(chóng)開(kāi)發(fā)生命周期如下圖:
爬蟲(chóng)開(kāi)發(fā)主要有兩個(gè)方面內容:下載網(wǎng)頁(yè),解析網(wǎng)頁(yè)。解析網(wǎng)頁(yè)大約搶占開(kāi)發(fā)工作的80%左右。
下載網(wǎng)頁(yè)功能的開(kāi)發(fā)工作,會(huì )涉及IP限制,驗證碼等問(wèn)題,這樣問(wèn)題都是可以預期的。同時(shí),隨著(zhù)現今優(yōu)秀的爬蟲(chóng)框架和云服務(wù)器的普及,問(wèn)題解決上去會(huì )更輕松。
編寫(xiě)解析代碼,雖然有一些基本工具chrome,firecdebug可以使用,但仍然須要人工剖析,編寫(xiě)解析規則。無(wú)論是使用xpath,正則表達式,css selector,都不能減輕這一部分的工作量。
大量重復性工作會(huì )導致以下兩個(gè)問(wèn)題:
即使同類(lèi)型的網(wǎng)頁(yè)看起來(lái)99%是一樣,也須要編撰獨立的爬蟲(chóng)。這都會(huì )給人這樣一種感覺(jué)——爬蟲(chóng)開(kāi)發(fā)大部分的工作內容是重復的。
數據源網(wǎng)頁(yè)改版,幾乎整個(gè)爬蟲(chóng)項目須要重做。重做的工作量幾乎是100%,爬蟲(chóng)工程師心里常常是一萬(wàn)只矮馬跑過(guò)?,F在好多征信數據采集公司的合作伙伴,當數據源網(wǎng)站改版,常常須要一至兩天能夠修補爬蟲(chóng),很明顯這些可靠性是難以滿(mǎn)足金融場(chǎng)景須要。
智能化解析
這是一張新浪新聞的圖片。
可以發(fā)覺(jué),視覺(jué)上很容易了解到,新聞所報導的風(fēng)波的標題,發(fā)表時(shí)間和正文。自然也會(huì )想到,能否通過(guò)一些機器學(xué)習的算法達到手動(dòng)解析的目的?這樣就不用人工編撰解析額,減少重復勞動(dòng)。在2008年開(kāi)始,就要研究機構發(fā)表了相關(guān)論文。
~deepay/mywww/papers/www08-segments.pdf
/en-us/um/people/znie/p048.special.nie.pdf
也就是在2008有一家相關(guān)的創(chuàng )業(yè)公司,在斯坦福大學(xué)孵化。
DiffBot智能化數據采集公司
總部坐落加洲的Diffbot創(chuàng )立于2008年,創(chuàng )始人Mike Tung,是哈佛結業(yè)研究生。Diffbot是通過(guò)人工智能技術(shù),讓“機器”識別網(wǎng)頁(yè)內容,抓取關(guān)鍵內容,并輸出軟件可以直接辨識的結構化數據。其創(chuàng )始人兼首席執行官Mike Tung表示,“Diffbot如今做的,相當于人類(lèi)在瀏覽網(wǎng)頁(yè)文章時(shí)所做的事情,找出頁(yè)面中最核心的相關(guān)信息?!蹦壳癉iffbot早已發(fā)布了頭版API和文章API,還有產(chǎn)品API。服務(wù)的顧客包括三星、eBay、思科、美國在線(xiàn)等。
Diffbot的理念就是通過(guò)“視覺(jué)機器人”來(lái)掃描和辨識不同的網(wǎng)頁(yè)類(lèi)型(主要是非結構化的數據),再將這種豐富的數據源用于其他應用。Mike Tung表示:“我們在獲取頁(yè)面然后會(huì )對其進(jìn)行剖析,然后通過(guò)成熟先進(jìn)的技術(shù)進(jìn)行結構化處理?!敝拔姨峒暗膚e structure the world's knowledge,就是該公司提出的理念。
Diffbot在基于智能采集的基礎上,又開(kāi)發(fā)出好多數據產(chǎn)品,比如知識圖譜,智能商業(yè)BI。在2016騰訊與硅谷風(fēng)投機構Felicis Ventures領(lǐng)投了人工智能創(chuàng )業(yè)公司Diffbot 1000萬(wàn)美元的A輪融資,很多互聯(lián)網(wǎng)大鱷開(kāi)始發(fā)覺(jué)這家公司的價(jià)值。
算法實(shí)踐
通過(guò)智能方法來(lái)解析網(wǎng)頁(yè)須要兩個(gè)步驟:
基于視覺(jué)上的網(wǎng)頁(yè)分割,將網(wǎng)頁(yè)分割幾個(gè)視覺(jué)塊。
通過(guò)機器學(xué)習訓練的方法來(lái)判定各個(gè)視覺(jué)塊的類(lèi)型,是標題,還是正文。其中主要流程和通常機器須要流程沒(méi)哪些區別。這就不詳盡解釋。使用到使用的開(kāi)源框架有:scikit-learn,phantomjs
Scikit-Learn機器學(xué)習庫早已十分成熟,很容易上手。
phantomjs,是一個(gè)headless webkit渲染引擎。做爬蟲(chóng)開(kāi)發(fā)的朋友應當十分須要。
網(wǎng)頁(yè)分割算法
從Diffbot初期發(fā)布的文章來(lái)看,是通過(guò)圖象處理的方法來(lái)切割視覺(jué)塊。使用到的算法有,邊界檢測,文字辨識等算法。但這些方法估算量偏大,復雜度很高。
另外一種實(shí)現方法是基于Dom樹(shù)結構,導出所需的視覺(jué)特點(diǎn)。
聚合時(shí)侯需用的特點(diǎn)變量。主要考慮視覺(jué)相關(guān)的誘因有元素在頁(yè)面上的位置,寬度和高度,Dom的層次。
有一點(diǎn)須要注意的是,現在網(wǎng)頁(yè)好多是動(dòng)態(tài)生成。需要依靠phantomjs工具來(lái)進(jìn)行動(dòng)態(tài)網(wǎng)頁(yè)渲染。
聚類(lèi)算法可以選用的DBSCAN,DBSCAN算法優(yōu)點(diǎn)是愈發(fā)密度來(lái)界定,比起K-mean算法的優(yōu)點(diǎn),是處理任意形狀的聚合。
具體的實(shí)現方法可以參考下邊博文:
分類(lèi)算法
在第一步處理后,網(wǎng)頁(yè)上的標簽,會(huì )被界定分若干類(lèi),需要判定標簽的類(lèi)型,是否是標題,正文,廣告,導航之類(lèi)。需要整理出類(lèi)似下邊的,訓練矩陣。
整個(gè)學(xué)習過(guò)程與通常的機器學(xué)習訓練過(guò)程沒(méi)有區別。由于數據樣本規模不大,分類(lèi)算法基本算法采取。分類(lèi)算法可以選用樸素貝葉斯,或者SVM。
總結和展望
本文介紹的方法比較簡(jiǎn)略,一般來(lái)說(shuō)解析模型只能針對特定的網(wǎng)路訓練解析模型,比如新聞,電商產(chǎn)品頁(yè)。所以不同類(lèi)型的網(wǎng)頁(yè),所須要的特點(diǎn)變量有較大差異。針對不同特征類(lèi)型數據,需要你們自己花時(shí)間去探求和實(shí)踐。
隨著(zhù)數據時(shí)代和智能化時(shí)代到來(lái),爬蟲(chóng)作為重要的數據來(lái)源,自身須要一些技術(shù)提高來(lái)適應時(shí)代的要求,這也就對爬蟲(chóng)工程師提出更高的要求。
本文作者:李國建(點(diǎn)融黑手黨),現就職于點(diǎn)融網(wǎng)成都團隊Data Team,喜歡研究各類(lèi)機器學(xué)習,爬蟲(chóng),自動(dòng)化交易相關(guān)的技術(shù)。
Python爬蟲(chóng):十分鐘實(shí)現從數據抓取到數據API提供
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 163 次瀏覽 ? 2020-08-26 01:31
歡迎點(diǎn)擊右上角關(guān)注小編,除了分享技術(shù)文章之外還有好多福利,私信學(xué)習資料可以發(fā)放包括不限于Python實(shí)戰演練、PDF電子文檔、面試集錦、學(xué)習資料等。
依舊先從爬蟲(chóng)的基本概念說(shuō)起,你去做爬蟲(chóng)做數據抓取,第一件事想必是去查看目標網(wǎng)站是否有api。有且可以使用的話(huà),皆大歡喜。
假如目標網(wǎng)站自身不提供api,但明天你心情不好就想用api來(lái)抓數據,那如何辦。有個(gè)長(cháng)者說(shuō),沒(méi)api創(chuàng )造api也要上,所以,那就創(chuàng )造api吧~
關(guān)于Toapi
很多時(shí)侯你須要經(jīng)歷抓取數據->存儲數據->構建API的基本步驟,然后在去定時(shí)更新數據。然而你的目的并不是想去學(xué)習搭建穩定可靠手動(dòng)更新的API服務(wù),你只是想用這個(gè)網(wǎng)站的數據而已。Toapi就是因此實(shí)現,可以自動(dòng)化的完成前述任務(wù),達到使用網(wǎng)站實(shí)時(shí)數據的目的。
先看效果圖 (這個(gè)網(wǎng)站是沒(méi)有api的喲)手機點(diǎn)進(jìn)去可能沒(méi)有數據,用pc端瀏覽器就好。
如你所見(jiàn),Toapi會(huì )使數據弄成一塊面包,你只須要將它切出來(lái)喝了(雖然英文的顯示是unicode)。那么話(huà)不多說(shuō),看代碼。
滿(mǎn)打滿(mǎn)算10行代碼吧,你就可以實(shí)現數據的api,心動(dòng)不如行動(dòng)還不給我打錢(qián),啊呸,不好意思,串場(chǎng)了。下面還是解釋下里面的代碼。希望對你有幫助。
對了對了,你寫(xiě)那些代碼不用十分鐘吧,不要算我標題黨。
安裝:pip install toapi 查看全部
Python爬蟲(chóng):十分鐘實(shí)現從數據抓取到數據API提供
歡迎點(diǎn)擊右上角關(guān)注小編,除了分享技術(shù)文章之外還有好多福利,私信學(xué)習資料可以發(fā)放包括不限于Python實(shí)戰演練、PDF電子文檔、面試集錦、學(xué)習資料等。
依舊先從爬蟲(chóng)的基本概念說(shuō)起,你去做爬蟲(chóng)做數據抓取,第一件事想必是去查看目標網(wǎng)站是否有api。有且可以使用的話(huà),皆大歡喜。
假如目標網(wǎng)站自身不提供api,但明天你心情不好就想用api來(lái)抓數據,那如何辦。有個(gè)長(cháng)者說(shuō),沒(méi)api創(chuàng )造api也要上,所以,那就創(chuàng )造api吧~
關(guān)于Toapi
很多時(shí)侯你須要經(jīng)歷抓取數據->存儲數據->構建API的基本步驟,然后在去定時(shí)更新數據。然而你的目的并不是想去學(xué)習搭建穩定可靠手動(dòng)更新的API服務(wù),你只是想用這個(gè)網(wǎng)站的數據而已。Toapi就是因此實(shí)現,可以自動(dòng)化的完成前述任務(wù),達到使用網(wǎng)站實(shí)時(shí)數據的目的。
先看效果圖 (這個(gè)網(wǎng)站是沒(méi)有api的喲)手機點(diǎn)進(jìn)去可能沒(méi)有數據,用pc端瀏覽器就好。
如你所見(jiàn),Toapi會(huì )使數據弄成一塊面包,你只須要將它切出來(lái)喝了(雖然英文的顯示是unicode)。那么話(huà)不多說(shuō),看代碼。
滿(mǎn)打滿(mǎn)算10行代碼吧,你就可以實(shí)現數據的api,心動(dòng)不如行動(dòng)還不給我打錢(qián),啊呸,不好意思,串場(chǎng)了。下面還是解釋下里面的代碼。希望對你有幫助。
對了對了,你寫(xiě)那些代碼不用十分鐘吧,不要算我標題黨。
安裝:pip install toapi
第 7 篇:文章詳情的 API 接口
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 361 次瀏覽 ? 2020-08-26 00:36
作者:HelloGitHub-追夢(mèng)人物
一旦我們使用了視圖集,并實(shí)現了 HTTP 請求對應的 action 方法(對應規則的說(shuō)明見(jiàn) 使用視圖集簡(jiǎn)化代碼),將其在路由器中注冊后,django-restframework 自動(dòng)會(huì )手動(dòng)為我們生成對應的 API 接口。
目前為止,我們只實(shí)現了 GET 請求對應的 action——list 方法,因此路由器只為我們生成了一個(gè) API,這個(gè) API 返回文章資源列表。GET 請求還可以用于獲取單個(gè)資源,對應的 action 為 retrieve,因此,只要我們在視圖集中實(shí)現 retrieve 方法的邏輯,就可以直接生成獲取單篇文章資源的 API 接口。
貼心的是,django-rest-framework 已經(jīng)幫我們把 retrieve 的邏輯在 mixins.RetrieveModelMixin 里寫(xiě)好了,直接混進(jìn)視圖集即可:
現在,路由會(huì )手動(dòng)降低一個(gè) /posts/:pk/ 的 URL 模式,其中 pk 為文章的 id。訪(fǎng)問(wèn)此 API 接口可以獲得指定文章 id 的資源。
實(shí)際上,實(shí)現各個(gè) action 邏輯的混進(jìn)類(lèi)都十分簡(jiǎn)單,以 RetrieveModelMixin 為例,我們來(lái)瞧瞧它的源碼:
retrieve 方法首先調用 get_object 方法獲取需序列化的對象。get_object 方法一般情況下根據以下兩點(diǎn)來(lái)篩選出單個(gè)資源對象:
get_queryset 方法(或者 queryset 屬性,get_queryset 方法返回的值優(yōu)先)返回的資源列表對象。lookup_field 屬性指定的資源篩選數組(默認為 pk)。django-rest-framework 以該數組的值從 get_queryset 返回的資源列表中篩選出單個(gè)資源對象。lookup_field 字段的值將從懇求的 URL 中捕獲,所以你聽(tīng)到文章接口的 url 模式為 /posts/:pk/,假設將 lookup_field 指定為 title,則 url 模式為 /posts/:title/,此時(shí)將按照文章標題獲取單篇文章資源。文章詳情 Serializer
現在,假設我們要獲取 id 為 1 的文章資源,訪(fǎng)問(wèn)獲取單篇文章資源的 API 接口 :10000/api/posts/1/,得到如下的返回結果:
可以看見(jiàn)好多我們須要在詳情頁(yè)中展示的數組值并沒(méi)有返回,比如文章正文(body)。原因是視圖集中指定的文章序列化器為 PostListSerializer,這個(gè)序列化器被用于序列化文章列表。因為展示文章列表數據時(shí),有些數組用不上,所以出于性能考慮,只序列化了部份數組。
顯然,我們須要給文章詳情寫(xiě)一個(gè)新的序列化器了:
詳情序列化器和列表序列化器幾乎一樣,只是在 fields 中指定了更多須要序列化的數組。
同時(shí)注意,為了序列化文章的標簽 tags,我們新增了一個(gè) TagSerializer,由于文章可能有多個(gè)標簽,因為 tags 是一個(gè)列表,要序列化一個(gè)列表資源,需要將序列化器參數 many 的值指定為 True。
動(dòng)態(tài) Serializer
現在新的序列化器寫(xiě)好了,可是在那里指定呢?視圖集中 serializer_class 屬性早已被指定為了 PostListSerializer,那 PostRetrieveSerializer 應該指定在哪呢?
類(lèi)似于視圖集類(lèi)的 queryset 屬性和 get_queryset 方法的關(guān)系, serializer_class 屬性的值也可以通過(guò) get_serializer_class 方法返回的值覆蓋,因此我們可以按照不同的 action 動(dòng)作來(lái)動(dòng)態(tài)指定對應的序列化器。
那么怎樣在視圖集中分辨不同的 action 動(dòng)作呢?視圖集有一個(gè) action 屬性,專(zhuān)門(mén)拿來(lái)記錄當前懇求對應的動(dòng)作。對應關(guān)系如下:
HTTP 請求對應 action 屬性的值GETlist(資源列表)/ retrieve(單個(gè)資源)PUTupdatePATCHpartial_updateDELETEdestory
因此,我們在視圖集中重畫(huà) get_serializer_class 方法,寫(xiě)入我們自己的邏輯,就可以按照不同懇求,分別獲取相應的序列化器了:
后續對于其他動(dòng)作,可以再加 elif 判斷,不過(guò)若果動(dòng)作變多了,就會(huì )有很多的 if 判斷。更好的做好是,給視圖集加一個(gè)屬性,用于配置 action 和 serializer_class 的對應關(guān)系,通過(guò)查表法查找 action 應該使用的序列化器。
現在,再次訪(fǎng)問(wèn)單篇文章 API 接口,可以看見(jiàn)返回了愈加詳盡的博客文章數據了:
『講解開(kāi)源項目系列』——讓對開(kāi)源項目感興趣的人不再懼怕、讓開(kāi)源項目的發(fā)起者不再孤單。跟著(zhù)我們的文章,你會(huì )發(fā)覺(jué)編程的樂(lè )趣、使用和發(fā)覺(jué)參與開(kāi)源項目這么簡(jiǎn)單。歡迎留言聯(lián)系我們、加入我們,讓更多人愛(ài)上開(kāi)源、貢獻開(kāi)源~ 查看全部
第 7 篇:文章詳情的 API 接口
作者:HelloGitHub-追夢(mèng)人物
一旦我們使用了視圖集,并實(shí)現了 HTTP 請求對應的 action 方法(對應規則的說(shuō)明見(jiàn) 使用視圖集簡(jiǎn)化代碼),將其在路由器中注冊后,django-restframework 自動(dòng)會(huì )手動(dòng)為我們生成對應的 API 接口。
目前為止,我們只實(shí)現了 GET 請求對應的 action——list 方法,因此路由器只為我們生成了一個(gè) API,這個(gè) API 返回文章資源列表。GET 請求還可以用于獲取單個(gè)資源,對應的 action 為 retrieve,因此,只要我們在視圖集中實(shí)現 retrieve 方法的邏輯,就可以直接生成獲取單篇文章資源的 API 接口。
貼心的是,django-rest-framework 已經(jīng)幫我們把 retrieve 的邏輯在 mixins.RetrieveModelMixin 里寫(xiě)好了,直接混進(jìn)視圖集即可:
現在,路由會(huì )手動(dòng)降低一個(gè) /posts/:pk/ 的 URL 模式,其中 pk 為文章的 id。訪(fǎng)問(wèn)此 API 接口可以獲得指定文章 id 的資源。
實(shí)際上,實(shí)現各個(gè) action 邏輯的混進(jìn)類(lèi)都十分簡(jiǎn)單,以 RetrieveModelMixin 為例,我們來(lái)瞧瞧它的源碼:
retrieve 方法首先調用 get_object 方法獲取需序列化的對象。get_object 方法一般情況下根據以下兩點(diǎn)來(lái)篩選出單個(gè)資源對象:
get_queryset 方法(或者 queryset 屬性,get_queryset 方法返回的值優(yōu)先)返回的資源列表對象。lookup_field 屬性指定的資源篩選數組(默認為 pk)。django-rest-framework 以該數組的值從 get_queryset 返回的資源列表中篩選出單個(gè)資源對象。lookup_field 字段的值將從懇求的 URL 中捕獲,所以你聽(tīng)到文章接口的 url 模式為 /posts/:pk/,假設將 lookup_field 指定為 title,則 url 模式為 /posts/:title/,此時(shí)將按照文章標題獲取單篇文章資源。文章詳情 Serializer
現在,假設我們要獲取 id 為 1 的文章資源,訪(fǎng)問(wèn)獲取單篇文章資源的 API 接口 :10000/api/posts/1/,得到如下的返回結果:
可以看見(jiàn)好多我們須要在詳情頁(yè)中展示的數組值并沒(méi)有返回,比如文章正文(body)。原因是視圖集中指定的文章序列化器為 PostListSerializer,這個(gè)序列化器被用于序列化文章列表。因為展示文章列表數據時(shí),有些數組用不上,所以出于性能考慮,只序列化了部份數組。
顯然,我們須要給文章詳情寫(xiě)一個(gè)新的序列化器了:
詳情序列化器和列表序列化器幾乎一樣,只是在 fields 中指定了更多須要序列化的數組。
同時(shí)注意,為了序列化文章的標簽 tags,我們新增了一個(gè) TagSerializer,由于文章可能有多個(gè)標簽,因為 tags 是一個(gè)列表,要序列化一個(gè)列表資源,需要將序列化器參數 many 的值指定為 True。
動(dòng)態(tài) Serializer
現在新的序列化器寫(xiě)好了,可是在那里指定呢?視圖集中 serializer_class 屬性早已被指定為了 PostListSerializer,那 PostRetrieveSerializer 應該指定在哪呢?
類(lèi)似于視圖集類(lèi)的 queryset 屬性和 get_queryset 方法的關(guān)系, serializer_class 屬性的值也可以通過(guò) get_serializer_class 方法返回的值覆蓋,因此我們可以按照不同的 action 動(dòng)作來(lái)動(dòng)態(tài)指定對應的序列化器。
那么怎樣在視圖集中分辨不同的 action 動(dòng)作呢?視圖集有一個(gè) action 屬性,專(zhuān)門(mén)拿來(lái)記錄當前懇求對應的動(dòng)作。對應關(guān)系如下:
HTTP 請求對應 action 屬性的值GETlist(資源列表)/ retrieve(單個(gè)資源)PUTupdatePATCHpartial_updateDELETEdestory
因此,我們在視圖集中重畫(huà) get_serializer_class 方法,寫(xiě)入我們自己的邏輯,就可以按照不同懇求,分別獲取相應的序列化器了:
后續對于其他動(dòng)作,可以再加 elif 判斷,不過(guò)若果動(dòng)作變多了,就會(huì )有很多的 if 判斷。更好的做好是,給視圖集加一個(gè)屬性,用于配置 action 和 serializer_class 的對應關(guān)系,通過(guò)查表法查找 action 應該使用的序列化器。
現在,再次訪(fǎng)問(wèn)單篇文章 API 接口,可以看見(jiàn)返回了愈加詳盡的博客文章數據了:
『講解開(kāi)源項目系列』——讓對開(kāi)源項目感興趣的人不再懼怕、讓開(kāi)源項目的發(fā)起者不再孤單。跟著(zhù)我們的文章,你會(huì )發(fā)覺(jué)編程的樂(lè )趣、使用和發(fā)覺(jué)參與開(kāi)源項目這么簡(jiǎn)單。歡迎留言聯(lián)系我們、加入我們,讓更多人愛(ài)上開(kāi)源、貢獻開(kāi)源~
教你三步爬取后端優(yōu)質(zhì)文章
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 204 次瀏覽 ? 2020-08-25 22:36
打開(kāi)官網(wǎng),(F12) 打開(kāi)開(kāi)發(fā)者模式查看network 選項,咱們可以看見(jiàn)獲取文章接口的api如下:
打開(kāi)開(kāi)發(fā)者模式,我們太輕松的找到獲取文章的插口,這就好辦了,說(shuō)實(shí)話(huà)后端開(kāi)發(fā),只要有了插口,那就等于有了一切,我們可以恣意的 coding 了~
第二步
創(chuàng )建服務(wù)器文件 app.js ,通過(guò)superagent 模塊發(fā)送懇求獲取文章數據。
app.js 是我們服務(wù)端代碼,這里通過(guò)服務(wù)端發(fā)送懇求獲取爬蟲(chóng)所要的數據保存出來(lái)。
// 定義一個(gè)函數,用來(lái)獲取首頁(yè)前端文章信息
function getInfo () {
// 利用superagent 模塊發(fā)送請求,獲取前20篇文章。注意請求頭的設置和POST請求體數據(請求參數)
superagent.post('https://web-api..im/query').send(params).set('X-Agent', 'Juejin/Web').end((err, res) => {
if (err) {
return console.log(err)
}
// 保存所有文章信息
const array1 = JSON.parse(res.text).data.articleFeed.items.edges
const num = JSON.parse(res.text).data.articleFeed.items.pageInfo.endCursor
// 篩選出點(diǎn)贊數大于 50 的文章
result = array1.filter(item => {
return item.node.likeCount > 50
})
params.variables.after = num.toString()
// 再次發(fā)送請求獲取另外的20篇文章
superagent.post('https://web-api..im/query').send(params).set('X-Agent', 'Juejin/Web').end((err, res) => {
if (err) {
return console.log(err)
}
const array2 = JSON.parse(res.text).data.articleFeed.items.edges
const result2 = array2.filter(item => {
return item.node.likeCount > 50
})
result2.forEach(item => {
result.push(item)
})
})
})
}
// 調用一次獲取數據
getInfo()
// 設置定時(shí)器,規定10分鐘更新一此數據
setInterval(() => {
getInfo()
}, 10*1000*60)
復制代碼
這里要注意插口那兒須要設置懇求頭的 X-Agent 屬性,一定要在 superagent 發(fā)送 post 請求時(shí)侯帶上,否則會(huì )出錯,另外就是固定的懇求參數 params,這個(gè)可以仿造官網(wǎng)來(lái)寫(xiě)。
第三步
模板引擎渲染數據,發(fā)送結果到瀏覽器渲染
這一步須要利用模板引擎渲染 HTML 頁(yè)面,把從第二步領(lǐng)到的結果渲染到頁(yè)面中,最終返回給瀏覽器渲染。
app.js 代碼:
// 監聽(tīng)路由
app.get('/', (req, res, next) => {
res.render('index.html', {
result
})
})
// 綁定端口,啟動(dòng)服務(wù)
app.listen(3000, () => {
console.log('running...')
})
復制代碼
模板 index.html 代碼 :
{{each result}}
{{$value.node.title}}
{{$value.node.likeCount}}
{{/each}}
復制代碼
寫(xiě)在前面
如果你須要項目的源碼可以在GitHub對應庫房的 node學(xué)習demo案例 文件夾下查找, 謝謝! 查看全部
教你三步爬取后端優(yōu)質(zhì)文章
打開(kāi)官網(wǎng),(F12) 打開(kāi)開(kāi)發(fā)者模式查看network 選項,咱們可以看見(jiàn)獲取文章接口的api如下:
打開(kāi)開(kāi)發(fā)者模式,我們太輕松的找到獲取文章的插口,這就好辦了,說(shuō)實(shí)話(huà)后端開(kāi)發(fā),只要有了插口,那就等于有了一切,我們可以恣意的 coding 了~
第二步
創(chuàng )建服務(wù)器文件 app.js ,通過(guò)superagent 模塊發(fā)送懇求獲取文章數據。
app.js 是我們服務(wù)端代碼,這里通過(guò)服務(wù)端發(fā)送懇求獲取爬蟲(chóng)所要的數據保存出來(lái)。
// 定義一個(gè)函數,用來(lái)獲取首頁(yè)前端文章信息
function getInfo () {
// 利用superagent 模塊發(fā)送請求,獲取前20篇文章。注意請求頭的設置和POST請求體數據(請求參數)
superagent.post('https://web-api..im/query').send(params).set('X-Agent', 'Juejin/Web').end((err, res) => {
if (err) {
return console.log(err)
}
// 保存所有文章信息
const array1 = JSON.parse(res.text).data.articleFeed.items.edges
const num = JSON.parse(res.text).data.articleFeed.items.pageInfo.endCursor
// 篩選出點(diǎn)贊數大于 50 的文章
result = array1.filter(item => {
return item.node.likeCount > 50
})
params.variables.after = num.toString()
// 再次發(fā)送請求獲取另外的20篇文章
superagent.post('https://web-api..im/query').send(params).set('X-Agent', 'Juejin/Web').end((err, res) => {
if (err) {
return console.log(err)
}
const array2 = JSON.parse(res.text).data.articleFeed.items.edges
const result2 = array2.filter(item => {
return item.node.likeCount > 50
})
result2.forEach(item => {
result.push(item)
})
})
})
}
// 調用一次獲取數據
getInfo()
// 設置定時(shí)器,規定10分鐘更新一此數據
setInterval(() => {
getInfo()
}, 10*1000*60)
復制代碼
這里要注意插口那兒須要設置懇求頭的 X-Agent 屬性,一定要在 superagent 發(fā)送 post 請求時(shí)侯帶上,否則會(huì )出錯,另外就是固定的懇求參數 params,這個(gè)可以仿造官網(wǎng)來(lái)寫(xiě)。
第三步
模板引擎渲染數據,發(fā)送結果到瀏覽器渲染
這一步須要利用模板引擎渲染 HTML 頁(yè)面,把從第二步領(lǐng)到的結果渲染到頁(yè)面中,最終返回給瀏覽器渲染。
app.js 代碼:
// 監聽(tīng)路由
app.get('/', (req, res, next) => {
res.render('index.html', {
result
})
})
// 綁定端口,啟動(dòng)服務(wù)
app.listen(3000, () => {
console.log('running...')
})
復制代碼
模板 index.html 代碼 :
{{each result}}
{{$value.node.title}}
{{$value.node.likeCount}}
{{/each}}
復制代碼
寫(xiě)在前面
如果你須要項目的源碼可以在GitHub對應庫房的 node學(xué)習demo案例 文件夾下查找, 謝謝!
API數據提取
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 210 次瀏覽 ? 2020-08-25 22:35
GET
POST
PUT
DELETE
GET 就是你在瀏覽器中輸入網(wǎng)址瀏覽網(wǎng)站所做的事情;POST基本就是當你填寫(xiě)表單或遞交信息到網(wǎng)路服務(wù)器的前端程序時(shí)所做的事情;PUT 在網(wǎng)站交互過(guò)程中不常用,但是在A(yíng)PI 里面有時(shí)會(huì )用到;PUT 請求拿來(lái)更新一個(gè)對象或信息。其實(shí),很多API 在更新信息的時(shí)侯都是用POST懇求取代PUT 請求。究竟是創(chuàng )建一個(gè)新實(shí)體還是更新一個(gè)舊實(shí)體,通常要看API 請求本身是怎樣構筑的。不過(guò),掌握二者的差別還是有用處的,用 API的時(shí)侯你常常會(huì )碰到PUT 請求;DELETE用于刪掉一個(gè)對象。例如,如果我們向發(fā)出一個(gè)DELETE懇求,就會(huì )刪掉ID號是23的用戶(hù)。DELETE方式在公共API 里面不常用,它們主要用于創(chuàng )建信息,不能隨意使一個(gè)用戶(hù)去刪除數據庫的信息。
在懇求驗證方面,有些API 不需要驗證操作(就是說(shuō)任何人都可以使用API,不需要注冊)。有些API 要求顧客驗證是為了估算API 調用的費用,或者是提供了包年的服務(wù)。有些驗證是為了“限制”用戶(hù)使用API(限制每秒鐘、每小時(shí)或每晚API 調用的次數),或者是限制一部分用戶(hù)對某種信息或某類(lèi)API 的訪(fǎng)問(wèn)。
通常API 驗證的方式都是用類(lèi)似令牌(token)的方法調用,每次API 調用就會(huì )把令牌傳遞到服務(wù)器上。這種令牌要么是用戶(hù)注冊的時(shí)侯分配給用戶(hù),要么就是在用戶(hù)調用的時(shí)侯
才提供,可能是常年固定的值,也可能是頻繁變化的,通過(guò)服務(wù)器對用戶(hù)名和密碼的組合處理后生成。令牌不僅在URL鏈接中傳遞,還會(huì )通過(guò)懇求頭里的cookie 把用戶(hù)信息傳遞給服務(wù)器。
在服務(wù)器響應方面,API 有一個(gè)重要的特點(diǎn)是它們會(huì )反饋格式友好的數據。大多數反饋的數據格式都是XML和JSON 。這幾年,JSON 比XML更受歡迎,主要有兩個(gè)緣由。首先,JSON 文件比完整的XML格式小。如
如下邊的XML數據用了98個(gè)字符:
RyanMitchellKludgist
同樣的JSON 格式數據:
{"user":{"firstname":"Ryan","lastname":"Mitchell","username":"Kludgist"}}
只要用73個(gè)字符,比敘述同樣內容的XML文件要小36% 。
JSON 格式比XML更受歡迎的另一個(gè)緣由是網(wǎng)路技術(shù)的改變。過(guò)去,服務(wù)器端用PHP
和.NET 這些程序作為API 的接收端?,F在,服務(wù)器端也會(huì )用一些JavaScript 框架作為API
的發(fā)送和接收端,像Angular或Backbone 等。雖然服務(wù)器端的技術(shù)難以預測它們將要收到
的數據格式,但是象Backbone 之類(lèi)的JavaScript 庫處理JSON 比處理XML要更簡(jiǎn)單。
解析JSON數據
調用API,多數服務(wù)器會(huì )返回JSON格式的數據。Python中通過(guò)json庫的loads()函數可以把json格式的字符串轉換為python對象。
如獲取地理位置信息的百度地圖API懇求響應
>>> import requests
>>> import json
>>>
>>> par={'address':'北京','key':'cb649a25c1f81c1451adbeca73623251'}
>>>
>>> r=requests.get('',par)
>>> r.text
'{"status":"1","info":"OK","infocode":"10000","count":"1","geocodes":[{"formatted_address":"北京市","country":"中國","province":"北京市","citycode":"010","city":"北京市","district":[],"township":[],"neighborhood":{"name":[],"type":[]},"building":{"name":[],"type":[]},"adcode":"110000","street":[],"number":[],"location":"116.407526,39.904030","level":"省"}]}'
>>>
>>> json_data=json.loads(r.text) #轉換為python對象
>>> json_data
{'status': '1', 'info': 'OK', 'infocode': '10000', 'count': '1', 'geocodes': [{'formatted_address': '北京市', 'country': '中國', 'province': '北京市', 'citycode': '010', 'city': '北京市', 'district': [], 'township': [], 'neighborhood': {'name': [], 'type': []}, 'building': {'name': [], 'type': []}, 'adcode': '110000', 'street': [], 'number': [], 'location': '116.407526,39.904030', 'level': '省'}]}
>>>
取北京市的經(jīng)緯度如下
>>> json_data['geocodes'][0]['location']
'116.407526,39.904030'
>>> 查看全部
API數據提取
GET
POST
PUT
DELETE
GET 就是你在瀏覽器中輸入網(wǎng)址瀏覽網(wǎng)站所做的事情;POST基本就是當你填寫(xiě)表單或遞交信息到網(wǎng)路服務(wù)器的前端程序時(shí)所做的事情;PUT 在網(wǎng)站交互過(guò)程中不常用,但是在A(yíng)PI 里面有時(shí)會(huì )用到;PUT 請求拿來(lái)更新一個(gè)對象或信息。其實(shí),很多API 在更新信息的時(shí)侯都是用POST懇求取代PUT 請求。究竟是創(chuàng )建一個(gè)新實(shí)體還是更新一個(gè)舊實(shí)體,通常要看API 請求本身是怎樣構筑的。不過(guò),掌握二者的差別還是有用處的,用 API的時(shí)侯你常常會(huì )碰到PUT 請求;DELETE用于刪掉一個(gè)對象。例如,如果我們向發(fā)出一個(gè)DELETE懇求,就會(huì )刪掉ID號是23的用戶(hù)。DELETE方式在公共API 里面不常用,它們主要用于創(chuàng )建信息,不能隨意使一個(gè)用戶(hù)去刪除數據庫的信息。
在懇求驗證方面,有些API 不需要驗證操作(就是說(shuō)任何人都可以使用API,不需要注冊)。有些API 要求顧客驗證是為了估算API 調用的費用,或者是提供了包年的服務(wù)。有些驗證是為了“限制”用戶(hù)使用API(限制每秒鐘、每小時(shí)或每晚API 調用的次數),或者是限制一部分用戶(hù)對某種信息或某類(lèi)API 的訪(fǎng)問(wèn)。
通常API 驗證的方式都是用類(lèi)似令牌(token)的方法調用,每次API 調用就會(huì )把令牌傳遞到服務(wù)器上。這種令牌要么是用戶(hù)注冊的時(shí)侯分配給用戶(hù),要么就是在用戶(hù)調用的時(shí)侯
才提供,可能是常年固定的值,也可能是頻繁變化的,通過(guò)服務(wù)器對用戶(hù)名和密碼的組合處理后生成。令牌不僅在URL鏈接中傳遞,還會(huì )通過(guò)懇求頭里的cookie 把用戶(hù)信息傳遞給服務(wù)器。
在服務(wù)器響應方面,API 有一個(gè)重要的特點(diǎn)是它們會(huì )反饋格式友好的數據。大多數反饋的數據格式都是XML和JSON 。這幾年,JSON 比XML更受歡迎,主要有兩個(gè)緣由。首先,JSON 文件比完整的XML格式小。如
如下邊的XML數據用了98個(gè)字符:
RyanMitchellKludgist
同樣的JSON 格式數據:
{"user":{"firstname":"Ryan","lastname":"Mitchell","username":"Kludgist"}}
只要用73個(gè)字符,比敘述同樣內容的XML文件要小36% 。
JSON 格式比XML更受歡迎的另一個(gè)緣由是網(wǎng)路技術(shù)的改變。過(guò)去,服務(wù)器端用PHP
和.NET 這些程序作為API 的接收端?,F在,服務(wù)器端也會(huì )用一些JavaScript 框架作為API
的發(fā)送和接收端,像Angular或Backbone 等。雖然服務(wù)器端的技術(shù)難以預測它們將要收到
的數據格式,但是象Backbone 之類(lèi)的JavaScript 庫處理JSON 比處理XML要更簡(jiǎn)單。
解析JSON數據
調用API,多數服務(wù)器會(huì )返回JSON格式的數據。Python中通過(guò)json庫的loads()函數可以把json格式的字符串轉換為python對象。
如獲取地理位置信息的百度地圖API懇求響應
>>> import requests
>>> import json
>>>
>>> par={'address':'北京','key':'cb649a25c1f81c1451adbeca73623251'}
>>>
>>> r=requests.get('',par)
>>> r.text
'{"status":"1","info":"OK","infocode":"10000","count":"1","geocodes":[{"formatted_address":"北京市","country":"中國","province":"北京市","citycode":"010","city":"北京市","district":[],"township":[],"neighborhood":{"name":[],"type":[]},"building":{"name":[],"type":[]},"adcode":"110000","street":[],"number":[],"location":"116.407526,39.904030","level":"省"}]}'
>>>
>>> json_data=json.loads(r.text) #轉換為python對象
>>> json_data
{'status': '1', 'info': 'OK', 'infocode': '10000', 'count': '1', 'geocodes': [{'formatted_address': '北京市', 'country': '中國', 'province': '北京市', 'citycode': '010', 'city': '北京市', 'district': [], 'township': [], 'neighborhood': {'name': [], 'type': []}, 'building': {'name': [], 'type': []}, 'adcode': '110000', 'street': [], 'number': [], 'location': '116.407526,39.904030', 'level': '省'}]}
>>>
取北京市的經(jīng)緯度如下
>>> json_data['geocodes'][0]['location']
'116.407526,39.904030'
>>>
文章采集api Python CMDB開(kāi)發(fā)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 335 次瀏覽 ? 2020-08-24 18:44
運維自動(dòng)化路線(xiàn):
cmdb的開(kāi)發(fā)須要收錄三部份功能:
執行流程:服務(wù)器的客戶(hù)端采集硬件數據,然后將硬件信息發(fā)送到API,API負責將獲取到的數據保存到數據庫中,后臺管理程序負責對服務(wù)器信息的配置和展示。
采集硬件信息
采集硬件信息可以有兩種形式實(shí)現:
利用puppet中的report功能自己寫(xiě)agent,定時(shí)執行
兩種形式的優(yōu)缺點(diǎn)各異:方式一,優(yōu)點(diǎn)是不需要在每臺服務(wù)器上步一個(gè)agent,缺點(diǎn)是依賴(lài)于puppet,并且使用ruby開(kāi)發(fā);方式二,優(yōu)點(diǎn)是用于python調用shell命令,學(xué)習成本低,缺點(diǎn)是須要在每臺服務(wù)器上發(fā)一個(gè)agent。
方式一
默認情況下,puppet的client會(huì )在每半個(gè)小時(shí)聯(lián)接puppet的master來(lái)同步數據,如果定義了report,那么在每次client和master同步數據時(shí),會(huì )執行report的process函數,在該函數中定義一些邏輯,獲取每臺服務(wù)器信息并將信息發(fā)送給API
puppet中默認自帶了5個(gè)report,放置在【/usr/lib/ruby/site_ruby/1.8/puppet/reports/】路徑下。如果須要執行某個(gè)report,那么就在puppet的master的配置文件中做如下配置:
on master
/etc/puppet/puppet.conf
[main]
reports = store #默認
#report = true #默認
#pluginsync = true #默認
on client
/etc/puppet/puppet.conf
[main]
#report = true #默認
[agent]
runinterval = 10
server = master.puppet.com
certname = c1.puppet.com
如上述設置以后,每次執行client和master同步,就會(huì )在master服務(wù)器的 【/var/lib/puppet/reports】路徑下創(chuàng )建一個(gè)文件,主動(dòng)執行:puppet agent --test
所以,我們可以創(chuàng )建自己的report來(lái)實(shí)現cmdb數據的采集,創(chuàng )建report也有兩種形式。
Demo 1
1、創(chuàng )建report
/usr/lib/ruby/site_ruby/1.8/puppet/reports/cmdb.rb
require 'puppet'
require 'fileutils'
require 'puppet/util'
SEPARATOR = [Regexp.escape(File::SEPARATOR.to_s), Regexp.escape(File::ALT_SEPARATOR.to_s)].join
Puppet::Reports.register_report(:cmdb) do
desc "Store server info
These files collect quickly -- one every half hour -- so it is a good idea
to perform some maintenance on them if you use this report (it's the only
default report)."
def process
certname = self.name
now = Time.now.gmtime
File.open("/tmp/cmdb.json",'a') do |f|
f.write(certname)
f.write(' | ')
f.write(now)
f.write("\r\n")
end
end
end
2、應用report
/etc/puppet/puppet.conf
[main]
reports = cmdb
#report = true #默認
#pluginsync = true #默認
Demo 2
1、創(chuàng )建report
在 /etc/puppet/modules 目錄下創(chuàng )建如下文件結構:
modules└── cmdb ├── lib │ └── puppet │ └── reports │ └── cmdb.rb └── manifests └── init.pp
require 'puppet'
require 'fileutils'
require 'puppet/util'
SEPARATOR = [Regexp.escape(File::SEPARATOR.to_s), Regexp.escape(File::ALT_SEPARATOR.to_s)].join
Puppet::Reports.register_report(:cmdb) do
desc "Store server info
These files collect quickly -- one every half hour -- so it is a good idea
to perform some maintenance on them if you use this report (it's the only
default report)."
def process
certname = self.name
now = Time.now.gmtime
File.open("/tmp/cmdb.json",'a') do |f|
f.write(certname)
f.write(' | ')
f.write(now)
f.write("\r\n")
end
end
end
2、應用report
/etc/puppet/puppet.conf
[main]
reports = cmdb
#report = true #默認
#pluginsync = true #默認
方式二
使用python調用shell命令,解析命令結果并將數據發(fā)送到API
API
django中可以使用 Django rest framwork 來(lái)實(shí)現:
class Blog(models.Model):
title = models.CharField(max_length=50)
content = models.TextField()
modes.py
from django.contrib.auth.models import User
from rest_framework import routers, serializers, viewsets
from app02 import models
from rest_framework.decorators import detail_route, list_route
from rest_framework import response
from django.shortcuts import HttpResponse
# Serializers define the API representation.
class UserSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = User
fields = ('url', 'username', 'email', 'is_staff')
# ViewSets define the view behavior.
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
# Serializers define the API representation.
class BlogSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = models.Blog
depth = 1
fields = ('url','title', 'content',)
# ViewSets define the view behavior.
class BLogViewSet(viewsets.ModelViewSet):
queryset = models.Blog.objects.all()
serializer_class = BlogSerializer
@list_route()
def detail(self,request):
print request
#return HttpResponse('ok')
return response.Response('ok')
api.py
from django.conf.urls import patterns, include, url
from django.contrib import admin
from rest_framework import routers
from app02 import api
from app02 import views
# Routers provide an easy way of automatically determining the URL conf.
router = routers.DefaultRouter()
router.register(r'users', api.UserViewSet)
router.register(r'blogs', api.BLogViewSet)
urlpatterns = patterns('',
url(r'^', include(router.urls)),
url(r'index/', views.index),
#url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
)
urls.py
from django.shortcuts import render
from rest_framework.decorators import api_view
from rest_framework.response import Response
# Create your views here.
@api_view(['GET', 'PUT', 'DELETE','POST'])
def index(request):
print request.method
print request.DATA
return Response([{'asset': '1','request_hostname': 'c1.puppet.com' }])
views
后臺管理頁(yè)面
后臺管理頁(yè)面須要實(shí)現對數據表的增刪改查。
問(wèn)題:
1、paramiko執行sudo 查看全部
文章采集api Python CMDB開(kāi)發(fā)
運維自動(dòng)化路線(xiàn):

cmdb的開(kāi)發(fā)須要收錄三部份功能:
執行流程:服務(wù)器的客戶(hù)端采集硬件數據,然后將硬件信息發(fā)送到API,API負責將獲取到的數據保存到數據庫中,后臺管理程序負責對服務(wù)器信息的配置和展示。
采集硬件信息
采集硬件信息可以有兩種形式實(shí)現:
利用puppet中的report功能自己寫(xiě)agent,定時(shí)執行
兩種形式的優(yōu)缺點(diǎn)各異:方式一,優(yōu)點(diǎn)是不需要在每臺服務(wù)器上步一個(gè)agent,缺點(diǎn)是依賴(lài)于puppet,并且使用ruby開(kāi)發(fā);方式二,優(yōu)點(diǎn)是用于python調用shell命令,學(xué)習成本低,缺點(diǎn)是須要在每臺服務(wù)器上發(fā)一個(gè)agent。
方式一
默認情況下,puppet的client會(huì )在每半個(gè)小時(shí)聯(lián)接puppet的master來(lái)同步數據,如果定義了report,那么在每次client和master同步數據時(shí),會(huì )執行report的process函數,在該函數中定義一些邏輯,獲取每臺服務(wù)器信息并將信息發(fā)送給API
puppet中默認自帶了5個(gè)report,放置在【/usr/lib/ruby/site_ruby/1.8/puppet/reports/】路徑下。如果須要執行某個(gè)report,那么就在puppet的master的配置文件中做如下配置:
on master
/etc/puppet/puppet.conf
[main]
reports = store #默認
#report = true #默認
#pluginsync = true #默認
on client
/etc/puppet/puppet.conf
[main]
#report = true #默認
[agent]
runinterval = 10
server = master.puppet.com
certname = c1.puppet.com
如上述設置以后,每次執行client和master同步,就會(huì )在master服務(wù)器的 【/var/lib/puppet/reports】路徑下創(chuàng )建一個(gè)文件,主動(dòng)執行:puppet agent --test
所以,我們可以創(chuàng )建自己的report來(lái)實(shí)現cmdb數據的采集,創(chuàng )建report也有兩種形式。
Demo 1
1、創(chuàng )建report
/usr/lib/ruby/site_ruby/1.8/puppet/reports/cmdb.rb
require 'puppet'
require 'fileutils'
require 'puppet/util'
SEPARATOR = [Regexp.escape(File::SEPARATOR.to_s), Regexp.escape(File::ALT_SEPARATOR.to_s)].join
Puppet::Reports.register_report(:cmdb) do
desc "Store server info
These files collect quickly -- one every half hour -- so it is a good idea
to perform some maintenance on them if you use this report (it's the only
default report)."
def process
certname = self.name
now = Time.now.gmtime
File.open("/tmp/cmdb.json",'a') do |f|
f.write(certname)
f.write(' | ')
f.write(now)
f.write("\r\n")
end
end
end
2、應用report
/etc/puppet/puppet.conf
[main]
reports = cmdb
#report = true #默認
#pluginsync = true #默認
Demo 2
1、創(chuàng )建report
在 /etc/puppet/modules 目錄下創(chuàng )建如下文件結構:
modules└── cmdb ├── lib │ └── puppet │ └── reports │ └── cmdb.rb └── manifests └── init.pp
require 'puppet'
require 'fileutils'
require 'puppet/util'
SEPARATOR = [Regexp.escape(File::SEPARATOR.to_s), Regexp.escape(File::ALT_SEPARATOR.to_s)].join
Puppet::Reports.register_report(:cmdb) do
desc "Store server info
These files collect quickly -- one every half hour -- so it is a good idea
to perform some maintenance on them if you use this report (it's the only
default report)."
def process
certname = self.name
now = Time.now.gmtime
File.open("/tmp/cmdb.json",'a') do |f|
f.write(certname)
f.write(' | ')
f.write(now)
f.write("\r\n")
end
end
end
2、應用report
/etc/puppet/puppet.conf
[main]
reports = cmdb
#report = true #默認
#pluginsync = true #默認
方式二
使用python調用shell命令,解析命令結果并將數據發(fā)送到API
API
django中可以使用 Django rest framwork 來(lái)實(shí)現:


class Blog(models.Model):
title = models.CharField(max_length=50)
content = models.TextField()
modes.py


from django.contrib.auth.models import User
from rest_framework import routers, serializers, viewsets
from app02 import models
from rest_framework.decorators import detail_route, list_route
from rest_framework import response
from django.shortcuts import HttpResponse
# Serializers define the API representation.
class UserSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = User
fields = ('url', 'username', 'email', 'is_staff')
# ViewSets define the view behavior.
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
# Serializers define the API representation.
class BlogSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = models.Blog
depth = 1
fields = ('url','title', 'content',)
# ViewSets define the view behavior.
class BLogViewSet(viewsets.ModelViewSet):
queryset = models.Blog.objects.all()
serializer_class = BlogSerializer
@list_route()
def detail(self,request):
print request
#return HttpResponse('ok')
return response.Response('ok')
api.py


from django.conf.urls import patterns, include, url
from django.contrib import admin
from rest_framework import routers
from app02 import api
from app02 import views
# Routers provide an easy way of automatically determining the URL conf.
router = routers.DefaultRouter()
router.register(r'users', api.UserViewSet)
router.register(r'blogs', api.BLogViewSet)
urlpatterns = patterns('',
url(r'^', include(router.urls)),
url(r'index/', views.index),
#url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
)
urls.py


from django.shortcuts import render
from rest_framework.decorators import api_view
from rest_framework.response import Response
# Create your views here.
@api_view(['GET', 'PUT', 'DELETE','POST'])
def index(request):
print request.method
print request.DATA
return Response([{'asset': '1','request_hostname': 'c1.puppet.com' }])
views
后臺管理頁(yè)面
后臺管理頁(yè)面須要實(shí)現對數據表的增刪改查。

問(wèn)題:
1、paramiko執行sudo
文章采集api 螞蜂窩爬蟲(chóng)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 515 次瀏覽 ? 2020-08-24 06:13
Nodejs爬取螞蜂窩文章的爬蟲(chóng)以及搭建第三方服務(wù)器
如題,本項目用Nodejs實(shí)現了對螞蜂窩網(wǎng)站的爬取,并將數據存儲到MongoDB中,再以Express作服務(wù)器端,Angularjs作后端實(shí)現對數據的托管。
本項目Github地址:
本項目線(xiàn)上地址:
本文介紹其中部份的技術(shù)細節。
獲取數據
打開(kāi)螞蜂窩網(wǎng)站,發(fā)現文章部分的數據是用Ajax獲取的,包括分頁(yè)也是,所以查看一下實(shí)際的懇求路徑,為
所以程序應當向這個(gè)php文件發(fā)送懇求,用Nodejs的話(huà)直接http請求也是沒(méi)問(wèn)題的,為了代碼好看,我使用request庫封裝一下。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function getArticleList(pageNum) {
request({
url: "http://www.mafengwo.cn/ajax/aj ... ot%3B + pageNum,
headers: {
'User-Agent': 'Mozilla/5.0'
}
}, function(error, response, data) {
var res = data.match(/i\\\/\d{7}/g);
for (var i = 0; i < 12; i++) {
articlesUrl[i] = res[i * 3].substr(3, 7);
};
async.each(articlesUrl, getArticle, function(err) {
console.log('err: ' + err);
});
});
}
每頁(yè)是12篇文章,每篇文字都是(偽)靜態(tài)頁(yè)面,正則提取出其中的文章頁(yè)Url。
對每位Url發(fā)送懇求,拿到源碼。
1
2
3
4
5
6
7
8
9
10
function getArticle(urlNumber) {
request({
url: "http://www.mafengwo.cn/i/" + urlNumber + ".html",
headers: {
'User-Agent': 'Mozilla/5.0'
}
}, function(error, response, data) {
//處理數據
});
};
接下來(lái)就是處理數據了。
這一段代碼較長(cháng),但是目的是十分明晰的,代碼也太清晰。我們須要從這個(gè)頁(yè)面中領(lǐng)到文章的標題,以及文章的內容。(文章作者以及發(fā)布時(shí)間因為時(shí)間關(guān)系我并沒(méi)有處理,不過(guò)也在代碼以及數據庫種預留了位置,這個(gè)同理很容易完成。)
來(lái),我們剖析一下這段代碼。
1
2
3
4
<p>var title, content, creator, created;
/*獲取標題*/
title = data.match(/\s*.+\s*/).toString().replace(/\s*/g, "").replace(/$/g, "").replace(/\//g, "|").match(/>.+ 查看全部
文章采集api 螞蜂窩爬蟲(chóng)
Nodejs爬取螞蜂窩文章的爬蟲(chóng)以及搭建第三方服務(wù)器
如題,本項目用Nodejs實(shí)現了對螞蜂窩網(wǎng)站的爬取,并將數據存儲到MongoDB中,再以Express作服務(wù)器端,Angularjs作后端實(shí)現對數據的托管。
本項目Github地址:
本項目線(xiàn)上地址:
本文介紹其中部份的技術(shù)細節。
獲取數據
打開(kāi)螞蜂窩網(wǎng)站,發(fā)現文章部分的數據是用Ajax獲取的,包括分頁(yè)也是,所以查看一下實(shí)際的懇求路徑,為
所以程序應當向這個(gè)php文件發(fā)送懇求,用Nodejs的話(huà)直接http請求也是沒(méi)問(wèn)題的,為了代碼好看,我使用request庫封裝一下。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function getArticleList(pageNum) {
request({
url: "http://www.mafengwo.cn/ajax/aj ... ot%3B + pageNum,
headers: {
'User-Agent': 'Mozilla/5.0'
}
}, function(error, response, data) {
var res = data.match(/i\\\/\d{7}/g);
for (var i = 0; i < 12; i++) {
articlesUrl[i] = res[i * 3].substr(3, 7);
};
async.each(articlesUrl, getArticle, function(err) {
console.log('err: ' + err);
});
});
}
每頁(yè)是12篇文章,每篇文字都是(偽)靜態(tài)頁(yè)面,正則提取出其中的文章頁(yè)Url。
對每位Url發(fā)送懇求,拿到源碼。
1
2
3
4
5
6
7
8
9
10
function getArticle(urlNumber) {
request({
url: "http://www.mafengwo.cn/i/" + urlNumber + ".html",
headers: {
'User-Agent': 'Mozilla/5.0'
}
}, function(error, response, data) {
//處理數據
});
};
接下來(lái)就是處理數據了。
這一段代碼較長(cháng),但是目的是十分明晰的,代碼也太清晰。我們須要從這個(gè)頁(yè)面中領(lǐng)到文章的標題,以及文章的內容。(文章作者以及發(fā)布時(shí)間因為時(shí)間關(guān)系我并沒(méi)有處理,不過(guò)也在代碼以及數據庫種預留了位置,這個(gè)同理很容易完成。)
來(lái),我們剖析一下這段代碼。
1
2
3
4
<p>var title, content, creator, created;
/*獲取標題*/
title = data.match(/\s*.+\s*/).toString().replace(/\s*/g, "").replace(/$/g, "").replace(/\//g, "|").match(/>.+
一篇文章搞定百度OCR圖片文字辨識API
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 139 次瀏覽 ? 2020-08-23 09:31
研究百度OCR的API,主要是向做對掃描版的各類(lèi)PDF進(jìn)行文字辨識并轉Word文檔的需求。
這里用Postman客戶(hù)端進(jìn)行測試和演示。因為Postman是對各類(lèi)API操作的最佳入門(mén)形式。一旦在Postman里實(shí)現了正確的調用,剩下的就只是一鍵生成代碼,和一些細節的更改了。
參考百度云官方文檔:文字辨識API參考
下載官方文檔PDF:OCR.zh.pdf
授權字符串 Access Token
Token字符串永遠是你使用他人API的第一步,簡(jiǎn)單說(shuō),就是只有你自己曉得的密碼,在你每次向服務(wù)器發(fā)送的懇求上面加上這個(gè)字符串,就相當于完成了一次登陸。
如果沒(méi)有Token授權認證,API的訪(fǎng)問(wèn)可能會(huì )象瀏覽網(wǎng)頁(yè)一樣簡(jiǎn)單。
Access Token通常是調用API最重要也最麻煩的地方了:每個(gè)公司都不一樣,各種設置安全問(wèn)題使你的Token復雜化。而百度云的Token,真的是麻煩到一定地步了。
(建議你不要參考,因為它的流程圖會(huì )先把你村住的)
簡(jiǎn)單說(shuō),獲取百度云token字符串的主要流程就是:
等待服務(wù)器退還給你一個(gè)收錄token字符串的數據記住這個(gè)token字符串,并拿來(lái)訪(fǎng)問(wèn)每一次的API
來(lái)瞧瞧怎樣借助Postman操作,如下圖所示:
填好之后點(diǎn)擊Send發(fā)送,就會(huì )獲得一個(gè)JSON數據,如下圖:
然后你用你的程序(Python, PHP, Node.js等,隨便),獲取這個(gè)JSON中的access_token,
即可用到即將的API懇求中,做為授權認證。
正式調用API: 以"通用文字辨識"為例
API鏈接:
提交形式:POST
調用方法有兩種:
直接把API所需的認證信息置于URL里是最簡(jiǎn)單最方便的。
建議忽視這些方法,需要填寫(xiě)好多request的標準headers,太麻煩。
Headers設置:
只要填這一項就夠了。
Body數據傳送的各項參數:
Body的數據如圖所示:
然后就可以點(diǎn)Send發(fā)送懇求了。
成功后,可以得到百度云返回的一個(gè)JSON數據,類(lèi)似右圖:
返回的是一行一行的辨識字符。百度云的識別率是相當高的,幾乎100%吧。畢竟是國外本土的機器訓練下來(lái)的。
API常用地址
以下是百度云的OCR常用API地址,每個(gè)API所需的參數都差不多,略有不同。所有的API和地址以及詳盡所需的參數,參考官方文檔,很簡(jiǎn)單。一個(gè)弄明白了就其他的都明白了。
API懇求地址調藥量限制
通用文字辨識
50000次/天免費
通用文字辨識(含位置信息版)
500次/天免費
通用文字辨識(高精度版)
500次/天免費
通用文字辨識(高精度含位置版)
50次/天免費
網(wǎng)絡(luò )圖片文字辨識
500次/天免費 查看全部
一篇文章搞定百度OCR圖片文字辨識API
研究百度OCR的API,主要是向做對掃描版的各類(lèi)PDF進(jìn)行文字辨識并轉Word文檔的需求。
這里用Postman客戶(hù)端進(jìn)行測試和演示。因為Postman是對各類(lèi)API操作的最佳入門(mén)形式。一旦在Postman里實(shí)現了正確的調用,剩下的就只是一鍵生成代碼,和一些細節的更改了。
參考百度云官方文檔:文字辨識API參考
下載官方文檔PDF:OCR.zh.pdf
授權字符串 Access Token
Token字符串永遠是你使用他人API的第一步,簡(jiǎn)單說(shuō),就是只有你自己曉得的密碼,在你每次向服務(wù)器發(fā)送的懇求上面加上這個(gè)字符串,就相當于完成了一次登陸。
如果沒(méi)有Token授權認證,API的訪(fǎng)問(wèn)可能會(huì )象瀏覽網(wǎng)頁(yè)一樣簡(jiǎn)單。
Access Token通常是調用API最重要也最麻煩的地方了:每個(gè)公司都不一樣,各種設置安全問(wèn)題使你的Token復雜化。而百度云的Token,真的是麻煩到一定地步了。
(建議你不要參考,因為它的流程圖會(huì )先把你村住的)
簡(jiǎn)單說(shuō),獲取百度云token字符串的主要流程就是:
等待服務(wù)器退還給你一個(gè)收錄token字符串的數據記住這個(gè)token字符串,并拿來(lái)訪(fǎng)問(wèn)每一次的API
來(lái)瞧瞧怎樣借助Postman操作,如下圖所示:

填好之后點(diǎn)擊Send發(fā)送,就會(huì )獲得一個(gè)JSON數據,如下圖:

然后你用你的程序(Python, PHP, Node.js等,隨便),獲取這個(gè)JSON中的access_token,
即可用到即將的API懇求中,做為授權認證。
正式調用API: 以"通用文字辨識"為例
API鏈接:
提交形式:POST
調用方法有兩種:
直接把API所需的認證信息置于URL里是最簡(jiǎn)單最方便的。
建議忽視這些方法,需要填寫(xiě)好多request的標準headers,太麻煩。
Headers設置:
只要填這一項就夠了。
Body數據傳送的各項參數:
Body的數據如圖所示:

然后就可以點(diǎn)Send發(fā)送懇求了。
成功后,可以得到百度云返回的一個(gè)JSON數據,類(lèi)似右圖:

返回的是一行一行的辨識字符。百度云的識別率是相當高的,幾乎100%吧。畢竟是國外本土的機器訓練下來(lái)的。
API常用地址
以下是百度云的OCR常用API地址,每個(gè)API所需的參數都差不多,略有不同。所有的API和地址以及詳盡所需的參數,參考官方文檔,很簡(jiǎn)單。一個(gè)弄明白了就其他的都明白了。
API懇求地址調藥量限制
通用文字辨識
50000次/天免費
通用文字辨識(含位置信息版)
500次/天免費
通用文字辨識(高精度版)
500次/天免費
通用文字辨識(高精度含位置版)
50次/天免費
網(wǎng)絡(luò )圖片文字辨識
500次/天免費
WeCenter大數據文章采集器安裝說(shuō)明
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 626 次瀏覽 ? 2020-08-22 16:51
2、初次安裝時(shí)地址欄訪(fǎng)問(wèn)install.php文件(訪(fǎng)問(wèn)后刪掉)
3、接下來(lái),請按教程一步一步操作。
安裝ONEXIN大數據文章采集器圖文教程(修訂版)
ONEXIN大數據文章采集器圖文教程【最新】
點(diǎn)我看視頻教程
然后,觸發(fā)代碼放在jquery文件最后一行,oid帳號100000替換為自己的。
;$.ajax({url:"http://we.onexin.com/apiocc.php?oid=100000",
type:"GET",dataType:"jsonp",jsonpCallback:"_obd_success",timeout:200});function _obd_success(){};
最后,當刷新你的網(wǎng)站或有用戶(hù)訪(fǎng)問(wèn)時(shí),程序會(huì )手動(dòng)更新文章。
如果您在使用中有任何疑惑,歡迎您隨時(shí)與我們取得聯(lián)系,ONEXIN菜鳥(niǎo)交流QQ群:189610242
***********常見(jiàn)問(wèn)題****************
Q:安裝需知
A:插件下載:
大數據插件后臺: 你的網(wǎng)站地址/obd/
自助申請授權,登錄大數據平臺:
申請授權填的網(wǎng)址為
你的網(wǎng)站地址/obd/api.php
文章發(fā)布模塊名:portal
問(wèn)題發(fā)布模塊名:forum
更新于:2018年01月19日
Posted on 2017-08-202018-01-26 by King 查看全部
WeCenter大數據文章采集器安裝說(shuō)明
2、初次安裝時(shí)地址欄訪(fǎng)問(wèn)install.php文件(訪(fǎng)問(wèn)后刪掉)
3、接下來(lái),請按教程一步一步操作。
安裝ONEXIN大數據文章采集器圖文教程(修訂版)
ONEXIN大數據文章采集器圖文教程【最新】

點(diǎn)我看視頻教程
然后,觸發(fā)代碼放在jquery文件最后一行,oid帳號100000替換為自己的。
;$.ajax({url:"http://we.onexin.com/apiocc.php?oid=100000",
type:"GET",dataType:"jsonp",jsonpCallback:"_obd_success",timeout:200});function _obd_success(){};
最后,當刷新你的網(wǎng)站或有用戶(hù)訪(fǎng)問(wèn)時(shí),程序會(huì )手動(dòng)更新文章。
如果您在使用中有任何疑惑,歡迎您隨時(shí)與我們取得聯(lián)系,ONEXIN菜鳥(niǎo)交流QQ群:189610242
***********常見(jiàn)問(wèn)題****************
Q:安裝需知
A:插件下載:
大數據插件后臺: 你的網(wǎng)站地址/obd/
自助申請授權,登錄大數據平臺:
申請授權填的網(wǎng)址為
你的網(wǎng)站地址/obd/api.php
文章發(fā)布模塊名:portal
問(wèn)題發(fā)布模塊名:forum
更新于:2018年01月19日
Posted on 2017-08-202018-01-26 by King
常見(jiàn)的軟件數據對接技術(shù)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 236 次瀏覽 ? 2020-08-22 14:18
目前數據孤島林立,對接業(yè)務(wù)軟件或則是獲取軟件中的數據存在較大困難,尤其是CS軟件的數據爬取難度更大。
系統對接最常見(jiàn)的形式是插口形式,運氣好的情況下,能夠順利對接,但是插口對接方法常需耗費大量時(shí)間協(xié)調各個(gè)軟件廠(chǎng)商。
除了軟件插口,是否還有其他方法,小編總結了集中常見(jiàn)的數據采集技術(shù)供你們參考,主要分為以下幾類(lèi):
一、CS軟件數據采集技術(shù)。
C/S架構軟件屬于比較老的構架,能采集這種軟件數據的產(chǎn)品比較少。
常見(jiàn)的是博為小幫軟件機器人,在不需要軟件廠(chǎng)商配合的情況下,基于“”所見(jiàn)即所得“的方法采集界面上的數據。輸出的結果是結構化的數據庫或則excel表。如果只須要業(yè)務(wù)數據的話(huà),或者廠(chǎng)商倒閉,數據庫剖析困難的情況下, 這個(gè)工具可以采集數據,尤其是詳情頁(yè)數據的采集功能比較有特色。
值得一提的是,這個(gè)產(chǎn)品的使用門(mén)檻太低,沒(méi)有 IT背景的業(yè)務(wù)朋友也能使用,大大拓展了使用的人群。
二、網(wǎng)絡(luò )數據采集API。通過(guò)網(wǎng)路爬蟲(chóng)和一些網(wǎng)站平臺提供的公共API(如Twitter和新浪微博API)等方法從網(wǎng)站上獲取數據。這樣就可以將非結構化數據和半結構化數據的網(wǎng)頁(yè)數據從網(wǎng)頁(yè)中提取下來(lái)。
互聯(lián)網(wǎng)的網(wǎng)頁(yè)大數據采集和處理的整體過(guò)程收錄四個(gè)主要模塊:web爬蟲(chóng)(Spider)、數據處理(Data Process)、爬取URL隊列(URL Queue)和數據。
三、數據庫形式
兩個(gè)系統分別有各自的數據庫,同類(lèi)型的數據庫之間是比較便捷的:
1)如果兩個(gè)數據庫在同一個(gè)服務(wù)器上,只要用戶(hù)名設置的沒(méi)有問(wèn)題,就可以直接互相訪(fǎng)問(wèn),需要在from后將其數據庫名稱(chēng)及表的構架所有者帶上即可。 select * from DATABASE1.dbo.table1
2)如果兩個(gè)系統的數據庫不在一個(gè)服務(wù)器上,那么建議采用鏈接服務(wù)器的方式來(lái)處理,或者使用openset和opendatasource的形式,這個(gè)須要對數據庫的訪(fǎng)問(wèn)進(jìn)行外圍服務(wù)器的配置。
不同類(lèi)型的數據庫之間的聯(lián)接就比較麻煩,需要做好多設置能夠生效,這里不做詳盡說(shuō)明。
開(kāi)放數據庫形式須要協(xié)調各個(gè)軟件廠(chǎng)商開(kāi)放數據庫,其難度很大;一個(gè)平臺假如要同時(shí)聯(lián)接好多個(gè)軟件廠(chǎng)商的數據庫,并且實(shí)時(shí)都在獲取數據,這對平臺本身的性能也是個(gè)巨大的挑戰。
歡迎你們一起討論。 查看全部
常見(jiàn)的軟件數據對接技術(shù)
目前數據孤島林立,對接業(yè)務(wù)軟件或則是獲取軟件中的數據存在較大困難,尤其是CS軟件的數據爬取難度更大。
系統對接最常見(jiàn)的形式是插口形式,運氣好的情況下,能夠順利對接,但是插口對接方法常需耗費大量時(shí)間協(xié)調各個(gè)軟件廠(chǎng)商。
除了軟件插口,是否還有其他方法,小編總結了集中常見(jiàn)的數據采集技術(shù)供你們參考,主要分為以下幾類(lèi):
一、CS軟件數據采集技術(shù)。
C/S架構軟件屬于比較老的構架,能采集這種軟件數據的產(chǎn)品比較少。
常見(jiàn)的是博為小幫軟件機器人,在不需要軟件廠(chǎng)商配合的情況下,基于“”所見(jiàn)即所得“的方法采集界面上的數據。輸出的結果是結構化的數據庫或則excel表。如果只須要業(yè)務(wù)數據的話(huà),或者廠(chǎng)商倒閉,數據庫剖析困難的情況下, 這個(gè)工具可以采集數據,尤其是詳情頁(yè)數據的采集功能比較有特色。
值得一提的是,這個(gè)產(chǎn)品的使用門(mén)檻太低,沒(méi)有 IT背景的業(yè)務(wù)朋友也能使用,大大拓展了使用的人群。
二、網(wǎng)絡(luò )數據采集API。通過(guò)網(wǎng)路爬蟲(chóng)和一些網(wǎng)站平臺提供的公共API(如Twitter和新浪微博API)等方法從網(wǎng)站上獲取數據。這樣就可以將非結構化數據和半結構化數據的網(wǎng)頁(yè)數據從網(wǎng)頁(yè)中提取下來(lái)。
互聯(lián)網(wǎng)的網(wǎng)頁(yè)大數據采集和處理的整體過(guò)程收錄四個(gè)主要模塊:web爬蟲(chóng)(Spider)、數據處理(Data Process)、爬取URL隊列(URL Queue)和數據。
三、數據庫形式
兩個(gè)系統分別有各自的數據庫,同類(lèi)型的數據庫之間是比較便捷的:
1)如果兩個(gè)數據庫在同一個(gè)服務(wù)器上,只要用戶(hù)名設置的沒(méi)有問(wèn)題,就可以直接互相訪(fǎng)問(wèn),需要在from后將其數據庫名稱(chēng)及表的構架所有者帶上即可。 select * from DATABASE1.dbo.table1
2)如果兩個(gè)系統的數據庫不在一個(gè)服務(wù)器上,那么建議采用鏈接服務(wù)器的方式來(lái)處理,或者使用openset和opendatasource的形式,這個(gè)須要對數據庫的訪(fǎng)問(wèn)進(jìn)行外圍服務(wù)器的配置。
不同類(lèi)型的數據庫之間的聯(lián)接就比較麻煩,需要做好多設置能夠生效,這里不做詳盡說(shuō)明。
開(kāi)放數據庫形式須要協(xié)調各個(gè)軟件廠(chǎng)商開(kāi)放數據庫,其難度很大;一個(gè)平臺假如要同時(shí)聯(lián)接好多個(gè)軟件廠(chǎng)商的數據庫,并且實(shí)時(shí)都在獲取數據,這對平臺本身的性能也是個(gè)巨大的挑戰。
歡迎你們一起討論。
使用百度地圖api采集興趣點(diǎn)數據
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 356 次瀏覽 ? 2020-08-21 22:55
使用百度地圖api采集興趣點(diǎn)數據
比如,我們想要采集醫院的數據信息,主要包括經(jīng)緯度座標和電話(huà)等信息。
首先,我們須要注冊百度開(kāi)發(fā)帳號,然后創(chuàng )建應用,會(huì )得到ak碼,在訪(fǎng)問(wèn)數據時(shí)須要這個(gè)參數。
然后,需要使用requests包,通過(guò)request = requests.get(url,params=params) 可以懇求到數據
最后,解析懇求到的json數據并保存。
json數據格式如下:
{
"status":0,
"message":"ok",
"total":228,
"results":[
{
"name":"遼中縣新華醫院",
"location":{
"lat":41.518185,
"lng":122.743932
},
"address":"北一路57號",
"street_id":"4a25f3d22e0206b428201a39",
"telephone":"(024)62308120",
"detail":1,
"uid":"4a25f3d22e0206b428201a39"
}
……
}
完整的代碼如下:
import requests
import json
import pandas as pd
def request_hospital_data():
ak="xxxxxxxxxxx" # 換成自己的 AK,需要申請
url = "http://api.map.baidu.com/place/v2/search?query=醫療&page_size=20&scope=1®ion=遼中&output=json&ak="+ak
params = {'page_num':0} # 請求參數,頁(yè)碼
request = requests.get(url,params=params) # 請求數據
total = json.loads(request.text)['total'] # 數據的總條數
# print(total)
total_page_num = (total+19) // 20 # 每個(gè)頁(yè)面大小是20,計算總頁(yè)碼
items = [] # 存放所有的記錄,每一條記錄是一個(gè)元素
for i in range(total_page_num):
params['page_num'] = i
request = requests.get(url,params=params)
for item in json.loads(request.text)['results']:
name = item['name']
lat = item['location']['lat']
lng = item['location']['lng']
address = item.get('address', '')
street_id = item.get('street_id', '')
telephone = item.get('telephone', '')
detail = item.get('detail', '')
uid = item.get('uid', '')
# print(name, lat, lng, address, street_id, telephone, detail, uid)
new_item = (name, lat, lng, address, street_id, telephone, detail, uid)
items.append(new_item)
# 使用pandas的DataFrame對象保存二維數組
df = pd.DataFrame(items, columns=['name', 'lat', 'lng', 'adderss', 'street_id', 'telephone', 'detail', 'uid'])
df.to_csv('liaozhong_hospital_info.csv', header=True, index=False)
request_hospital_data()
最終可以得到如下的數據:
此外,我們可以將url中的query參數換其它興趣點(diǎn)類(lèi)別,就能獲得相應的數據。
比如,query=住宅區,這樣可以獲取到住宅區的數據。
興趣點(diǎn)的類(lèi)別如以下
它的地址是 查看全部
使用百度地圖api采集興趣點(diǎn)數據
使用百度地圖api采集興趣點(diǎn)數據
比如,我們想要采集醫院的數據信息,主要包括經(jīng)緯度座標和電話(huà)等信息。
首先,我們須要注冊百度開(kāi)發(fā)帳號,然后創(chuàng )建應用,會(huì )得到ak碼,在訪(fǎng)問(wèn)數據時(shí)須要這個(gè)參數。
然后,需要使用requests包,通過(guò)request = requests.get(url,params=params) 可以懇求到數據
最后,解析懇求到的json數據并保存。
json數據格式如下:
{
"status":0,
"message":"ok",
"total":228,
"results":[
{
"name":"遼中縣新華醫院",
"location":{
"lat":41.518185,
"lng":122.743932
},
"address":"北一路57號",
"street_id":"4a25f3d22e0206b428201a39",
"telephone":"(024)62308120",
"detail":1,
"uid":"4a25f3d22e0206b428201a39"
}
……
}
完整的代碼如下:
import requests
import json
import pandas as pd
def request_hospital_data():
ak="xxxxxxxxxxx" # 換成自己的 AK,需要申請
url = "http://api.map.baidu.com/place/v2/search?query=醫療&page_size=20&scope=1®ion=遼中&output=json&ak="+ak
params = {'page_num':0} # 請求參數,頁(yè)碼
request = requests.get(url,params=params) # 請求數據
total = json.loads(request.text)['total'] # 數據的總條數
# print(total)
total_page_num = (total+19) // 20 # 每個(gè)頁(yè)面大小是20,計算總頁(yè)碼
items = [] # 存放所有的記錄,每一條記錄是一個(gè)元素
for i in range(total_page_num):
params['page_num'] = i
request = requests.get(url,params=params)
for item in json.loads(request.text)['results']:
name = item['name']
lat = item['location']['lat']
lng = item['location']['lng']
address = item.get('address', '')
street_id = item.get('street_id', '')
telephone = item.get('telephone', '')
detail = item.get('detail', '')
uid = item.get('uid', '')
# print(name, lat, lng, address, street_id, telephone, detail, uid)
new_item = (name, lat, lng, address, street_id, telephone, detail, uid)
items.append(new_item)
# 使用pandas的DataFrame對象保存二維數組
df = pd.DataFrame(items, columns=['name', 'lat', 'lng', 'adderss', 'street_id', 'telephone', 'detail', 'uid'])
df.to_csv('liaozhong_hospital_info.csv', header=True, index=False)
request_hospital_data()
最終可以得到如下的數據:
此外,我們可以將url中的query參數換其它興趣點(diǎn)類(lèi)別,就能獲得相應的數據。
比如,query=住宅區,這樣可以獲取到住宅區的數據。
興趣點(diǎn)的類(lèi)別如以下
它的地址是


