[爬虫进阶]使用Jsoup取代你的一切网络请求方法(java,post,get,代理IP)
[爬虫进阶]使用Jsoup取代你的一切网络请求方法(java,post,get,代理IP)
原文链接:https://www.cnblogs.com/blog5277/p/9334560.html
原文作者:博客园--曲高终和寡
*******************如果你看到这一行,说明爬虫在本人还没有发布完成的时候就抓走了我的文章,导致内容不完整,请去上述的原文链接查看原文****************
爬虫最近似乎越来越火了,随着各个培训班开启了各种课程,似乎用用Python里的XX框架,就能抓天抓地抓空气了
真的是这样么?
嘻嘻嘻,当然不是了,爬虫不是Python专属,同样,数据采集,数据清洗,AI,机器学习,都不是,语言只是工具,底层都是数学,Python有的工具java和java系的基本都有
扯远了,这里只说爬虫好了,我看了看网上那些教程,大多数都是讲这个网站怎么获取里面的数据,把网址,解析规则自己分析一下调个方法就运行了.
重要不重要,重要,但是写爬虫的最麻烦的不是这个.
上面这东西说白了,任何能请求到一个页面源码的方法+DOM结构解析器,都能做.(当然,人家也是面对新手的教程)
当你在工作中使用爬虫的时候,你会遇到如下问题:
1.网站的反爬虫机制(验证码,封IP,投毒,js动态渲染页面)
2.分布式爬虫的效率与去重
但是基本上讲,只要是web浏览器上能打开的数据,你都能爬到,因为我们只要尽量模拟真人的操作就行了呗,反爬虫手段只是提升了爬虫的成本,不可能杜绝爬虫的,因为这样一定会误伤很多真人用户.
更多的就不细讲了,有点跑题,我在爬虫(或者高大上点叫数据挖掘?)上还有很多的路要走,参考别的大神的思路.
又扯远了,回归主题,介绍Jsoup
身为开发人员,你一定会有很多时候要发起网络请求,比如各个第三方API,比如写爬虫,那么你一定会遇到很多问题:
网站编码是utf-8,还是GBK,GB2312或者更奇葩的编码,
网站是否是GZIP压缩,
post还是get
post的参数要用raw形式放在request body里面
每种情况你用httpclient也好,还是httpconnect也好,都要不同情况单独处理,很麻烦,你要是写个通用爬虫框架,一下子爬几百个网站,那难道说每个网站都要单独设置一下?
我们只想要输入一个连接,输入参数,就能返回内容的方法,难道就这么难么?
是的,挺麻烦的,直到我遇到了jsoup
1.引入依赖,maven
<!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.11.3</version>
</dependency>
百度谷歌"jsoup maven",个人推荐用最新的,时刻追上发展的脚步嘛
2.发送get请求

3.发送post请求

是的,就是这么简单,再也不用管编码,再也不用管GZIP了,你敢发,jsoup就能解析好返回给你.
4.发送post,带参数

要么多.几个data,要么传个map,最后.post();
5,发送post,带requestbody

6,设置超时(个人建议必设)

7,设置动态代理IP,再配合你自己写一个代理的IP池,就可以防止反爬虫封你的IP了

8,设置cookie

9,设置浏览器

10,设置各种header

好了,不谈了,更多的你们自己点一点看一看,非常的容易,另外我个人建议
.ignoreContentType(true).ignoreHttpErrors(true)
这俩一定要开启
细心的朋友一定发现了,返回值是Document
那么怎么返回String类型的html源码呢,直接在get(),或者post()后面这样就行了

如果是调的接口,返回值是json,或者你只需要返回不带html标签的正文,那么这样就可以了

