java 爬虫优缺点_浅析Java Web 防爬虫机制

前戏:

因为作者喜欢爬虫,所以总结了一下自己爬虫时一般遇到的难处,所以这些难处就是防爬虫的有效措施。

了解一般防爬虫的方法:

1.给令牌(类似我们拿快递,需要有身份验证的令牌,才给你拿快递)。

2.记录ip(同ip访问量速度太高等等)。

其他的还有很多。。。

今天我们模拟第一种机制:给令牌。

首先我们看看这个网页:

8b06b02a37c2

普通.png

其次看看页面的源码:

8b06b02a37c2

页面源码.png

一般爬虫遇到这种网页,肯定偷偷开心,因为只要爬整个网页就可以获取里面的图片资源等等。。。

接下来我们再来看看同样的网页,不同的源码:

8b06b02a37c2

源码2.png

这两个源码的实现的效果是一样的,为什么他们区别那么大(第一个基本各种标签都在界面上,第二个就两个div)。

没错,很多人猜到了,就是异步加载(Ajax)!

至于如何异步加载不是本篇文章的重点,接下来我们看看如何实现异步加载和令牌式来防爬虫。

接下来看看图片&#

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,针对您的问题,我可以给您一些代码示例来演示如何添加请求头和发送 POST 请求。 添加请求头: ```java import java.net.HttpURLConnection; import java.net.URL; public class HttpUrlConnectionExample { public static void main(String[] args) { try { URL url = new URL("https://www.example.com"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); conn.setRequestProperty("User-Agent", "Mozilla/5.0"); conn.setRequestProperty("Accept-Language", "en-US,en;q=0.5"); int responseCode = conn.getResponseCode(); System.out.println("Response code: " + responseCode); } catch (Exception e) { e.printStackTrace(); } } } ``` 在上面的代码中,我们创建了一个 HttpURLConnection 对象,并使用 setRequestProperty() 方法添加了一些请求头信息,包括 User-Agent 和 Accept-Language。 发送 POST 请求: ```java import java.io.DataOutputStream; import java.net.HttpURLConnection; import java.net.URL; import java.nio.charset.StandardCharsets; public class HttpUrlConnectionExample { public static void main(String[] args) { try { URL url = new URL("https://www.example.com"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("POST"); conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); conn.setDoOutput(true); String postData = "param1=value1&param2=value2"; byte[] postDataBytes = postData.getBytes(StandardCharsets.UTF_8); DataOutputStream wr = new DataOutputStream(conn.getOutputStream()); wr.write(postDataBytes); wr.flush(); wr.close(); int responseCode = conn.getResponseCode(); System.out.println("Response code: " + responseCode); } catch (Exception e) { e.printStackTrace(); } } } ``` 在上面的代码中,我们创建了一个 HttpURLConnection 对象,并设置了请求方法为 POST。然后我们使用 setRequestProperty() 方法添加了 Content-Type 请求头,指定了请求体的格式为 application/x-www-form-urlencoded。接着,我们使用 setDoOutput() 方法设置为 true,表示我们要发送一个请求体。然后我们将请求参数转换成字节数组,并使用 DataOutputStream 将其写入请求体中。最后,我们使用 getResponseCode() 方法获取响应码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值