java爬虫抓取网页数据( 一下如何利用Java进行网络爬虫?(图)的运用 )
优采云 发布时间: 2022-02-24 23:29java爬虫抓取网页数据(
一下如何利用Java进行网络爬虫?(图)的运用
)
这是Java网络爬虫系列的第二篇文章。上一篇Java网络爬虫,就这么简单,我们简单学习了如何使用Java进行网络爬虫。在这篇文章中,我们将简单谈谈遇到网络爬虫时需要登录的网站,我们应该怎么做?
在做爬虫工作的时候,也经常会遇到需要登录的问题,比如写脚本抢票之类的,但是任何需要个人信息的人都需要登录。此类问题的解决方法主要有两种:一种是手动设置Cookie就是先登录网站,登录后复制cookie,在爬虫程序的HTTP请求中手动设置Cookie属性。这种方法适用于采集频率较低,采集周期短,因为cookie会失效。如果是长期采集,需要频繁设置cookie。这不是一个可行的方法。第二种方法是使用程序模拟登录,通过模拟登录获取cookies。这种方法适合长期采集this网站,
为了让大家更好的了解这两种方式的应用,我以豆瓣个人主页昵称为例,通过这两种方式获取登录后才能查看的信息。获取信息为如下图:
很容易得到图片中的缺心。很明显,这个信息只有登录后才能看到,符合我们的主题。接下来,我们使用上面的两种方法来解决这个问题。
手动设置 cookie
手动设置cookie的方式比较简单。我们只需要登录豆瓣。登录成功后,我们可以获取到带有用户信息的cookie。豆瓣登录链接:
https://accounts.douban.com/passport/login
如下所示:
图中的cookie携带用户信息。我们只需要在请求查看登录后才能查看的信息时携带这个cookie。我们使用Jsoup来模拟手动设置cookie的方式。具体代码如下:
从代码可以看出,它和不需要登录的网站没什么区别,只是多了一个.header("Cookie", "your cookies"),我们可以复制浏览器里的cookie在这里,写main方法
运行 main 会产生以下结果:
可以看到,我们成功获取了缺心,这就是所谓的简单,也就是说我们设置的cookie是有效的,我们成功获取了需要登录的数据。这个方法真的很简单,唯一的缺点是cookie需要经常更换,因为cookie会失效,使用起来不太舒服。
模拟登录方式
模拟登录方式可以解决手动设置cookie方式的不足,但也引入了更复杂的问题。目前的验证码种类繁多,其中有很多是具有挑战性的,比如在一堆图片中操作某类图片。这个还是挺难的,写出来也不容易。因此,由开发人员权衡使用哪种方法的利弊。我们今天使用的豆瓣在登录的时候是没有验证码的,这种没有验证码的比较简单。模拟登录方式最重要的是找到真正的登录请求和登录所需的参数。我们只能利用这一点,我们先在登录界面输入错误的账号密码,这样页面就不会跳转了,所以我们可以很容易地找到登录请求。让我演示一下豆瓣登录找到登录链接。我们在登录界面输入了错误的用户名和密码。点击登录后,查看网络发起的请求链接,如下图:
从网络上我们可以看到豆瓣的登录链接是,需要五个参数,具体参数可以在图中的Form Data中查看。有了这些,我们就可以构造一个请求来模拟登录。登录后进行后续操作。接下来,我们将使用Jsoup模拟登录,获取豆瓣首页的昵称。具体代码如下:
这段代码分为两部分。第一段是模拟登录,第二段是解析豆瓣首页。此代码中启动了两个请求。第一个请求是模拟登录获取cookie,第二个请求携带第一个模拟登录后获取的cookie,这样也可以访问需要登录的页面,修改main方法
运行 main 方法会产生以下结果:
模拟登录的方法也成功获取了网名。它被称为简单。虽然这是最简单的模拟登录,但从代码量可以看出,它比设置cookies要复杂得多。对于其他有验证码登录的用户,这里就不介绍了。首先,我没有这方面的经验。其次,这个实现比较复杂,会涉及到一些算法和一些辅助工具的使用。有兴趣的朋友可以参考崔庆才先生的作品。博客研究研究。虽然模拟登录写起来比较复杂,但只要写得好,一劳永逸。如果你需要长期的采集信息需要登录,这个还是值得做的。除了使用jsoup模拟登录,我们也可以使用httpclient来模拟登录。httpclient模拟登录没有Jsoup那么复杂,因为httpclient可以像浏览器一样保存session会话,这样登录后就保存cookies,同一个httpclient中的请求都会带cookies。httpclient模拟登录代码如下:
运行此代码也会返回 true。
我们讲了Java爬虫的登录问题。总结一下:爬虫的登录问题有两种解决方案。一种是手动设置cookies。此方法适用于短期采集或一次性性采集,成本较低。另一种方式是模拟登录,适合长期采集网站,因为模拟登录的成本还是挺高的,尤其是一些异常的验证码,好处是可以让你一劳永逸
以上就是Java爬虫遇到的登录问题的知识分享。我希望它会帮助你。下一篇是关于爬虫遇到数据异步加载的问题。如果你对爬虫感兴趣,不妨关注一波,互相学习,共同进步
源代码:
https://github.com/BinaryBall/java-base/blob/master/crawler/src/main/java/com/jamal/crawler/CrawleLogin.java
作者:平头哥的技术博文
来源:掘金
商业用途请与原作者联系,本文只做展示分享,不妥侵删!