网页抓取工具火车采集器发布模块制作示例

其他技术 站长 浏览 评论

何为WEB发布模块?即在使用火车采集器V9​时将用户手动在网站后台发布内容的整个过程包含登录网站后台,选择栏目,以及发布文章等步骤写入火车采集器V9,由火车采集器来模拟,实现自动发布的功能,这就是WEB发布模块。然后规则采集到的值就通过标签名传递给在线发布模块,把数据提交到网站里去。这里以dedecms的文章发布为例做讲解,下面为操作示例:

一、点击web发布配置——新建模块

1.png

上图中的菜单分别为:

网站自动登录:设置网站登录信息的数据

获取栏目列表:设置发布的栏目列表
网页随机获取:设置post数据内的随机值
内容发布参数:设置发布页面POST数据包
高级功能:文件上传设置以及数据构造

二、“WEB发布设置界面”和 “内容发布参数” 设置

我们在发布页面填写好需要发布的字段值(先不要点击发布),然后打开fiddler(注意,如果有较乱的数据流,请先Ctrl+X 清空数据流)

如图,填写标题、来源、选择栏目、内容 :

2.png

Ctrl+X 清空数据流后的fiddler:

3.png

此时点击发布,分析fiddler里的数据包,将fiddler点击 ①➯ ② ,依次点击数据流列表⑤ 找到POST类型的数据流⑥,

然后点击⑦ 以文本的形式查看

4.png

数据包贴出如下:

1 POST http://127.0.0.1:801/dede/dede/article_add.php HTTP/1.1
1 Host: 127.0.0.1:801
1 Connection: keep-alive
1 Content-Length: 3571
1 Cache-Control: max-age=0
1 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
1 Origin: http://127.0.0.1:801
1
2
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 
(KHTML, like Gecko) Chrome/43.0.2357.124 Safari/537.36
1 Content-Type: multipart/form-data; boundary=----WebKitFormBoundary6EWX666GAXOVqWCE
1 Referer: http://127.0.0.1:801/dede/dede/article_add.php?channelid=1&cid=0
1 Accept-Encoding: gzip, deflate
1 Accept-Language: zh-CN,zh;q=0.8
1
2
3
4
Cookie: menuitems=1_1%2C2_1%2C3_1; PHPSESSID=f21a42f70199c81955f3219623343735; 
DedeUserID=1; DedeUserID__ckMd5=91a12e3e1eae3a4d; DedeLoginTime=1444806848;
 DedeLoginTime__ckMd5=65d5fa4845a7ec00; 
 ENV_GOBACK_URL=%2Fdede%2Fdede%2Fcontent_list.php%3Fchannelid%3D1
