前嗅网络发表于2022年1月19日11:56最后回复于2022年1月19日11:56
【从零学爬虫】采集GET请求和POST请求中的数据
453浏览量
0评论
在使用ForeSpider采集数据时,我们有时会遇到使用定位过滤、地址过滤、定位取值等采集不出来的情况。这种情况一般是由于数据在其他的请求中导致的。
网站请求一般分为两种,分别是GET请求和POST请求,本教程将分别介绍两种请求的配置采集方法。在开始配置之前需要先掌握,如何精准找到数据所在的请求,并判断请求类型。
我们以东方财富网页面中图表数据为例进行演示。
1. 打开需要采集页面,点击F12,打开Network界面,然后刷新网页,发现多了很多请求。
2. 需要采集表格中的数据,复制任意一个数据值,在搜索框进行搜索,就会把数据所在的请求筛选出来。
3. 双击链接即可找到对应请求返回的内容,可查看是否包含所有表格中的数据。
4.打开该请求的请求头,观察是哪种请求,如下图所示,表示该数据在get请求中。
GET请求和POST请求最直观的区别就是:
GET把参数包含在URL中,POST通过request body传递参数。
l 采集GET请求中的数据
【原理】
找到GET请求链接规律,然后用脚本拼写请求链接,打开请求获取请求中所需要的链接/数据。
【脚本讲解】
采集微博热搜某热搜数据页
1. 查找数据所在请求
2. 拼请求并打开请求
var link=URL.urlname.ReplaceAll("#","%23");//拼写为请求网址
var doc = EXTRACT.OpenDoc(CHANN,link,"",);//打开请求
if(doc){
}
EXTRACT.CloseDoc(doc);//关闭请求,固定搭配
3. 观察请求内数据位置并用脚本提取出所需要的数据
根据数据结构,用脚本抽取数据并返回,数据抽取全部脚本如下所示:
var link=URL.urlname.ReplaceAll("#","%23");
var doc = EXTRACT.OpenDoc(CHANN,link,"",);
if(doc){
var a=doc.GetDom();
var b = a.FindClass("m-note");
var c=b.next.child;
while(c){
var d=a.FindClass("card",div,c);
record re;
re.id = c.mid; re.pubname= a.GetTextAll(d.child.child.next.child.child.next.child); re.pubtime = a.GetTextAll(d.child.child.next.child.next.child); re.text = a.GetTextAll(d.child.child.next.child.next.next); re.transmit=a.GetTextAll(d.child.next.child.child.child); re.comment_=a.GetTextAll(d.child.next.child.child.next.child); re.click=a.GetTextAll(d.child.next.child.child.next.next.child.child); RESULT.AddRec(re,this.schemaid);
c=c.next;
}
}
EXTRACT.CloseDoc(doc);
微博热搜完整教程:
完整视频教程:
l 采集POST请求中的数据
【原理】
找到POST请求链接规律,然后用脚本拼写请求链接及request body传递参数,打开请求获取请求中所需要的链接/数据。
【脚本讲解】
采集百度翻译数据页
1.找到数据所在请求
观察数据请求链接方法同上,找到请求查看header,发现该请求为post请求。
在request head中找到Cookie、refer,在request body中找到FormData,如下图所示:
观察发现,不同的翻译请求链接,cookie和refer不变,FormData中的query内容变化,而且query参数即为需要翻译的英文文本。
2.用脚本拼出这个post请求并打开请求
脚本文本:
var table = DATADB.Open("news"); //打开数据表newsvar recs = table.Query(""); //查询条件为空
for(k in recs each v)//调用每个数据{
record re;//定义一个返回值,返回数据固定搭配
var transid = v.id;//调用news中的id
var trans = v.content;//调用news中的content
var con=trans;//待翻译的文字
var link="https://fanyi.baidu.com/transapi";//link为请求链接
var header;//定义一个请求头
var header;
header.cookie = "";////定义请求头的cookie,与网页上的cookie一致 header.refer = "";//定义请求头的refer,与网页上的refer一致 var post="from=en&to=zh&query="+con+"&source=txt";//定义post,将FormData拼出来 var doc = EXTRACT.OpenDoc(CHANN,link,post,header);//打开post请求
if(doc){
EXTRACT.CloseDoc(doc);//关闭请求,固定搭配
}
}
3.观察数据所在位置,并用脚本提取数据
打开这个请求的preview预览界面,观察翻译后的数据位置,
根据数据所在位置,编写脚本提取数据并返回。
脚本文本:
var table = DATADB.Open("news"); //打开数据表newsvar recs = table.Query(""); //查询条件为空
for(k in recs each v)//调用每个数据{
record re;//定义一个返回值,返回数据固定搭配
var transid = v.id;//调用news中的id
var trans = v.content;//调用news中的content
var con=trans;//待翻译的文字 var link="https://fanyi.baidu.com/transapi";//link为请求链接
var header;//定义一个请求头
header.cookie = "";////定义请求头的cookie,与网页上的cookie一致 header.refer = "";//定义请求头的refer,与网页上的refer一致 var post="from=en&to=zh&query="+con+"&source=txt";//定义post,将FormData拼出来 var doc = EXTRACT.OpenDoc(CHANN,link,post,header);//打开post请求
if(doc){
var str = doc.GetDom().GetSource().ToStr();//打开请求后,将获取请求源码并转为字符串格式
JScript js;//定义一个js
var obj = js.RunJson(str);//跑一下js
var a="";//定义一个变量a
for(i=0;i<obj.data.length;i++){
var search=obj.data[i].dst;//取obj中的data中的第i个对象的dst值 var ttt=search.ReplaceAll("u","\\u");//将search文本中的u用\\u替换 ttt=ttt.ToStr();//转为字符串 var trans_con=doc.GetDom().UnEscape(ttt);//unicode转中文 a+=trans_con;//a为a+trans_con
}
re.id=transid;//返回id
re.trans_con=a;//返回翻译后内容
RESULT.AddRec(re,this.schemaid);//返回一个数据
EXTRACT.CloseDoc(doc);//关闭请求,固定搭配
}
百度翻译完整教程:
l知识点总结
1.OpenDoc
【方法】OpenDoc(item,addr_or_keyForm,postData="",header=0)
【说明】用当前采集节点打开一个文档(必须与CloseDoc成对使用)
【参数说明】
item:一个采集器的频道节点[channel],频道脚本用this,其它地方用CHANN
addr_or_keyForm:打开地址或者class="vartypestd">keyForm对象
postData:post数据(如果为Post)[keyForm对象时,postData参数忽略]
header:写入http协议头数据[该参数为一个对象{refer:"指定refer地址",cookie:"cookie数据"},对象全部可用成员见下方]
2.CloseDoc
【方法】CloseDoc(doc)
【说明】关闭打开的采集文档
【参数说明】doc表示打开的文档
3.OpenDoc方法的参数header对象的全部可用成员
*本教程仅供教学使用,严禁用于商业用途!
l 前嗅简介
前嗅大数据,国内领先的研发型大数据专家,多年来致力于为大数据技术的研究与开发,自主研发了一整套从数据采集、分析、处理、管理到应用、营销的大数据产品。前嗅致力于打造国内第一家深度大数据平台!
- ·ForeSpider入门教程 26353
- ·ForeSpider数据采集系统功能说明 17180
- ·软件用途 16600
- ·软件功能 16448
- ·ForeSpider数据采集特点 15684
- ·创建表单的视频教程 15602
- ·采集策略相关概念 15448
- ·频道相关概念 15211
- ·表单相关概念 14844
- ·免费代理IP网址大全 14195
评论区
+ 写评论