zoukankan      html  css  js  c++  java
  • web scraper

    参考:https://sspai.com/u/skychx/updates

    https://www.jianshu.com/p/76cad8e963b5

    :nth-of-type(-n+100) 

    元素名后加个 nth-of-type(-n+100),暂时只抓取前 100 条数据。

    :nth-of-type(-n+N) 控制加载数量时,其实相当于在这个网页设立一个计数器,当数据一直累加到我们想要的数量时,就会停止抓取。

    通过 Element Click 点击分页器翻页,只适用于网页没有刷新的情况,但是对于使用翻页器的网页,每次的翻页相当于刷新当前网页,这样每次都会设立一个计数器。https://sspai.com/post/57638

    比如说你想抓取 1000 条数据,但是第 1 页网页只有 20 条数据,抓到最后一条了,还差 980 条;然后一翻页,又设立一个新的计数器,抓完第 2 页的最后一条数据,还差 980,一翻页计数器就重置,又变成 1000 了......所以这个控制数量的方法就失效了。

    所以结论就是,如果翻页器类型的网页想提前结束抓取,只有断网的这种方法。

     

    创建详情页子选择器

    当你点击链接后就会发现,浏览器会在一个新的 Tab 页打开详情页,但是 Web Scraper 的选择窗口开在列表页,无法跨页面选择想要的数据。

    处理这个问题也很简单,你可以复制详情页的链接,拷贝到列表页所在的 Tab 页里,然后回车重新加载,这样就可以在当前页面选择了。

    抓取前我们要把等待时间调整得大一些,默认时间是 2000 ms,我这里改成了 5000 ms。

    P 键,就可以匹配到标题的父标签

    S:Select,按下键盘的 S 键,选择选中的元素

    P:Parent,按下键盘的 P 键,选择选中元素的父节点

    C:Child,按下键盘的 C 键,选择选中元素的子节点

    Click type

    点击类型,click more 表示点击多次,因为我们要抓取批量数据,这里就选择 click more,还有一个 click once 选项,点击一次

    2.Click element uniqueness

    这个选项是控制 Web Scraper 什么时候停止抓取数据的。比如说 Unique Text,表示文字改变时停止抓取数据。

    我们都知道,一个网站的数据不可能是无穷无尽的,总有加载完的时候,这时候「加载更多」按钮文字可能就变成「没有更多」、「没有更多数据」、「加载完了」等文字,当文字变动时,Web scraper 就会知道没有更多数据了,会自动停止抓取数据。

    3.Multiple

    这个我们的老朋友了,表示是否多选,这里我们要抓取多条数据,当然要打勾。

    4.Discard initial elements

    是否丢弃初始元素,这个主要是去除一些网站的重复数据用的,不是很重要,我们这里也用不到,直接选择 Never discard,从不丢弃数据。

    5.Delay

    延迟时间,因为点击加载更多后,数据加载需要一段时间,delay 就是等待数据加载的时间。一般我们设置要大于等于 2000,因为延迟 2s 是一个比较合理的数据,如果网络不好,我们可以设置更大的数字。

    container注意把 Type 类型改为 Element(元素),因为在 Web Scraper 里,只有元素类型才能包含多个内容。

    因为我们是在 container 内选择文字的,一个 container 内只有一个电影名,所以多选不要勾选,要不然会抓取失败。

    【也就是说在选择容器的时候,要勾选multiple,意味着爬取所有的容器,但是后面的节点只是取每一个节点里面的一个,所以不能勾选多选】

     Web Scraper 对中文关键字索引的支持不太友好,所以会抛出一些诡异的 bug,因此我并不建议大家用它的 Table 功能。

    如果真的想抓取表格数据,我们可以用之前的方案,先创建一个类型为 Element 的 container,然后在 container 里再手动创建子选择器,这样就可以规避这个问题。

     要借助 Link 选择器来辅助我们翻页,Parent Selectors ——父选择器。next_page 这次要有两个父节点——_root 和 next_page,键盘按 shift 再鼠标点选就可以多选了,保存 next_page 选择器后,在它的同级下再创建 container 节点,用来抓取电影数据

    翻页选择器节点 next_page 和数据选择器节点 container 是同一级,两个节点的父节点都是两个:_root 和 next_page:,这样解决了翻页的时候页面重新刷新的问题相当于递归的思想了

    风雨兼程,前程可待!
  • 相关阅读:
    angularjs 做不到实时脏值查询
    移动端遮罩层,放在页面最上面,并且不能滚动
    angularjs 与 UEditor开发,添加directive,保证加载顺序正常
    ajaxfileupload.js上传文件兼容IE7及以上版本
    IE9及以下版本获取上传文件的大小
    java 中的 i++ 和 ++i
    java foreach实现原理
    怎样将未分配的磁盘空间,合并到指定盘符上面
    电脑将系统之间调整为最大时间之后,重新启动电脑,屏幕一直狂闪
    变量
  • 原文地址:https://www.cnblogs.com/xingnie/p/14676459.html
Copyright © 2011-2022 走看看