软件在发布后,收到了各方朋友的反馈和提问。此处统一对一部分问题作出回复。

感谢你使用Hawk,软件是我写的,坑是我挖的。做爬虫本来就比较复杂,一些公司有专门的程序员做爬虫工程师。因此如果你很沮丧,很有可能是网站做了不少策略,确实很难爬。哎,这也是没有办法的事情。
闲话不说,进入正题。

1.自动嗅探失败

网页采集器具备自动嗅探功能,本质上是替换掉了底层的代理。因此,所有的请求都通过Hawk内部,自然就能根据需求筛选出所需的请求。

但有些系统中安装了类似360等工具,会拒绝这类操作。导致嗅探失败。目前原因还没有找到。一些网站做了加密,因此即使输入检索字段,内容也不一定能检索得到。

即使嗅探失败也没有关系,如果你使用Chrome等浏览器,进入开发者工具(F12):

选择最上角的network卷展栏,之后刷新网页,chrome会列出所有的请求,一般最上面的就是真实请求:

点击view source,将所有文本,拷贝到网页采集器,对应的高级设置-请求参数里即可。其实,Hawk做的也是类似的操作。

2.被封锁问题

被封锁有几个原因:

2.1 被网站识别为非浏览器

出现这种情况的原因是请求参数为空,没有模拟为浏览器(user-agent),如大众点评只防此类爬虫。

最新改进的版本中,Hawk默认请求参数已经加入了user-agent,因此能解决掉一大部分初级问题。

2.2 频繁访问

这取决于网站如何认定是同一个使用者。

  • 有的网站认为同一台机器的不同浏览器也是不同的用户。
  • 有的网站认为只要IP相同,则使用者一定相同

对前一种情况,可以随机在一大批User-agent列表中挑选一条,模拟为不同的浏览器,就能大大降低被PB的概率。典型的例子如豆瓣。

对后一种情况,很不幸需要使用真正的代理,或使用分布式方案。免费代理通常都不稳定,而付费代理则需要付费,很少有人愿意为了爬虫付钱(一脸黑线)。

因此,Hawk会考虑提供第一种情况的解决方案,但不会自动开启,而是在用户需要的时候手工开启。

而自动代理切换,目前Hawk不会提供支持。原因更多考虑的是技术之外的因素。

3.抓取动态请求

这是被问的最多的问题。加载一个完整的网页,可能需要几十次请求,不少请求是ajax和动态的,而不少数据都保存在这些请求之中。

最早版本的Hawk内置了一个IE内核的浏览器,后来取消了这个功能。原因很简单:

  • 内置浏览器,导致过分复杂
  • 无法多线程抓取
  • 大量无用的请求,导致抓取速度变慢
  • 即使内置浏览器,也不见得能抓取所有动态请求

因此,纯HttpClient能够精确并只抓取你想要的内容,只要正确构造它即可。
如何使用?你需要配置一个网页采集器
将它的行为,模拟到和浏览器一致。

第一种方法,查看浏览器的请求,参考本文的第一条方法,将请求详情复制过来,注意选择GET和POST。

之后,将嗅探到的地址拷贝到网页采集器的URL输入框中,查看是否能正确获取内容。
如果是POST请求,就更复杂一些。在数据清洗模块中,网页采集器拖入的列需要是对应的URL,你还需要构造出每次访问的post数据,单独作为一列。在网页采集器中如下配置:

注意列名需要用方括号括起来,否则每次POST数据都会是所填的数据。

第二种方法,自动嗅探,下一篇文章我们去抓淘宝,该文章会详细介绍如何使用自动嗅探来模拟动态请求。

4.分布式方案

真正的爬虫是分布式的。用客户端去抓取,只适合于小打小闹的场合。后来的实际情况也证明了这点,分布式能够充分利用网络带宽,将任务分配到不同地域的计算机上,还能避免被封锁。

Hawk当然没有支持分布式方案,但我完成的etlpy已经初步具备了这个功能。但是因为恼人的Python和C#的XPath兼容性问题,我一直不能保证Hawk生成的xml一定被etlpy解析。

