个人网站建设背景和目的,滨州网站建设腾度,微信上开网店怎么开,如何外贸网站推广说起网络爬虫#xff0c;大家想起的估计都是 Python #xff0c;诚然爬虫已经是 Python 的代名词之一#xff0c;相比 Java 来说就要逊色不少。有不少人都不知道 Java 可以做网络爬虫#xff0c;其实 Java 也能做网络爬虫而且还能做的非常好#xff0c;在开源社区中有不少…说起网络爬虫大家想起的估计都是 Python 诚然爬虫已经是 Python 的代名词之一相比 Java 来说就要逊色不少。有不少人都不知道 Java 可以做网络爬虫其实 Java 也能做网络爬虫而且还能做的非常好在开源社区中有不少优秀的 Java 网络爬虫框架例如 webmagic 。
作者平头哥
说起网络爬虫大家想起的估计都是 Python 诚然爬虫已经是 Python 的代名词之一相比 Java 来说就要逊色不少。有不少人都不知道 Java 可以做网络爬虫其实 Java 也能做网络爬虫而且还能做的非常好在开源社区中有不少优秀的 Java 网络爬虫框架例如 webmagic 。我的第一份正式工作就是使用 webmagic 编写数据采集程序当时参与了一个舆情分析系统的开发这里面涉及到了大量网站的新闻采集我们就使用了 webmagic 进行采集程序的编写由于当时不知道其设计原理使用起来还是走了不少弯路其实 webmagic 的设计借鉴了 Scrapy 所以它也能像 Scrapy 一样强大关于 webmagic 框架我们将在后续展开详细的讨论。 在后面的几年工作中也参与了好几个爬虫项目但是大多数都是使用 Python 抛开语言不谈爬虫也是有一套思想的。这些年写爬虫程序对我个人的技术成长帮助非常大因为在爬虫的过程中会遇到各种各样的问题其实做网络爬虫还是非常考验技术的除了保证自己的采集程序可用之外还会遇到被爬网站各种奇奇怪怪的问题比如整个 HTML 页面有没一个 class 或者 id 属性你要在这种页面提取表格数据并且做到优雅的提取这就是非常考验你的想象力以及技术啦。非常有幸在刚入行的时候就接触到了网络爬虫这一块它加快了我对互联网的理解和认知扩宽了我的视野。
这几年来网络爬虫比较火如果你想学习 Java 网络爬虫我根据我自己的经验总结了一下想入门学习 Java 网络爬虫需要知道的四点基础知识。
1、有 “道德” 的爬虫
我为什么会把这一点放在最前面呢?因为我觉得这一点比较重要什么叫有 “道德” 的爬虫呢?就是遵循被爬服务器的规则不去影响被爬服务器的正常运行不把被爬服务搞垮这就是有 “道德” 的爬虫。
经常有人讨论的一个问题就是爬虫合法吗?知乎一下你看到的将是这样的 答案千千万在这众多答案中我个人比较赞同下面的这个回答
爬虫作为一种计算机技术就决定了它的中立性因此爬虫本身在法律上并不被禁止但是利用爬虫技术获取数据这一行为是具有违法甚至是犯罪的风险的。所谓具体问题具体分析正如水果刀本身在法律上并不被禁止使用但是用来捅人就不被法律所容忍了。
爬虫违不违法?取决于你做的事情违不违法网络爬虫的本质是什么?网络爬虫的本质是用机器代替人工去访问页面。我查看公开的新闻肯定不犯法所以我去采集公开在互联网上的新闻也不犯法就像各大搜索引擎网站一样别的网站巴不得别搜索引擎的蜘蛛抓取到。另一种恰恰相反的情况是去采集别人隐私的数据你自己去查看别人的隐私信息这就是一种违法的行为所以用程序去采集也是违法的这就像答案中所说的水果刀本身不违法但是用来捅人就违法啦。
要做到有 “道德” 的爬虫Robots 协议是你必须需要了解的下面是 Robots 协议的百度百科 在很多网站中会申明 Robots 协议告诉你哪些页面是可以抓取的哪些页面是不能抓取的当然 Robots 协议只是一种约定就像公交车上的座位一样标明着老弱病残专座你去坐了也不违法。
除了协议之外我们在采集行为上也需要克制在 『数据安全管理办法(征求意见稿)』的第二章第十六条指出
网络运营者采取自动化手段访问收集网站数据不得妨碍网站正常运行;此类行为严重影响网站运行如自动化访问收集流量超过网站日均流量三分之一网站要求停止自动化访问收集时应当停止。
这条规定指出了爬虫程序不得妨碍网站正常运行如果你使用爬虫程序把网站搞垮了真正的访问者就不能访问该网站了这是一种非常不道德的行为。应该杜绝这种行为。
除了数据的采集在数据的使用上同样需要注意我们即使在得到授权的情况下采集了个人信息数据也千万不要去出卖个人数据这个是法律特别指出禁止的参见
根据《最高人民法院 最高人民检察院关于办理侵犯公民个人信息刑事案件适用法律若干问题的解释》第五条规定对“情节严重”的解释
(1)非法获取、出售或者提供行踪轨迹信息、通信内容、征信信息、财产信息五十条以上的;
(2)非法获取、出售或者提供住宿信息、通信记录、健康生理信息、交易信息等其他可能影响人身、财产安全的公民个人信息五百条以上的;
(3)非法获取、出售或者提供第三项、第四项规定以外的公民个人信息五千条以上的便构成“侵犯公民个人信息罪”所要求的“情节严重”。
此外未经被收集者同意即使是将合法收集的公民个人信息向他人提供的也属于刑法第二百五十三条之一规定的“提供公民个人信息”可能构成犯罪。
2、学会分析 Http 请求
我们每一次与服务端的交互都是通过 Http 协议当然也有不是 Http 协议的这个能不能采集我就不知道啦没有采集过所以我们只谈论 Http 协议在 Web 网页中分析 Http 协议还是比较简单我们以百度检索一条新闻为例 我们打开 F12 调试工具点击 NetWork 查看版能查看到所有的请求找到我们地址栏中的链接主链接一般存在 NetWork 最上面一条链接 在右边headers查看栏中我们能够看到这次请求所需要的参数在这里我们需要特别注意 Request Headers 和 Query String Parameters 这两个选项栏。
Request Headers 表示的是该次 Http 请求所需要的请求头的参数有一些网站会根据请求头来屏蔽爬虫所以里面的参数还是需要了解一下的请求头参数中大部分参数都是公用的 User-Agent 和 Cookie 这两个参数使用比较频繁 User-Agent 标识浏览器请求头Cookie 存放的是用户登录凭证。
Query String Parameters 表示该次 Http 请求的请求参数对于post 请求来说这个还是非常重要的因为在这里可以查看到请求参数对我们模拟登陆等 Post 请求非常有用。
上面是网页版的 HTTP 请求的链接分析如果需要采集 APP 里面的数据就需要借助模拟器了因为 APP 里没有调试工具所以只能借助模拟器使用较多的模拟器工具有如下两种有兴趣的可以执行研究。
fiddlerwireshark
3、学会 HTML 页面解析
我们采集的页面都是 HTML 页面我们需要在 HTML 页面中获取我们需要的信息这里面就涉及到了 HTML 页面解析也就是 DOM 节点解析这一点是重中之重如果你不会这一点就像魔术师没有道具一样只能干瞪眼啦。例如下面这个 HTML 页面 我们需要获取标题 “java user-agent 判断是否电脑访问” 我们先通过 F12 检查元素 标题所在的 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[classwgt-ask]
这样就获取到了 span 的节点值需要取出 text 就好了对于 CSS 选择器 和 XPath 除了自己编写之外我们还可以借助浏览器来帮我们完成例如 chrome 浏览器 只需要选中对应的节点右键找到 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 使用案例解析
以前用 webmagic 做过一次爬虫但是那个时候我似懂非懂的没有很好的理解 webmagic 框架经过这几年的经历我现在对这个框架有了全新的认识所以想按照 webmagic 的规范搭建一个简单的 demo来体验 webmagic 的强大之处。
以上就是我的爬虫系列博文用文字记录点点滴滴记录我这个非专业的爬虫玩家那些年遇到的坑如果你准备学习 Java 网络爬虫不妨关注一波我相信你会得到一定的收获因为我会用心的写好每一篇文章。
阅读目录置顶)(长期更新计算机领域知识
阅读目录置顶)(长期更新计算机领域知识
阅读目录置顶)(长期科技领域知识
歌谣带你看java面试题