加入收藏 | 设为首页 | 会员中心 | 我要投稿 辽源站长网 (https://www.0437zz.com/)- 云专线、云连接、智能数据、边缘计算、数据安全!
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

学 Java 网络爬虫,需要哪些基础知识?

发布时间:2019-10-13 09:35:10 所属栏目:优化 来源:平头哥
导读:说起网络爬虫,大家想起的估计都是 Python ,诚然爬虫已经是 Python 的代名词之一,相比 Java 来说就要逊色不少。有不少人都不知道 Java 可以做网络爬虫,其实 Java 也能做网络爬虫而且还能做的非常好,在开源社区中有不少优秀的 Java 网络爬虫框架,例如

上面是网页版的 HTTP 请求的链接分析,如果需要采集 APP 里面的数据就需要借助模拟器了,因为 APP 里没有调试工具,所以只能借助模拟器,使用较多的模拟器工具有如下两种,有兴趣的可以执行研究。

  • fiddler
  • wireshark

3、学会 HTML 页面解析

我们采集的页面都是 HTML 页面,我们需要在 HTML 页面中获取我们需要的信息,这里面就涉及到了 HTML 页面解析,也就是 DOM 节点解析,这一点是重中之重,如果你不会这一点就像魔术师没有道具一样,只能干瞪眼啦。例如下面这个 HTML 页面

学 Java 网络爬虫,需要哪些基础知识?

我们需要获取标题 “java user-agent 判断是否电脑访问” ,我们先通过 F12 检查元素

学 Java 网络爬虫,需要哪些基础知识?

标题所在的 span 标签我已经在图中框出来啦,我们该如何解析这个节点信息呢?方法有千千万万,经常使用的选择器应该是 CSS 选择器 和 XPath ,如果你还不知道这两种选择器,可以点击下方链接学习了解一下:

CSS 选择器参考手册:https://www.w3school.com.cn/cssref/css_selectors.asp

XPath 教程:https://www.w3school.com.cn/xpath/xpath_syntax.asp

使用 CSS 选择器解析的写法为:#wgt-ask > h1 > span

使用 XPath 解析的写法为://span[@class="wgt-ask"]

这样就获取到了 span 的节点,值需要取出 text 就好了,对于 CSS 选择器 和 XPath 除了自己编写之外,我们还可以借助浏览器来帮我们完成,例如 chrome 浏览器

学 Java 网络爬虫,需要哪些基础知识?

只需要选中对应的节点,右键找到 Copy ,它提供了几种获取该节点的解析方式,具体的如上图所示,Copy selector 对应的就是 Css 选择器,Copy XPath 对应的是 XPath,这个功能还是非常有用的。

4、了解反爬虫策略

因为现在爬虫非常泛滥,很多网站都会有反爬虫机制,来过滤掉爬虫程序,以便保证网站的可以用,这也是非常有必要的手段,毕竟如果网站不能使用了,就没有利益可谈啦。反爬虫的手段非常多,我们来看看几种常见的反爬虫手段。

基于 Headers 的反爬虫机制

这是一种比较常见的反爬虫机制,网站通过检查 Request Headers 中的 User-Agent 、Referer 参数,来判断该程序是不是爬虫程序。要绕过这种机制就比较简单,我们只需要在网页中先查看该网站所需要的 User-Agent 、Referer 参数的值,然后在爬虫程序的 Request Headers 设置好这些参数就好啦。

基于用户行为的反爬虫机制

这也是一种常见的反爬虫机制,最常用的就是 IP 访问限制,一个 IP 在一段时间内只被允许访问多少次,如果超过这个频次的话就会被认为是爬虫程序,比如豆瓣电影就会通过 IP 限制。

对于这种机制的话,我们可以通过设置代理 IP 来解决这个问题,我们只需要从代理ip网站上获取一批代理ip,在请求的时候通过设置代理 IP 即可。

除了 IP 限制之外,还会有基于你每次的访问时间间隔,如果你每次访问的时间间隔都是固定的,也可能会被认为是爬虫程序。要绕过这个限制就是在请求的时候,时间间隔设置不一样,比例这次休眠 1 分钟,下次 30 秒。

基于动态页面的反爬虫机制

有很多网站,我们需要采集的数据是通过 Ajax 请求的或者通过 JavaScript生成的,对于这种网站是比较麻烦的,绕过这种机制,我们有两种办法,一种是借助辅助工具,例如 Selenium 等工具获取渲染完成的页面。第二种方式就是反向思维法,我们通过获取到请求数据的 AJAX 链接,直接访问该链接获取数据。

以上就是爬虫的一些基本知识,主要介绍了网络爬虫的使用工具和反爬虫策略,这些东西在后续对我们的爬虫学习会有所帮助,由于这几年断断续续的写过几个爬虫项目,使用 Java 爬虫也是在前期,后期都是用 Python,最近突然间对 Java 爬虫又感兴趣了,所以准备写一个爬虫系列博文,重新梳理一下 Java 网络爬虫,算是对 Java 爬虫的一个总结,如果能帮助到想利用 Java 做网络爬虫的小伙伴,那就更棒啦。Java 网络爬虫预计会有六篇文章的篇幅,从简单到复杂,一步一步深入,内容涉及到了我这些年爬虫所遇到的所有问题。下面是模拟的六篇文章介绍。

1、网络爬虫,原来这么简单

这一篇是网络爬虫的入门,会使用 Jsoup 和 HttpClient 两种方式获取到页面,然后利用选择器解析得到数据。最后你会收获到爬虫就是一条 http 请求,就是这么简单。

2、网页采集遇到登录问题,我该怎么办?

这一章节简单的聊一聊获取需要登录的数据,以获取豆瓣个人信息为例,从手动设置 cookies 和模拟登陆这两种方式简单的聊一聊这类问题。

3、网页采集遇到数据 Ajax 异步加载,我该怎么办?

这一章节简单的聊一聊异步数据的问题,以网易新闻为例,从利用 htmlunit 工具获取渲染完页面和反向思维直接获取到 Ajax 请求连接获取数据两种方式,简单的聊一下这类问题的处理方式。

4、网页采集 IP 被封,我该怎么办?

IP 访问被限制这应该是常见的事情,以豆瓣电影为例,主要以设置代理IP为中心,简单的聊一聊 IP 被限制的解决办法,还会简单的聊一下如何搭建自己的ip代理服务。

5、网络采集性能太差,我该怎么办?

有时候对爬虫程序的性能有要求,这种单线程的方式可能就行不通了,我们可能就需要多线程甚至是分布式的爬虫程序啦,所以这一篇主要聊一聊多线程爬虫以及分布式爬虫架构方案。

6、开源爬虫框架 webmagic 使用案例解析

(编辑:辽源站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读