鹰教程网页采集器
优采云 发布时间: 2020-08-08 18:31[模块和操作员]常见问题更新日志作者和捐赠列表主题: 案例: 发表文章: 故事: Web Collector
网络采集器的主界面
1. 快速使用说明
网页采集器模拟浏览器的设计,填写URL,单击刷新,即可获取对应地址的html源代码.
识别出网页是树(DOM)后,每个XPath都对应一个属性,您可以从网页中获取单个或多个文档. 网页采集器的目的是通过手动或自动配置更快地找到最佳的XPath.
1.1. 工作模式
要使用采集器,请首先根据爬网目标选择适当的工作模式:
注意:
1.2. 基本操作
在多文档模式下,通常单击右上角会感到幸运,在弹出结果下选择所需的数据,然后配置其名称和XPath. 单击确定以完成配置. 您可以自动获取大多数网页的目标内容.
[图像上传失败...(image-57cdac-30)]
您可以手动填写搜索字符,可以在网页上快速找到元素和XPath,还可以在多个结果之间快速切换. 找到所需的数据后,输入属性名称并手动添加属性.
1.3. 高级功能单击[Http请求详细信息],可以修改网页编码,代理,cookie和请求方法等,如果网页出现乱码,则可以自动登录或获取动态页面的真实地址(ajax),并填写搜索字符,单击[自动*敏*感*词*],在弹出的浏览器中转到相应的关键字,Hawk会自动捕获实际请求. 在超级模式下,Hawk会将源代码中的js,html和json转换为html,因此我感到很幸运,虽然更为通用,但性能却很差. 填写[共享源]. 该采集器将同步共享源的[Http请求详细信息],以避免重复设置cookie代理. 详细信息页面(单一文档模式)也可以是幸运的(Hawk3的新功能),搜索必填字段,无需添加到属性列表中,请单击“我很幸运”尝试!网页地址也可以是本地文件路径,例如D: \ target.html. 以其他方式保存网页后,通过Hawk来分析网页内容
我在单文档模式下很幸运
Web采集器不能单独工作,而是Web采集器和数据清理之间的桥梁. 本质上,网页采集器是专门为获取网页而定制的数据清理模块.
2. 高级配置介绍2.1. 列出根路径
列表的根路径是XPath所有属性的公共部分,它可以简化XPath的编写并提高兼容性. 只能在多文档模式下工作.
您可以通过Hawk自动分析根路径,也可以手动进行设置.
2.2. 自动协议列表路径
以一个例子来说明. 幸运后,嗅探器将找到列表节点的父节点,并在父节点上安装多个子节点以形成树结构
应为每个节点提取以下属性:
为了获得所有在父节点下的div子节点,列表的根路径为/ html / div [2] / div [3] / div [4] / div. 注意: 父节点路径的末尾没有序列号,因此可以获得多个子节点. 可以理解,列表的根路径是父节点的路径,没有结束编号.
有时,父节点的xpath不稳定. 例如,在北京和上海的二手房页面上,上海将在列表中添加广告横幅,以便真正的父节点会发生变化,例如向后. 将div [1]移至div [2]. 为了应对这一更改,通常的做法是手动修改[列表根路径]
2.3. 手动设置根路径
继续该示例,父节点的ID是house_list,并且在网页中是全局唯一的,您可以使用另一个父节点表示法/// * [@@ id ='house_list'] / li(用于编写,请参阅其他XPath教程),并且子节点表达式保持不变. 这将使程序更强大.
3. 抓取网页数据
网页采集器需要与数据清理一起使用,才能使用网页采集器获取网页数据. 拖动的列必须是超链接
3.1. 通用获取请求
在通常情况下,将转换从采集器拖到相应的URL列中,然后通过下拉菜单选择要调用的采集器的名称以完成所有配置:
请求配置
此模块是Web采集器和数据清理之间的桥梁. 本质上,网页采集器是专门为获取网页而定制的数据清理模块.
您需要填写采集器选择,并告诉它要调用哪个采集器. 注意:
3.2. 实施发布请求
在Web请求中,主要有两种请求类型: post和get. 使用POST可以支持更多数据的传输. 有关更多详细信息,您可以参考http协议的相关文档. 互联网上出汗很多,所以我在这里不再赘述.
在发出发布请求时,Hawk需要将两个参数传递给服务器: URL和发布. 一般来说,执行发布请求时,URL是稳定的,发布值是动态更改的.
首先,将被调用的网页采集器配置为发布模式(打开网页采集器,Http请求详细信息,模式->下拉菜单).
之后,您需要将转换从采集器拖到要调用的url列. 如果没有网址列,则可以添加新列以生成要访问的网址列.
之后,我们会将帖子数据传递给Web采集器. 您始终可以组合多个列或各种方法来生成要发布的数据列. 然后,您可以在从爬网程序转换的帖子数据中填写[帖子列],而帖子列是收录帖子数据的列的名称. 注意:
4. 我很幸运
这是Hawk最受好评的功能!在新的Hawk3中,此功能得到了大大增强.
4.1. 多份文件让我感到幸运
一般来说,输入URL加载页面后,只需单击“我很幸运”,Hawk就会根据优先级自动获取列表数据
我的配置很幸运
[图像上传失败...(image-9f6836-30)]
左右切换以选择所需的数据集,然后在下面的属性栏中微调结果.
添加一个属性,如果幸运的话,您可以更准确地进行操作. 添加两个属性以选择唯一区域.
4.2. 我在单文档模式下很幸运
Hawk3的新功能. 当网页收录数十个属性时,一一添加这些属性将变得特别麻烦. 这在某些产品属性页面中尤其常见.
为了解决此问题,请在搜索字符中添加关键字. 此时不要将它们添加到属性列表中,只需单击“我很幸运”.
我在单文档模式下很幸运
4.3. 手动模式
当您感到幸运,无法正常工作或不符合期望时,您需要手动指定一些关键字,让Hawk搜索这些关键字,然后获取网页上的位置(XPath).
填写搜索字符,您可以成功获取XPath,写入属性名称,然后单击“添加”以添加属性. 同样,填写30535并将属性名称设置为“单价”以添加另一个属性.
手动添加属性
在搜索字符的文本框中,输入要获取的关键字. 由于关键字可能在网页上多次出现,因此您可以继续搜索并在多个结果之间切换. 左侧的html源代码将突出显示搜索结果.
请注意观察搜索到的关键字在网页上的位置是否符合预期,否则可能会导致数据抓取问题. 特别是在多文档模式下. 如果需要在此页面上捕获多个数据,则可以创建多个网页采集器并分别进行配置. 如果发现错误,则可以单击“编辑集”以删除,修改和排序属性. 您可以类似地添加要获取的所有要素字段,或单击“我很幸运”,系统将基于当前属性推断其他属性. 5.动态嗅探5.1. 什么是动态页面?
动态瀑布流和Ajax页面,通常按需返回html和json.
旧网站刷新后将返回页面的全部内容,但是如果仅更新部分内容,则可以大大节省带宽. 此方法称为ajax,服务器将xml或json传输到浏览器,执行浏览器的js代码,并将数据呈现在页面上. 因此,获取数据的实际URL不一定显示在浏览器地址栏中,而是隐藏在js调用中. 本质上,javascript会发起一个新的隐藏的http请求以获取数据. 只要可以对其进行仿真,就可以像实际的浏览器一样获得所需的数据. 请参阅百度百科简介
5.2.Hawk自动获取动态请求
您可以通过浏览器和数据包捕获来获取这些隐藏的请求,但是您需要熟悉HTTP请求的原理,这不适合初学者.
Hawk简化了过程并采用了自动嗅探. Hawk成为后端代理,可拦截和分析所有系统级Http请求,并过滤出收录关键字的请求(基于提琴手)
在搜索字符时,如果在当前页面上找不到该关键字,Hawk将提示“您要启用动态嗅探吗?”. 此时,Hawk将弹出浏览器并打开您所在的网页. 您可以将页面拖动到收录关键字的位置,Hawk将自动记录并过滤收录该关键字的实际请求,并且在搜索完成后,Hawk将自动反弹.
5.3. 如果无法进行自动嗅探怎么办?
由于Hawk具有阻止功能,因此浏览器将其视为不安全的. 如何解决?
Hawk的基础嗅探基于Fiddler,因此可以通过Fiddler生成证书后将其导入chrome中来解决. 该方法可以参考此文档:
按如下所示设置采集器:
网页采集器请求设置
5.4. 注意有时,您可以将URL直接复制到Hawk,即使您很幸运,也可以获取数据. 这是因为许多网站对首页和其他页面的处理方式不同. 第一页的内容将与整个框架一起返回. 但是随后页面内容通过ajax分别返回.
有时候,第一页已经完成了许多XPath开发,但是最后发现它不能在其他页面上使用,主要是因为上面提到的问题(笨拙). 因此,根据经验,建议在请求之前转到其他页面.
超级模式可以将网页中的所有javascript,json,xml转换为HTML DOM树,以实现属性提取并感到幸运.
6. 超级模式
为了使动态网页能够添加属性并感到幸运,Hawk会在嗅探之后默认打开超级模式. 超级模式可以将网页中的所有javascript,json,xml转换为HTML DOM树,从而实现属性提取,让您感到幸运.
超级模式极大地简化了动态请求的处理,但是它可能仍然存在以下问题:
7. 自动登录
许多网站都需要登录才能访问其内部内容. 登录涉及非常复杂的逻辑,例如需要传递用户名和密码,验证码等,并且在多次请求之后,一系列过程(例如获取令牌,甚至编写代码)也需要编写整个页面并需要重复调试. 考虑到Hawk是通用数据采集器,因此其开发成本很高.
但是从本质上讲,登录只是一个cookie. 只要将cookie添加到后续请求中,远程服务器就无法区分它是浏览器还是采集器. 通常,传统的采集器软件具有内置的浏览器,并且用户在其中填写用户名和密码. 该软件在内部获取Cookie后发出请求. 但是Hawk不再打算使用内置浏览器. 该方法太重了,无法与Hawk的流系统兼容. 因此,Hawk不再自动登录!
我们采用了新的思路来解决此问题.
Hawk的自动登录和动态嗅探使用相同的技术. 本质上,系统代理在底部被替换. 您可以在登录页面上用搜索字符填写任何文本,然后单击嗅探. . 如果此方法不起作用,您还可以在浏览器中手动将请求参数复制到网页采集器.
有关其用法的更多详细信息,请参阅有关动态嗅探的章节.
8. 设置用于共享请求参数的采集器的名称
为了抓取网站的不同数据,我们需要多个Web采集器. 但是,访问该网站需要登录名和Cookie. 每个采集器是否有必要设置相应的请求参数?
在采集器的属性对话框中,可以设置共享源,即要共享的网页采集器的名称.
例如,如果将其设置为Lianjia采集器,则该采集器的请求参数将在执行期间从Lianjia采集器动态获取. 这大大简化了配置过程.
帮助自动弹出按钮
9. 附录: XPath和CSS编写9.1. XPath
有关XPath语法,请参阅教程
XPath可以非常灵活,例如:
9.2.CSSSelector
在大多数情况下,使用XPath可以解决问题,但是CSSSelector更简洁,更可靠. 有关其介绍,请参阅教程
当然,大多数情况并不需要那么复杂,只需记住以下几点:
10. 幸运的原则
网页采集器的功能是获取网页中的数据(无意义). 一般来说,目标可以是列表(例如购物车列表),也可以是页面中的固定字段(例如JD中某种产品的价格和介绍,页面上只有一个). 因此,需要设置读取模式. 传统的采集器需要编写正则表达式,但是方法太复杂了.
如果您意识到html是一棵树,则只需找到承载数据的节点,然后使用XPath对其进行描述.
我很幸运
手动编写XPath也非常复杂,因此该软件可以通过关键字自动检索XPath并提供关键字,并且该软件将在树中递归搜索收录数据的叶节点. 因此,关键字在页面上应该唯一.
如上图所示,只要提供关键字“ Beijing”和“ 42”,就可以找到父节点,然后获得两个列表元素div [0]和div [1]. 通过比较div [0]和div [1]的两个节点,我们可以自动发现相同的子节点(名称,装载)和不同的节点(北京: 上海,37:42). 同一节点将被保存为属性名称,而不同节点将为属性值. 但是,不能提供北京和37. 此时,公共节点是div [0],它不是列表.
该软件还可以使用html文档的特征来计算最有可能成为列表父节点的节点(图中的父节点),而无需提供关键字,但是当网页特别复杂时,猜想可能是错误的.