记得随时trim的好习惯哦.
这里放两个我自己常用的get和post通用的方法吧
public static Document getJsoupDocGet(String url) {
//三次试错
final int MAX = 10;
int time = 0;
Document doc = null;
while (time < MAX) {
try {
doc = Jsoup
.connect(url)
.ignoreContentType(true)
.ignoreHttpErrors(true)
.timeout(1000 * 30)
.userAgent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36")
.header("accept","text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8")
.header("accept-encoding","gzip, deflate, br")
.header("accept-language","zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7")
.get();
return doc;
} catch (Exception e) {
e.printStackTrace();
} finally {
time++;
}
}
return doc;
}
public static Document getJsoupDocPost(String url, Map<String,String> paramMap) {
//三次试错
final int MAX = 10;
int time = 0;
Document doc = null;
while (time < MAX) {
try {
doc = Jsoup
.connect(url)
.ignoreContentType(true)
.ignoreHttpErrors(true)
.timeout(1000 * 30)
.userAgent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36")
.header("accept","text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8")
.header("accept-encoding","gzip, deflate, br")
.header("accept-language","zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7")
.data(paramMap)
.post();
return doc;
} catch (Exception e) {
e.printStackTrace();
} finally {
time++;
}
}
return doc;
}
其实返回值Document还有更加强大的作用,它是个DOM解析器,我写爬虫全用它,具体怎么实现的,请自己去
https://www.jsoup.org/
学习,然后去
https://try.jsoup.org/
实验,(建议直接复制源码进来,不要用这里面自带的fetch)
我这里就不谈了,真的好用
[爬虫进阶]使用Jsoup取代你的一切网络请求方法(java,post,get,代理IP)的更多相关文章
- 通过爬虫代理IP快速增加博客阅读量——亲测CSDN有效!
写在前面 题目所说的并不是目的,主要是为了更详细的了解网站的反爬机制,如果真的想要提高博客的阅读量,优质的内容必不可少. 了解网站的反爬机制 一般网站从以下几个方面反爬虫: 1. 通过Headers反 ...
- 免费代理ip爬虫分享
分享一个某代理网站的免费代理ip的爬虫,直接复制到pycharm运行就可以了. 注意:爬取的代理ip有点坑,因为是免费的所以过期时间很快,可能1分钟后就会失效.并且在scrapy使用这些代理ip还会给 ...
- 如何使用代理IP进行数据抓取,PHP爬虫抓取亚马逊商品数据
什么是代理?什么情况下会用到代理IP? 代理服务器(Proxy Server),其功能就是代用户去取得网络信息,然后返回给用户.形象的说:它是网络信息的中转站.通过代理IP访问目标站,可以隐藏用户的真 ...
- Nodejs爬虫进阶教程之异步并发控制
Nodejs爬虫进阶教程之异步并发控制 之前写了个现在看来很不完美的小爬虫,很多地方没有处理好,比如说在知乎点开一个问题的时候,它的所有回答并不是全部加载好了的,当你拉到回答的尾部时,点击加载更多,回 ...
- GO语言的进阶之路-爬虫进阶之路
GO语言的进阶之路-爬虫进阶之路 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 网络爬虫是一种自动获取网页内容的程序,是搜索引擎的重要组成部分.我们今天要介绍的就是一个简单的网络爬 ...
- [爬虫]Python爬虫进阶
请跳转到以下页面查看: 爬虫进阶
- Python爬虫进阶四之PySpider的用法
审时度势 PySpider 是一个我个人认为非常方便并且功能强大的爬虫框架,支持多线程爬取.JS动态解析,提供了可操作界面.出错重试.定时爬取等等的功能,使用非常人性化. 本篇内容通过跟我做一个好玩的 ...
- Python爬虫进阶五之多线程的用法
前言 我们之前写的爬虫都是单个线程的?这怎么够?一旦一个地方卡到不动了,那不就永远等待下去了?为此我们可以使用多线程或者多进程来处理. 首先声明一点! 多线程和多进程是不一样的!一个是 thread ...
- Python爬虫进阶三之Scrapy框架安装配置
初级的爬虫我们利用urllib和urllib2库以及正则表达式就可以完成了,不过还有更加强大的工具,爬虫框架Scrapy,这安装过程也是煞费苦心哪,在此整理如下. Windows 平台: 我的系统是 ...
随机推荐
- _sntprintf_s 和 _sntprintf 区别
https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/snprintf-s-snprintf-s-l-snwprintf-s ...
- CDI services--Decorators(装饰器)
1.Decorators装饰器综述 拦截器是一种强大的方法在应用程序捕捉运行方法和解耦.拦截器可以拦截任何java类型的调用. 这使得拦截器适合解决事务管理,安全性,以及日记记录. 本质上说,拦截器并 ...
- G面经Prepare: Print Zigzag Matrix
For instance, give row = 4, col = 5, print matrix in zigzag order like: [1, 8, 9, 16, 17] [2, 7, 10, ...
- .net 操作web.config文件
XmlDocument doc = new XmlDocument(); string wc = HttpContext.Request.PhysicalApplicationPath + @&quo ...
- web自动化测试python+selenium学习总结----python编辑器pycharm环境安装
下载安装文件 下载最新文件路径:https://www.jetbrains.com/pycharm/ 安装: 一直点击下一步即可 破解: 配置hosts文件.C:\Windows\System32\d ...
- 解决CentOS(6和7版本),/etc/sysconfig/下没有iptables的问题
一.Centos 6版本解决办法: 1.任意运行一条iptables防火墙规则配置命令: iptables -P OUTPUT ACCEPT 2.对iptables服务进行保存: service ip ...
- 切换用户后,/etc/profile的配置不起效
遇到的问题 在配置linux的时候,发现一个问题:su root切换到root用户后,/etc/profile 中配置的PATH不起效果. 问题分析和疑问 是不是~/.profile,~/.bashr ...
- Vue 服务端渲染(SSR)
什么是服务端渲染? 简单理解是将组件或页面通过服务器生成html字符串,再发送到浏览器,最后将静态标记"混合"为客户端上完全交互的应用程序. 服务端渲染的优点 更好的SEO,搜索引 ...
- /bin, /sbin & /usr/bin, /usr/sbin & /usr/local/bin, /usr/local/sbin & glibc
操作系统为自身完成启动所需要的 /bin, /sbin 系统基本管理所需要的 /usr/bin, /usr/sbin 第三方的 /usr/local/bin, /usr/local/sbin 核心库 ...
- python __str__() 和 __repr__()是干啥的
1. 没定义__str__() print的时候得不到自己想要的东西 类默认转化的字符串基本没有我们想要的一些东西,仅仅包含了类的名称以及实例的 ID (理解为 Python 对象的内存地址即可).虽 ...