当前位置:文档之家› [P语言] 普乐P语言入门及示例

[P语言] 普乐P语言入门及示例

[P语言] 普乐P语言入门及示例
[P语言] 普乐P语言入门及示例

[P语言] 普乐P语言入门及示例

如果把网页源代码想象成是妈妈织的毛衣,那么p语言就是钩针。只要我们懂一些语法代码或编程基础,那么就可以使用p语言。如其他编程语言一样,P语言也要遵循语言格式,否则写错了就获取不到结果。所以童鞋们学习p语言需要有点小耐心哦。:)

p语言所获取的代码,如在正文代码条目中的p语言代码片段,保存后,经过正文代码过滤(过滤网页代码),经过过滤规则区,输出为最终结果。所以需要注意数据处理的顺序。

补充:普乐软件2354升级了并简化了采集规则p语言处理,可以对任意上一步获取内容进行p语言处理,返回值统一用$m_return表示,详情请见第六个示例,以前的用法仍然有效,

举个简单的例子,格式如下

1.void main(void)

2.{

3.int tem; // 定义tem为整数型

4.cstr tep; //定义tep为字符型

5.tem = 10; //tem 赋值 10

6.tep = $m_url; //tep 赋值为当前网页的网址

7.$m_ncontent = tep + tem; // 获取正文为网址+10

8.}

复制代码

注意,因为$m_ncontent 是全局变量“文章内容”,所以这段代码一般应该写在规则编辑器--正文代码里面,如果写到其他地方“作者、类型、头像、自定义”会干预到正文的最终结果;

同理,如果写成下面这样,一般则表示获取获取地址,包括:下一页地址,下一正文页地址,登录地址,退出地址,注册地址,对应规则编辑器--地址关键词里面。

1.void main(void)

2.{

3.int tem;

4.cstr tep;

5.tem = 10;

6.tep = $m_url;

7.$m_pageurl = tep + tem;

8.}

复制代码

以上2个例子,可以了解p语言的格式和适用范围,每句命令最后必须要有分号,目前暂不支持在同时混用规则代码和p命令,比如在下一页地址里面设置如下代码是错误的:

1.>下一页< //规则解释器命令,以下是p语言片段

2.void main(void)

3.{

4.int tem;

5.tem = 10;

6.$m_pageurl = tem;

7.}

复制代码

p语言,简单说就是用相关的命令,来对源代码进行深加工,理论上可以做任何关于网页的处理。

继续简单讲解一下,

1.这边列出p语言的部分全局变量(只读):

2.$m_user: 要登录/注册的用户名

3.$m_password: 要登录/注册的密码

4.$m_url: 正在处理的网页地址

5.$m_html: 正在处理的网页内容

6.$m_webtitle: 正在处理的网页title

7.$m_ref: 转入链接

8.$m_region: 采集网页的有效区域

9.$m_cunit: 采集网页的单元区域

10.$m_nlayer: 获取的文章楼层数

复制代码

如果在正文里面使用p语言,可以引用其他全局变量区域(除了正文区域,因为会自循环),比如

1.tep = htmltext($m_region); //表示给 tep 这个变量赋值有效区域所有显示文字

2.tep = strreplace(tep, "点击查看联系方式", gethtml(url)); //表示替换tep里面,点击查看联系方式,

为gethtml(url)所代表的字符

复制代码

可以看出p语言很灵活,支持无限赋值,子函数嵌套,if判断,while, >, <, ==, !=,&&, ||等,上面gethtml(url),表示获取url这个网址网页里面的内容,当然如果对应网页普乐软件无法识别,还需要自编规则。注意:目前仅gethtml(不支持嵌套子函数)。注意,\ ' " 这3个字符需要用反斜杠\ 转义后,才能表示原来的字符(单引号可以不转)。

================================================================== 以下整理p语言应用范例:

1.

1.https://www.doczj.com/doc/147514452.html,/skincare/2011-04-28/L0003002001_842231_1.html

复制代码

这个网页文章最后一页,会转到另外的文章,造成无法正常采集单篇多页的一个主题。

可以在制作的正文“采集规则--正文下一页关键词代码”中用p语言来判断获取下一页地址,避免跳转到其他文章。代码如下

1.void main(void)