同样,etlpy做了非常大的变动,之前为了节省几行代码而使用的诡异的FP的风格被我改成了OO。etlpy是我重点发展的方向,Hawk在未来的发展并不明朗,也许不会继续做大的维护了。因为目前来看,C#可能在我之后的工作生涯中都不会使用了。

5.验证码问题

这也是问的非常多的问题,很不幸,不支持。验证码各种各样,简单到纯数字,复杂到12306,图像转文本涉及到太多的不确定因素。

解决方案也有,一些网站提供识别验证码的接口API,因此你可以让Hawk去模拟网站的API,将图片地址传递过去,API会自动返回验证码。坏消息是这个一般需要收费。
不过,能配置Hawk去做这样的请求的人,一定也能够写Python了,算了,他还是去写Python吧,别跳Hawk这个坑了。

6.XPath搜索相关问题

网页采集器中,填写关键字,却发现无法找到XPath。
可能的原因:

网页是动态网页

因此本链接不包含该关键字,建议考虑使用嗅探方案

关键字太长

是文本中包含不可见字符时经常出现。例如 340[制表符]万,但用户可能会直接输入340万。Hawk搜索是按照严格字符串匹配的,就会匹配不成功,因此输入短一些,如340

和 Chrome等浏览器得到的XPath不同

一方面,XPath的表示方法有很多种,这和正则类似。可能看起来不一样的XPath指代的都是同一个节点。
另一方面,Chrome会执行js代码,而js可能会改变网页的结构,因此XPath也就对应地发生变化了。这会通常会导致从Chrome拷贝出来的XPath在Hawk中不能使用。
Hawk未来不会考虑支持加入执行js代码的功能,因此,如果搜索XPath,还请以Hawk得到的结果为准。多搜多看,通常就能建立感觉。

7. 手气不错的问题

很多人使用手气不错会失败。这是因为:

不是所有的网页都支持直接点击【手气不错】

手气不错需要特定的网页结构(列表),如果整个网页没有显著的列表节点,则搜索失败,此时就会提示 手气不错失败。

手气不错会自动规约父节点

使用手气不错后,嗅探器会找到列表节点的父节点,以及挂载在父节点上的多个子节点,从而形成一个树状结构

  • 父节点(/html/div2/div3/div[4])

    • 子节点1(/a1)
    • 子节点2(/a2/@href)
    • 其他省略

有时候,父节点的xpath是不稳定的,举个例子,北京上海的二手房页面,上海会在列表上面增加一个广告banner,从而真正的父节点就会发生变化。为了应对这种变化,通常的做法是手工修改【父节点XPath】,继续举例子,父节点的id为house_list,且在网页中全局唯一,你就可以使用另外一种父节点表示法//*[@id='house_list'](写法可以参考其他XPath教程),而子节点表达式不变。
Hawk在【手气不错】得到【确定】后,会询问是否提取父节点XPath,此时Hawk会自动提取【父节点XPath】到属性对话框中,从而方便修改。

8.下一步计划

  • 在右侧界面右键添加连接器,如果配置不正确可能会造成闪退,已经修复。
  • 增加自动切换User-agent的功能
  • 优化用户体验设计。

有任何问题,欢迎邮箱联系buptzym@qq.com

