URL2io.com 提供简单,强大的网页信息提取服务。所有服务都以 RESTful API 接口的形式提供,用于 Web 内容的结构化处理。 其中 URL2Article 用来提取并解析网页中的正文区域,实现网页正文提取、标题提取、发布日期提取、下一页链接提取等。
每月所有服务提供的 RESTful API 接口调用超过6百万次。
以下的文档可以帮助你了解 RESTful API 的具体细节,也可以花 20 秒钟快速了解下如何开始使用。
# 也可以使用 SDK,支持全部API
# https://github.com/url2io/url2io-python-client
import requests
api_url = 'your api url' # URL2Article API地址,使用体验版或购买独享资源
# 体验版: http://url2api.applinzi.com/article
token = 'your token' # 开发者 token, 注册后可得,注意保密
url = 'http://...' # 要提取正文网页的网址
fields = ','.join(['next',]) # 可选字段
# HTTP Get
# -----------
query_string = {'token': token, 'url': url, 'fields': fields}
result = requests.get(api_url, params=query_string)
result.json()
# >>> {"content": "...", "date": null, "next": null, "title": "...", "url": "http://..."}
# HTTP Post
# -----------
html = "<html>\n<head>\n<title>hello</title>\n</head>\n<body>\n<p>hello world</p>\n</body>\n</html>" # 要提取网页的html源码
headers = { 'content-type': "text/html", }
result = requests.post(api_url, params=query_string, headers=headers, data=html)
result.json()
# >>> {"content": "...", "date": null, "next": null, "title": "...", "url": "http://..."}
api_url='your api url' # URL2Article API地址,使用体验版或购买独享资源
# 体验版: http://url2api.applinzi.com/article
url='http://...' # 要提取正文网页的网址
token='your token' # 开发者 token, 注册后可得,注意保密
fields = 'next' # 可选字段
# HTTP Get
# -----------
curl -G --data "token=$token&fields=$fileds" --data-urlencode "url=$url" $api_url
# >>> {"content": "...", "date": null, "next": null, "title": "...", "url": "http://..."}
# HTTP Post
# -----------
curl -X POST \
--data "token=$token&fields=$fileds" --data-urlencode "url=$url" $api_url
-H 'content-type: text/html' \
-d '<html>\n<head>\n<title>hello</title>\n</head>\n<body>\n<p>hello world</p>\n</body>\n</html>' # 要提取网页的html源码
# >>> {"content": "...", "date": null, "next": null, "title": "...", "url": "http://..."}
<?php
// 也可使用SDK(不支持HTTP POST)
// url2io-phpsdk - https://github.com/ety001/url2io
$api_url = 'your api url' // URL2Article API地址,使用体验版或购买独享资源
// 体验版: http://url2api.applinzi.com/article
$token = 'your_token'; // 开发者 token, 注册后可得
$url = 'http://'; // 要提取正文网页的网址
$fields = join(',', array('next', )); // 可选字段
// HTTP Get
// -----------
$request = new HttpRequest();
$request->setUrl($api_url);
$request->setMethod(HTTP_METH_GET);
$request->setQueryData(array('token' => $token, 'fields' => $fields, 'url' => $url));
$response = $request->send();
echo $response->getBody();
// >>> {"content": "...", "date": null, "next": null, "title": "...", "url": "http://..."}
// HTTP Post
// -----------
$request = new HttpRequest();
$request->setUrl($api_url)
$request->setMethod(HTTP_METH_POST);
$request->setQueryData(array( 'token' => $token, 'fields' => $fields, 'url' => $url ));
$request->setHeaders(array(
'content-type' => 'text/html'
));
// 要提取网页的html源码
$request->setBody('<html>\n<head>\n<title>hello</title>\n</head>\n<body>\n<p>hello world</p>\n</body>\n</html>');
$response = $request->send();
echo $response->getBody();
// >>> {"content": "...", "date": null, "next": null, "title": "...", "url": "http://..."}
require 'json'
require 'uri'
require 'net/http'
require 'cgi'
api_url = 'your api url' // URL2Article API地址,使用体验版或购买独享资源
// 体验版: http://url2api.applinzi.com/article
token = 'your_token' // 开发者 token, 注册后可得
url = CGI.escape('http://...') // 要提取正文网页的网址
fields = ['next',].join(',') // 可选字段
qs = "token=%s&url=%s&fields=%s" % [token, url, fields]
url = URI(api_url+'?'+qs)
// HTTP Get
// -----------
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts JSON.parse(response.read_body)
// => { "content"=>"...", "data"=>nil, "next"=>nil, "title"=>"...", "url"=>"http://..."}
// HTTP Post
// -----------
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Post.new(url)
request["content-type"] = 'text/html'
request.body = '<html>\n<head>\n<title>hello</title>\n</head>\n<body>\n<p>hello world</p>\n</body>\n</html>' # 要提取网页的html源码
response = http.request(request)
puts JSON.parse(response.read_body)
// => { "content"=>"...", "data"=>nil, "next"=>nil, "title"=>"...", "url"=>"http://..."}
# 在浏览器端使用会泄漏你的开发者 token,所以并不建议用这种方式
$.ajax({
'type': 'get',
'url': 'http://api.url2io.com/article',
'dataType': 'jsonp',
'data': {
'token': 'your_token', // 开发者 token, 注册后可得
'url': 'http://...', // 要提取正文网页的网址
'fields': 'next,text', // 可选字段
},
'success': function(data) {
console.info(data);
},
});
var request = require('request');
// HTTP Get
// -----------
request(
{ method: 'GET'
, uri: 'your api url'' // URL2Article API地址,使用体验版或购买独享资源
// 体验版: http://url2api.applinzi.com/article
, qs:
{ token: 'your_token' // 开发者 token, 注册后可得
, url: 'http://...' // 要提取正文网页的网址
, fields: ['next',].join(',') // 可选字段
}
}
, function(error, res, body) {
console.info(JSON.parse(body);
}
)
// >> {content: '...', date: null, next: null, title: '...', url: 'http://...'}
// HTTP Post
// -----------
request(
{ method: 'POST'
, uri: 'your api url'' // URL2Article API地址,使用体验版或购买独享资源
// 体验版: http://url2api.applinzi.com/article
, qs:
{ token: 'your_token' // 开发者 token, 注册后可得
, url: 'http://...' // 要提取正文网页的网址
, fields: ['next',].join(',') // 可选字段
}
, headers: { 'content-type': 'text/html' }
, body: '<html>\n<head>\n<title>hello</title>\n</head>\n<body>\n<p>hello world</p>\n</body>\n</html>' // 要提取网页的html源码
}
, function(error, res, body) {
console.info(JSON.parse(body);
}
)
// >> {content: '...', date: null, next: null, title: '...', url: 'http://...'}
package main
import (
"fmt"
"net/http"
"net/url"
"io/ioutil"
)
func main() {
api_url := "your api url" // URL2Article API地址,使用体验版或购买独享资源
// 体验版: http://url2api.applinzi.com/article
token := "your_token" // 开发者 token, 注册后可得
url_en := url.QueryEscape('http://...') // 要提取正文网页的网址
fields := "next" // 可选字段
qs := fmt.Sprintf("token=%s&url=%s&fields=%s", token, url_en, fields)
url_full := api_url+'?'+qs
// HTTP Get
// -----------
req, _ := http.NewRequest("GET", url_full, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
// => { "content"=>"...", "data"=>nil, "next"=>nil, "title"=>"...", "url"=>"http://..."}
// HTTP Post
// -----------
payload := strings.NewReader("<html>\n<head>\n<title>hello</title>\n</head>\n<body>\n<p>hello world</p>\n</body>\n</html>") // 要提取网页的html源码
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("content-type", "text/html")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
// => { "content"=>"...", "data"=>nil, "next"=>nil, "title"=>"...", "url"=>"http://..."}
}
要调用 URL2io API 只需要执行一个HTTP请求,支持通过URL2Article抓取网页并提取(通过 HTTP Get),支持提交网页html源码给URL2Article并提取(通过 HTTP Post)。 接口地址如下:
http://url2api.applinzi.com
体验版 Rest API 地址
查看体验版的限制和支持的特性, 详情.
URL2Article 用来提取并解析网页中的正文区域,实现网页正文提取、标题提取、发布日期提取、下一页链接提取等。该服务以 RESTful API 接口的形式提供,下面分 HTTP 请求和 HTTP 响应两个部分来介绍如何调用该服务。
GET /article
参数 | 位置 | 必传 | 描述 |
---|---|---|---|
token | query | 是 | 开发者 token,注册后可得 |
url | query | 是 | 要提取正文网页的网址,参考 URL Encoding |
fields | query | 可选 |
指示API需要返回的额外字段,取值为
next 表示需要提取下一页链接text 表示提取正文为纯文字格式markdown 表示提取正文为markdown格式 |
callback | query | 可选 | 使用jsonp请求所需要的参数,跨域Ajax必需 |
以下是一些调用 URL2Article API 的示例:各个语言中的使用请参考
请求纯文本格式的正文内容,并返回下一页链接
GET http://{{api_url}}/article?token=xxx&url=http%3A%2F%2Fwww.url2io.com%2Fdocs&fields=next,text
请求html格式的正文内容,不返回下一页链接
GET http://{{api_url}}/article?token=xxx&url=http%3A%2F%2Fwww.url2io.com%2Fdocs
响应分调用服务成功的响应和调用服务失败的响应两种
HTTP返回码: 200 successful Response
如果调用 URL2Article 服务成功,返回的数据将包含如下字段:
fields | 描述 |
---|---|
title |
网页正文的标题 |
content |
网页正文的html 格式 |
url |
要提取正文网页的网址 (已对请求时的 url 参数做解码处理) |
date |
文章的发布日期。ISO 8601格式,2014-01-01 01:01:01。如果没有则返回null |
可选字段 | 需要在Request的fields参数中指定,多个字段用","号隔开,如fields=text,next |
text |
网页正文的纯文字格式。在请求的fields 中指定text 时,返回此字段。 |
markdown |
网页正文的 markdown 格式。在请求的fields 中指定markdown 时,返回此字段。 |
next |
网页的下一页链接,若没有则返回null 。 |
支持的数据表现形式:
(application/json) representation as json. { "title": "URL2io API 文档", "content": "<section id="url2article"><div><h2><span></span> URL2Article API...", "next": null, "url": "http://www.url2io.com/docs", } (application/javascript) representation as jsonp. callback({ "title": "URL2io API 文档", "content": "<section id="url2article"><div><h2><span></span> URL2Article API...", "next": null, "url": "http://www.url2io.com/docs", });
HTTP返回码: > 200 failed Response
返回的数据将包含如下字段:
字段 | 描述 |
---|---|
error |
表示错误类型,如:HTTPError, URLError,... 具体见错误码列表 |
url |
要提取正文网页的网址 |
msg |
错误消息, 错误的具体信息 |
code |
HTTP states code (仅限于HTTPError) |
type |
此次请求的资源类型,MIME格式 (仅限于TypeError) |
如果调用服务失败一般有以下原因:
错误类型 | 出错原因 |
---|---|
PermissionError |
token认证错误;已超出使用配额 |
HTTPError |
抓取需要提取正文的网页时发生HTTP请求错误,如:404 Not Found |
URLError |
抓取需要提取正文的网页时发生网址错误,如:Name or service not known |
TypeError |
请求的资源不是html文档或xhtml文档,无法提取正文 |
UnknowError |
未知错误,很可能是服务器内部错误。具体看错误消息 |
支持的数据表现形式:
PermissionError { "error": u"PermissionError", "url": "http://api.url2io.com/xxx", "msg": u"invalid token or quota limit" } HTTPError { "error": "HTTPError", "url": "http://api.url2io.com/xxx", "msg": "cant't get this page", "code": 404, "type": "image/jpeg", } URLError { "error": "URLError", "url": "http://api.url2io-dsjkl.com", "msg": "Name or service not known", } TypeError { "error": "TypeError", "url": "https://raw.github.com/url2/url2-app-samples/master/README.md", "msg": "not html or xhtml resource", "type": "text/plain; charset=utf-8", } UnknowError { "error": "UnknowError", "url": "", "msg": "can't get this page", }
支持通过POST接口将网页html源码提交给URL2Article,并进行解析。请求参数与 HTTP Get 请求相同,需要额外在HTTP请求体中附加网页html源码,具体见以下示例: 各个语言中的使用请 参考
POST
/article
请求纯文本格式的正文内容,并返回下一页链接
POST http://{{api_url}}/article?token=xxx&url=http%3A%2F%2Fwww.url2io.com%2Fdocs&fields=next,text <html> <head> <title>hello</title> </head> <body> <p>hello world</p> </body> </html>
请求html格式的正文内容,不返回下一页链接
POST http://{{api_url}}/article?token=xxx&url=http%3A%2F%2Fwww.url2io.com%2Fdocs <html> <head> <title>hello</title> </head> <body> <p>hello world</p> </body> </html>
文本信息智能处理
URL2NLP 用来对文本信息进行智能处理,提供中文分词、词性标注、关键词提取等功能。
分词是大多数自然语言问题中最基本的步骤,而中文在书写时,词之间并不会通过分隔符来进行分割。 为了满足中文自然语言处理的需要,URL2NLP提供了一套分词系统,支持分词、去停用词、新词发现等功能。
POST /v1/nlp/word/cut
参数 | 类型 | 位置 | 必传 | 描述 |
---|---|---|---|---|
token |
String | query | 是 | 开发者 token,注册后可得 |
keep_stopwords |
Bool | query | 否 | 是否返回停用词,默认:返回 |
symbols |
Bool | query | 否 | 是否返回特殊字符,默认:返回 |
ditc |
Bool | query | 否 | 是否使用领域词典,默认:不使用 |
custom_dict |
Bool | query | 否 | 是否使用自定义词典,默认:不使用 |
with_flag |
Bool | query | 否 | 是否返回词性标注,默认:返回 |
hmm |
Bool | query | 否 | 是否使用新词发现,默认:使用 |
body |
String | body | 是 | 需要分词的文本 |
以下是一些调用中文分词接口的请求示例:
对文本进行分词,并返回词性标注
POST http://{{api_url}}/v1/nlp/word/cut?token=xxx&with_flag=true 需要进行分词的文本……
响应分调用服务成功的响应和调用服务失败的响应两种
HTTP返回码: 200 successful Response
如果调用服务成功,返回的数据将包含如下字段:
字段 | 类型 | 描述 |
---|---|---|
Array<NlpWordCutItemForResponse > |
分词对象列表 |
NlpWordCutItemForResponse |
|||
字段 | 类型 | 必选参数 | 描述 |
---|---|---|---|
word |
String | 是 | 词语。 |
flag |
String | 否 | 词性。 查看列表 |
flag_desc |
String | 否 | 词性描述, 如动词、名词等。 |
词性标注方法与ICTCLAS汉语词性标注集兼容。但URL2NLP的词性标注多达57种,比ICTCLAS的39种更多。 以下词性代码中有标注「*」的,表示是URL2NLP特有的词性标注,不在ICTCLAS的范围内。
(application/json)[ { "word": "word1", "flag": "n", "flag_desc": "名词" }, { "word": "word2", "flag": "v", "flag_desc": "动词" } ]
HTTP返回码: > 200 failed Response
如果调用服务失败,返回的数据将包含如下字段:
字段 | 描述 |
---|---|
error |
表示错误类型,如:HTTPError, URLError,... 具体见错误码列表 |
msg |
错误消息, 错误的具体信息 |
code |
HTTP states code (仅限于HTTPError) |
如果调用 URL2Article 服务失败一般有以下原因:
错误类型 | 出错原因 |
---|---|
PermissionError |
token认证错误;已超出使用配额 |
ParamsError |
参数错误 |
TypeError |
发送的文本数据格式有误 |
UnknowError |
未知错误,很可能是服务器内部错误。具体看错误消息 |
支持的数据表现形式:
PermissionError { "error": u"PermissionError", "url": "http://api.url2io.com/xxx", "msg": u"invalid token or quota limit" } TypeError { "error": "TypeError", "url": "https://raw.github.com/url2/url2-app-samples/master/README.md", "msg": "not html or xhtml resource", "type": "text/plain; charset=utf-8", } UnknowError { "error": "UnknowError", "url": "", "msg": "can't get this page", }
关键词提取引擎可以提取出文本中最有代表性的关键词,并给出对应的权重。
POST /v1/nlp/keywords
参数 | 类型 | 位置 | 必传 | 描述 |
---|---|---|---|---|
token |
String | query | 是 | 开发者 token,注册后可得 |
top_k |
Int | query | 否 | 返回关键词的个数,默认10,最大50。 |
with_weight |
Bool | query | 否 | 是否返回每个关键词的权重,默认:不返回。 |
allow_pos |
String | query | 否 | 允许的关键词词性列表,如只返回动词和名词可以表示为 v,n ,默认:允许全部词性。
查看支持词性
|
body |
String | body | 是 | 需要分词的文本 |
以下是一些请求示例:
提取权重最高的50个关键字
POST http://{{api_url}}/v1/nlp/keywords?token=xxx&top_k=50 需要进行提取关键字的文本……
响应分调用服务成功的响应和调用服务失败的响应两种
HTTP返回码: 200 successful Response
如果调用服务成功,返回的数据将包含如下字段:
字段 | 类型 | 描述 |
---|---|---|
Array<NlpExtractKeywordsItemForResponse > |
关键词对象列表 |
NlpExtractKeywordsItemForResponse |
|||
字段 | 类型 | 必选参数 | 描述 |
---|---|---|---|
word |
String | 是 | 关键词 |
weight |
Double | 否 | 权重 |
(application/json)[ { "word": "word1", "weight": 1.112 }, { "word": "word2", "weight": 0.9999 } ]
HTTP返回码: > 200 failed Response
如果调用服务失败,返回的数据将包含如下字段:
字段 | 描述 |
---|---|
error |
表示错误类型,如:HTTPError, URLError,... 具体见错误码列表 |
msg |
错误消息, 错误的具体信息 |
code |
HTTP states code (仅限于HTTPError) |
如果调用 URL2Article 服务失败一般有以下原因:
错误类型 | 出错原因 |
---|---|
PermissionError |
token认证错误;已超出使用配额 |
ParamsError |
参数错误 |
TypeError |
发送的文本数据格式有误 |
UnknowError |
未知错误,很可能是服务器内部错误。具体看错误消息 |
支持的数据表现形式:
PermissionError { "error": "PermissionError", "url": "http://api.url2io.com/xxx", "msg": "invalid token or quota limit" } TypeError { "error": "TypeError", "url": "https://raw.github.com/url2/url2-app-samples/master/README.md", "msg": "not html or xhtml resource", "type": "text/plain; charset=utf-8", } UnknowError { "error": "UnknowError", "url": "", "msg": "can't get this page", }
如果你写了一个使用我们 API 的 SDK, 请与我们联系, 我们会高兴地把它添加到这个页面. ^_^
... and many others!