1 ------WebKitFormBoundary6EWX666GAXOVqWCE
1 Content-Disposition: form-data; name="channelid"
1 1
1 ------WebKitFormBoundary6EWX666GAXOVqWCE
1 Content-Disposition: form-data; name="dopost"
1 save
1 ------WebKitFormBoundary6EWX666GAXOVqWCE
1 Content-Disposition: form-data; name="title"
1 11111
1 ------WebKitFormBoundary6EWX666GAXOVqWCE
1 Content-Disposition: form-data; name="shorttitle"
1 ------WebKitFormBoundary6EWX666GAXOVqWCE
1 Content-Disposition: form-data; name="redirecturl"
1 ------WebKitFormBoundary6EWX666GAXOVqWCE
1 Content-Disposition: form-data; name="tags"
1 ------WebKitFormBoundary6EWX666GAXOVqWCE
1 Content-Disposition: form-data; name="weight"
1 99
1 ------WebKitFormBoundary6EWX666GAXOVqWCE
1 Content-Disposition: form-data; name="picname"
1 ------WebKitFormBoundary6EWX666GAXOVqWCE
1 Content-Disposition: form-data; name="litpic"; filename=""
1 Content-Type: application/octet-stream
1 ------WebKitFormBoundary6EWX666GAXOVqWCE
1 Content-Disposition: form-data; name="source"
1 22222
1 ------WebKitFormBoundary6EWX666GAXOVqWCE
1 Content-Disposition: form-data; name="writer"
1 ------WebKitFormBoundary6EWX666GAXOVqWCE
1 Content-Disposition: form-data; name="typeid"
1 2
1 ------WebKitFormBoundary6EWX666GAXOVqWCE
1 Content-Disposition: form-data; name="typeid2"
1 ------WebKitFormBoundary6EWX666GAXOVqWCE
1 Content-Disposition: form-data; name="keywords"
1 ------WebKitFormBoundary6EWX666GAXOVqWCE
1 Content-Disposition: form-data; name="autokey"
1 1
1 ------WebKitFormBoundary6EWX666GAXOVqWCE
1 Content-Disposition: form-data; name="description"
1 ------WebKitFormBoundary6EWX666GAXOVqWCE
1 Content-Disposition: form-data; name="dede_addonfields"
1 ------WebKitFormBoundary6EWX666GAXOVqWCE
1 Content-Disposition: form-data; name="remote"
1 1
1 ------WebKitFormBoundary6EWX666GAXOVqWCE
1 Content-Disposition: form-data; name="autolitpic"
1 1
1 ------WebKitFormBoundary6EWX666GAXOVqWCE
1 Content-Disposition: form-data; name="needwatermark"
1 1
1 ------WebKitFormBoundary6EWX666GAXOVqWCE
1 Content-Disposition: form-data; name="sptype"
1 hand
1 ------WebKitFormBoundary6EWX666GAXOVqWCE
1 Content-Disposition: form-data; name="spsize"
1 5
1 ------WebKitFormBoundary6EWX666GAXOVqWCE
1 Content-Disposition: form-data; name="body"
1 222222222222222
1 ------WebKitFormBoundary6EWX666GAXOVqWCE
1 Content-Disposition: form-data; name="voteid"
1 ------WebKitFormBoundary6EWX666GAXOVqWCE
1 Content-Disposition: form-data; name="notpost"
1  
1 ------WebKitFormBoundary6EWX666GAXOVqWCE
1 Content-Disposition: form-data; name="click"
1 137
1 ------WebKitFormBoundary6EWX666GAXOVqWCE
1 Content-Disposition: form-data; name="sortup"
1  
1 ------WebKitFormBoundary6EWX666GAXOVqWCE
1 Content-Disposition: form-data; name="color"
1 ------WebKitFormBoundary6EWX666GAXOVqWCE
1 Content-Disposition: form-data; name="arcrank"
1  
1 ------WebKitFormBoundary6EWX666GAXOVqWCE
1 Content-Disposition: form-data; name="money"
1  
1 ------WebKitFormBoundary6EWX666GAXOVqWCE
1 Content-Disposition: form-data; name="pubdate"
1 2015-10-14 15:16:06
1 ------WebKitFormBoundary6EWX666GAXOVqWCE
1 Content-Disposition: form-data; name="ishtml"
1 1
1 ------WebKitFormBoundary6EWX666GAXOVqWCE
1 Content-Disposition: form-data; name="filename"
1 ------WebKitFormBoundary6EWX666GAXOVqWCE
1 Content-Disposition: form-data; name="templet"
1 ------WebKitFormBoundary6EWX666GAXOVqWCE
1 Content-Disposition: form-data; name="imageField.x"
1 37
1 ------WebKitFormBoundary6EWX666GAXOVqWCE
1 Content-Disposition: form-data; name="imageField.y"
1 18
1 ------WebKitFormBoundary6EWX666GAXOVqWCE--

三、设置WEB发布配置界面

根据上面的数据包得出: 网站编码是:utf-8 (可以在您的网站右击查看源代码,查找charset字段值,具体看编码)
网站地址是: http://127.0.0.1:801/dede (网站地址可以根据POST 和Referer字段自定义,一般我们用网站域名做网站地址,

也可以找其他的2个设置的共同部分做网站地址。 )
cookie是:menuitems=1_1%2C2_1%2C3_1; PHPSESSID=f21a42f70199c81955f3219623343735; DedeUserID=1; DedeUserID__ckMd5=91a12e3e1eae3a4d; DedeLoginTime=1444806848; DedeLoginTime__ckMd5=65d5fa4845a7ec00; ENV_GOBACK_URL=%2Fdede%2Fdede%2Fcontent_list.php%3Fchannelid%3D1