2.{

3.cstr nex; //定义字符变量nex

4.nex = strbetween($m_html,"class=\"lh25\"> 

代码中获取下一页地址赋值给 nex

5.if(strlen(nex) >= strlen($m_url)) //判断nex 字符长度大于等于当前网页网址

的长度(因为跳转后的网址没有分页,字符长度少一点,注意if后面的判断右括号后面不带分号)

6.{

7.$m_pageurl = nex; // 下一页网址等于nex

8.}

9.}

复制代码

2.

1.https://www.doczj.com/doc/147514452.html,/systematic/JAVA/13244.html

复制代码

,点击下载地址,会跳转到另外一个页面,这个页面包含真正的下载地址,这个时候也可以用到p语言,这段p 语言代码是放在“采集规则--自定义代码”条目中的

1.void main(void)

2.{

3.cstr url, html; //定义字符型变量 url html

4.url = geturlblock($m_html, ">下载地址1<", 0); // url 赋值为获取当前网页内容中 >下载地址1< 所

在的第一个网址

5.if(strlen(url) == 0) //增加判断,如果 url获取不到也就是字符长度为 0

6.{

7.url = geturlblock($m_html, ">本地下载1<", 0); // url 赋值为获取当前网页内容中 >本地下载1< 所

在的第一个网址

8.}

9.html = gethtml(url); // html 赋值为获取网址url 对应的网页所有文字

10.$m_return = geturlblock(html, ">网站高速本地下载<", 0); // 自定义值赋值为获取 html中 >网站

高速本地下载< 所在的第一个网址

11.}

复制代码

3.针对需要对文章进行格式化操作,如

1.https://www.doczj.com/doc/147514452.html,/thread-112-1-1.html

复制代码

这个帖子

这边提供思路如下,其他整合操作,还需要在循环内用命令替换删除,请先设定好有效区域,这段p语言放在“采集规则--正文代码条目”中

1.void main(void)

2.{

3.cstr img1,cont1;

4.int num1;

5.

6.img1=htmlimg1($m_region,"

可以设置整个网页范围,运算将稍微复杂点

7.num1 = strfind($m_region,img1); //在有效区域定位第一个图片地址

8.img1=""; //ubb代码格式化img1,这样图片才会被下载

9.cont1=strbetween($m_region,"下载地址","

",0,1); //获取有效区域下载地址

10.

11.

12.while (strfind($m_region,htmlimg1($m_region,"num1) //在第一图片地址 160个

字符后(需要自己测试寻找最好的间隔数值),寻找第二图片地址,并且当后一个图片地址大于前一个图片地址,如

果寻找不到第二图片地址,即值为空,循环结束

13.{

14.img1 = img1 +""; //img1 字段循环格式化增量赋值

15.num1=strfind($m_region,htmlimg1($m_region,"

址便于循环

16.//msgbox(num1); 这句利用2个反斜杠作为注释,msgbox可以在确定保存当前条目后弹框显示

测试值,测试num1的数值,其他变量也可以这样测试

17.}

18.$m_ncontent=img1+cont1; //合并图片和下载地址

19.}

复制代码

4. https://www.doczj.com/doc/147514452.html,/job/2009-12/307837.htm, 这个网页有一部分隐藏内容需要点击后才能看全,是post提交方式的,同样也可以用p语言来搞定

1.void main(void)

2.{

3.cstr url,aaa;

4.

5.aaa=strbetween($m_url,"/job/","htm",0,1); //获取要发送的表单,需要用抓包工具查看提交哪些东西

6.

7.//msgbox(aaa); 查看aaa是否为提交值

8.

9.fmuclear(); //清空 post区

10.fmuadd("htmlpath", aaa); //传递aaa给提交表单的 htmlpath

11.url = posthtml("https://www.doczj.com/doc/147514452.html,/read.aspx", $m_url,1); //发送表单,返回网页内容赋值给 url,具

体用法参考软件内p语言说明

12.

13.//print(url); 测试是否获取到代码字符

14.url = htmlstandard(url); //网页标准化代码字符

15.

16.url = htmlblock1(url,"id=\"Content\"",0); //获取内容

17.$m_ncontent = url;

18.

19.}

复制代码

5.发布子规则,如果要做图片和附件本地化,需要获取图片、附件的具体地址,这个地址在上传图片、附件结束后会有个返回值,通过p语言来抓取。

以下填入发布子规则“图片返回”,请按具体返回数据调整代码

1.void main(void)

2.{

3.int start;

4.

5.start = strfind($m_rethtml, "callFunction("); //查找返回代码是否包含地址信息

6.if(start < 0) //如果不包含地址信息

7.return;

8.$m_return = strbetween($m_rethtml, ", '", "'", start, 0); //抓取返回图片、附件具体地址

9.}

复制代码

6.对于获取到的内容换行比较多,不少用户追求完美,我们可以用如下p语言配合正则来处理多余的换行符号如果已经制作了采集规则,在采集规则--正文--正则过滤--p语言处理填入以下代码

1.void main(void)

2.{

3.

4.$m_return=regexrep($m_ncontent,"(\\s{2,})","

5."); // $m_return 表示返回给普乐软件规则解释器数值,这边写在正文里面,就是表示返回正文的数值,regexrep

为正则,将2个以上的换行符,替换成1个换行

6.//msgbox($m_ncontent); 显示效果

7.}

复制代码

如果是在采集方案p2处理,可以放在发布前p处理,填入以下代码

1.void main(void)

2.{

3.

4.$m_ncontent=regexrep($m_ncontent,"([\\s]{2,})","

5."); // regexrep为正则,处理所有即将发布的内容,将2个以上的换行符,替换成1个换行,正则中\s表示空

字符,因为\在p语言里面要转义,所以需要多加一个\

6.}

复制代码

简介:

普乐站群营销管理系统是一款所见即所得全自动更新建站的站群管理系统,其整站关联抓取,

自动定向跟踪更新,自定义采集源,网站栏目智能获取,全自动分词翻译伪原创,仿采集破解,千万行业语料库,原创文章精准生成,多语言站群自适应等领先技术优势,让企业站长SEO营销不再困难.

网站:https://www.doczj.com/doc/147514452.html,

交流QQ群:191224690 24452893

相关主题
文本预览
相关文档
最新文档