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