user-agent是: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.124 Safari/537.36

5.png

四、设置 “内容发布参数”

 

如下图

6.png

然后我们把发布POST数据里的值替换成标签。双击选中表单值,然后鼠标悬停在标签按钮上,对应选择要替换成的标签名即可,

可选系统标签,常用标签,时间标签。如下图替换的效果:

7.png

标题,来源,内容,时间 很方便确认识别。

在这里给大家讲解下“[分类ID]” 系统标签。

此标签是用于接下来我们的获取栏目列表设置做铺垫的。

那么如何确定 哪个表单名 就是 [分类ID]呢?

可以按如下图的方法,就很简单的知道,typeid 就是我们要找的 [分类ID],给对应替换即可。

8.png

五、确定“获取栏目列表” 设置

首先要确定我们的选择栏目列表是在哪个页面?一般有两种情况:

A.最常见的一种,栏目选择就是在发布内容页面里,类似我们演示的DEDE文章发布。B.特殊的情况,在其它页面下,不在发布内容页面。

在这里我们讲解A种情况,把“内容发布参数” 下的来源页面后缀的设置,拿过来直接使用即可。放入到“获取栏目列表”

下的发表地址后缀,和来源页面后缀中。然后再查看发布页面的源代码,找到刷新列表部分的源码,

确定栏目列表的开始和结束代码,以及格式。

9.png

ID 用[分类ID]替换
栏目名称用 [分类名称]替换
不规则出现的代码 用 (*)通配符匹配


设置如图:

 

11.png
可以发布,说明我们的 “内容发布参数” 设置没问题。
现在我们保存发布模块,大概测试下发布效果,可以刷新列表,说明“获取栏目列表”的设置没有问题。

12.png

六、完善模块

成功,失败标识码:

可以看到在网站发布正常的内容,和发布失败的内容(比如不填写标题,不选择栏目)看看分别的提示,

然后写入模块设置,多个提示一行一个。

高级功能:

13.png

可以看到我们此模块有个 LITPIC 表单名字段,这是我们在“内容发布参数” 的黏贴POST数据时,自动提取的设置。

在这里,我们可以自定义修改标签名,如设置为缩略图。

文件上传设置里的标签,文件上传不需要设置FTP,只要下载到本地就可以实现自动上传操作。

14.png

网站自动登录:

之前我们做的发布是在登录方式为内置浏览器的原理基础上获取cookie和User-agent 来做发布的。

我们也可以用数据包登录的方式来设置。其设置原理和“内容发布参数”是一样的,

用fiddler工具抓取登录后台那一瞬间的POST数据包。

1 POST http://127.0.0.1:801/dede/dede/login.php HTTP/1.1
1 Host: 127.0.0.1:801
1 Connection: keep-alive
1 Content-Length: 112
1 Cache-Control: max-age=0
1 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
1 Origin: http://127.0.0.1:801
1
2
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 
(KHTML, like Gecko) Chrome/43.0.2357.124 Safari/537.36
1 Content-Type: application/x-www-form-urlencoded
1 Referer: http://127.0.0.1:801/dede/dede/login.php?gotopage=%2Fdede%2Fdede%2Findex.php
1 Accept-Encoding: gzip, deflate
1 Accept-Language: zh-CN,zh;q=0.8
1
2
Cookie: menuitems=1_1%2C2_1%2C3_1; PHPSESSID=f21a42f70199c81955f3219623343735;
 ENV_GOBACK_URL=%2Fdede%2Fdede%2Fcontent_list.php%3Fchannelid%3D1
1 gotopage=%2Fdede%2Fdede%2Findex.php&dopost=login&adminstyle=newdedecms&userid=admin&pwd=admin&validate=lcmt&sm1=

设置如下:

15.png

测试效果:

16.png

到这里就基本ok了,这样模块用内置浏览器登录或数据包登录都可以支持,一个完整的发布模块就完成了。

转载请注明:网页阁吧 » 网页抓取工具火车采集器发布模块制作示例