Hawk使用补充说明相关推荐

  1. 120项改进:开源超级爬虫Hawk 2.0 重磅发布!

    沙漠君在历时半年,修改无数bug,更新一票新功能后,在今天隆重推出最新改进的超级爬虫Hawk 2.0! 啥?你不知道Hawk干吗用的? 这是采集数据的挖掘机,网络猎杀的重狙!半年多以前,沙漠君写了一篇 ...

  2. 120项优化: 超级爬虫Hawk 2.0重磅发布!

    沙漠君在历时半年,修改无数bug,更新一票新功能后,在今天隆重推出最新改进的超级爬虫Hawk 2.0! 啥?你不知道Hawk干吗用的? 这是采集数据的挖掘机,网络猎杀的重狙!半年多以前,沙漠君写了一篇 ...

  3. 微星R7850 Hawk 2GB独显修改并注入FrameBuffer并在黑苹果macOS Mojave下完美驱动

    前言 微星R7850 Hawk 2GB这块独显,隶属于ATI(现称AMD)的HD 7000系列.型号为7850的Radeon独立显卡. 但显卡OEM厂商微星为了增加卖点,拿着AMD 的7850公版设计 ...

  4. 前端部分面试题整理,欢迎补充

    1.ng中如何配置路由,$scope和$rootscope的原理 ng中如何配置路由?1)使用内置路由模块ng-routevar app = angular.module('ngRouteExampl ...

  5. mysql中char与varchar的区别分析(补充一句,int和integer没区别)

    转自:http://www.jb51.net/article/23575.htm 在mysql教程中char与varchar的区别呢,都是用来存储字符串的,只是他们的保存方式不一样罢了,char有固定 ...

  6. Selenium2(WebDriver)总结(二)---Firefox的firebug插件参数设置(补充)

    Selenium2(WebDriver)总结(二)---Firefox的firebug插件参数设置(补充) 本文是对上一节的补充:http://www.cnblogs.com/puresoul/p/4 ...

  7. 【直播】李祖贤:集成学习答疑直播之八-- 集成知识点回顾与补充

    集成学习答疑直播之八-- 集成知识点回顾与补充 集成学习是首个横跨3个周期的长期组队学习,在第25期组队学习中进行到"第三期-模型融合与数据实战"阶段.组队学习期间,课程设计者每周 ...

  8. 本地应用 v-on补充

    ◆事件绑定的方法写成函数调用的形式,可以传入自定义参数 ◆定义方法时需要定义形参来接收传入的实参 ◆事件的后面跟上.修饰符可以对事件进行限制 ◆.enter可以限制触发的按键为回车 ◆事件修饰符有多种 ...

  9. 学以致用七---Centos7.2+python3.6.2+django2.1.1 --搭建一个网站(补充)

    补充:上一节出现的报错提示 可在settings.py 里,改成 '*'  ,这样所有的主机都可以访问了. 打开网页 注意红色框出来的 hello 是和 urls.py里的hello对应 urls.p ...

最新文章

  1. python支持中文吗_Python中使用中文
  2. leetcode算法题--Magical String
  3. @hdu - 3746@ Cyclic Nacklace
  4. 本站源码免费下载-木庄网络博客
  5. c语言键盘控制数码管显示,3*4矩阵键盘控制4位数码管显示的C程序
  6. 买表(【CCF】NOI Online能力测试3 入门组)
  7. 万物互联的根底就是嵌入式,小到智能手表,大到智能汽车,能落地的支撑之一就是嵌入式。
  8. Linux安装软件包时的“依赖关系树”算法(C#)
  9. 电话号码以185****3547显示demo
  10. 解决Response.AddHeader(Content-Disposition, attachment; filename= + file.Name) 中文显示乱码...
  11. Docker部署应用案例
  12. [渗透测试]ATTCK实战 | Vulnstack 红队(一)
  13. 笔记本外接显示器之后扩展屏分辨率问题
  14. 快速文件扫描王用户协议
  15. 12306快手,初始版本发布。匆忙写了个,不喜勿用
  16. 关于vim的详细配置
  17. 京东内部资料【自然搜索排序白皮书】打算混京东的屌丝必看!
  18. Python tkinter 学习笔记(2)-- 控件、组件(二)
  19. 哈工大2019计算机专业录取分数线,哈尔滨工业大学2019年录取分数线
  20. golang 如何快速测试代码

热门文章

  1. CTO集体怒吼:我到底要不要继续写代码(下篇)
  2. (已解决)Jupyter Notebook使用argparse报错:An exception has occurred, use %tb to see the full traceback.
  3. 科学史上那些盛极一时的“著名理论”是如何被攻破的?
  4. “重”磅!人造物质量首超全球生物量
  5. 你以为美国商业航天那么牛只是因为马斯克?更多原因在这里!
  6. 中科院调查组成立!杨辉发表声明,并对举报信作出详细回应
  7. 图解谷歌大脑丶城市大脑丶全球脑与互联网大脑的关系
  8. Science:发现重写创伤记忆的神经元
  9. 在人工智能时代,我们更需要理解自己的智能 | 艾伦脑科学研究所所长克里斯托夫·科赫STEP峰会演讲实录
  10. IBM超越谷歌抵达量子计算里程碑:研制出50量子位计算机