爬虫基本概念
1、ip代理
2、httpclient线程池
3、广度优先【深度优先】
4、多线程爬取/单线程爬取
参考框架webmagic
自定义针对特色网站爬虫:
1、httpclient参数设置
2、请求头head设置
3、request请求参数设置
4、用户名密码登陆设置以及session
HttpClient参数设置
httpclient连接池Timeout waiting for connection 合理设置一下三个参数
defaultMaxPerRoute(每个路由(route)最大连接数 )
maxTotal(最大连接数)
connectionRequestTimeout(从连接池中获取到连接的最长时间 )
注意三个超时时间connectTimeout 创建链接超时时间 connectionRequestTimeout 从连接池中获取到连接的最长时间
特别注意socketTimeout:数据传输的最长时间,指的是没有数据传输时毫秒数报错,如果是一个下载的大文件存在安全隐患一直无法执行完成,并且线程池会占用很大的带宽。可尝试在response返回头中进行筛选,不要这种东西。
以及设置ip代理的三种方式---
我的策略
广度优先解析:仿照wget,取url判断层级,一层通过httpclient直接下载生成index.html,二层通过httpclient得到内容生成文件,再解析内容,下载需要的html、css、js、img等。三层解析二层的html,下载需要的html、css、js、img等,依次类推。
20170323更新,除了ip代理之外其他都已经实现,层级爬取。
解析使用htmlpaser,适合用来做层级爬取以及一些简单的信息
后期打算追加jsoup方式,jsoup适合解析指定table下面的一行行信息,按照一定的规则得到数据,然后按照一定规则进行分类。
爬取网络信息主要在于解析爬取规则。jsoup和htmlparser适用于不同情况的爬取。
较为通用的信息爬取平台 可以将jsonp的规则包装以后设置在页面上形成自动化的解析。
但是:针对不同网站的爬取策略和破解反爬虫策略才是无法通用的难点
按页爬取时,如果在参数信息中包含页面大小可以调整来尝试减少爬取次数。
基本的反爬取策略:传入请求参数、传入请求头可以爬取成功。
有些需要在请求头中传入Cookie才能爬取,Cookie有时候可以获取到有时候很难找到获取cookie的有效途径。
有些情况下cookie如何和请求参数匹配才能爬取成功。
还有的网页会在爬取页面时传递token,然后再通过token get到信息,token一次有效,这个需要注意下。
未解决问题:有些ssl3在windows上可以正常爬取,linux机器上就会报错。【存在安全隐患,被linux系统封了】
比较好的一篇文章:http://www.cnblogs.com/Lands-ljk/p/5673017.html
网络工具
爬取时会造成网络异常,半连接工具、洪水攻击等情况,需要一些工具辅助
iptraf 和nload监控网络还有iftop
iftop:目标 源地址 进出速度
nload:in/com 网卡进出速度。
iptraf 种类多种多样。
nload安装地址:http://www.cnblogs.com/kgdxpr/p/3311507.html
iftop安装地址:http://blog.sina.com.cn/s/blog_61c07ac50101gm21.html
问题
爬取的url中存在空格http://www.leiphone.com/tag/Windows 9
解决方式encode = URLEncoder.encode(" ","utf-8"); url.replace(" ", encode)