文档章节

记录网页爬虫注意的几个问题

叶大侠
 叶大侠
发布于 2017/07/08 16:18
字数 1326
阅读 56
收藏 1

设置合理的user-agent

一些站点会把这个当作很基本的过滤条件,我们就不碰壁了,直接找个浏览器粘贴一个,有些文章介绍用一些爬虫的user-agent,但是对方可能会有相关的爬虫服务器的 iplist,不过这种情况不多见,可以试一下。

设置合理的爬取间隔

过于频繁的流量很容易被监控到,当然除了一些没人管的站点,通常请求ip会被对方禁用一段时间,严重的可能会拉入黑名单,这就浪费掉一个 ip 地址了。如果你不是很急的话,我一般设置个 1 到 10 秒的随机访问间隔,单线程执行,慢慢爬。一般来说很多站点都能接受这样的方式,也不会给对方运维人员造成压力,如果还有限制同个 ip 的访问次数,那我们还有代理招。

需要登录权限

有登录就有注册,以前很多注册是需要验证邮箱,通过SMTP协议读取邮件内容实现自动化是个思路,前提你也要有很多邮箱地址,牛逼的你可以自己搭建个邮件服务器,要多少有多少。现在很多是通过手机号码的验证码了,这个就麻烦了,首先要有很多设备插很多sim卡接收短信,然后还要在这些设备上把数据传到你运行的那台机子解析出验证码才能把整个流程自动化。反正我是没试过,一般我都是手工注册几个。

登录的话就会简单一些,把用户名和密码post上去之后根据服务端返回的Set-Cookie设置好相关请求头就行了,甚至有些框架都帮你处理好了。如果需要验证码的话,出门左拐去购买破解验证码的接口或者自己实现吧,拿到凭证后就可以在相关页面里面横冲直撞了。当然,你也可以像我一样手动在浏览器上登录,拿到Set-Cookie之后在进行后面的操作。

增量爬取

如果爬的内容非常多,你永远也不知道在什么时候就 GameOver 了,因此一定要保存好你的进度,通常来说抓取工作都很重,抓到半天然后从头开始,It sucks ! 多写一点代码换来的好处是值得的。

代理魔法好

关于拉内容,这里介绍的是终极大招了。有了代理服务器,你就相当于找到了多个帮你干活的小弟,而且还是远程指挥,被封了也不会影响到你的本尊。

代理的来源:你可以自己用工具去扫描全网找到可用的免费代理,也可以像笔者一样偷懒去购买一些可用的代理。

代理的使用策略:你可能拥有了便宜甚至免费的代理地址,但是这里面很多可能都没法使用,或者现在能用,待会就不能用了,因此在使用之前应该测试一下,及时移除不能用的地址,提高效率。另外,注意不要用一个代理地址连续范围,笔者的策略一般是每个请求顺序换一个代理地址,如果数量足够多的前提下,你可以尽可能地提升你的爬取线程或者进程数,由于每个 ip 的访问间隔足够长,这样也不会被封 ip 。

内容解析

在没认识Jsoup之前,笔者一般通过正则表达式和字符串的处理来滤出想要的内容,如果你还在拼难写的正则表达式,不妨可以试一下 Jsoup 。

Ajax异步内容

现在很多单页的应用都是先把 js 和基本的页面框架先加载,然后在异步请求一些其他的内容,比如很多的下拉到底部请求下一页的列表数据。对于这样的情况,我建议还是读一下它的 js 代码,然后模拟这个过程,这样爬取效率会更高一些;另外也可以selenium这样的工具来模拟浏览器的执行,这个笔者还没用过。

总结

抓取信息其实是个攻与防的过程,总结规律,多测试和践行你的想法,找到合适的策略。最后,善用工具,但行好事哈~

参考

  1. java 爬虫框架:webmagic
  2. html解析框架:jsoup

这里也有我发布的文章:https://yedaxia.github.io

© 著作权归作者所有

共有 人打赏支持
叶大侠

叶大侠

粉丝 57
博文 44
码字总数 67312
作品 5
广州
程序员
Crawler4j的使用

Crawler4j的使用 (以下内容全部为转载,供自己查阅用) 下载地址: http://code.google.com/p/crawler4j/ Crawler4j的使用 网上对于crawler4j这个爬虫的使用的文章很少,Google到的几乎没有...

帅的不像男的
2016/06/07
335
0
使用python,scrapy写(定制)爬虫的经验,资料,杂。

近期找工作略不顺。技术无用。晚上写下了这点东西。 首先说下最近在找工作的x的大概相关技术加点路线。py 3年+,linux日常熟练,限于不擅web、手机app开发,一直无太好的可展示的东西。前段时...

斑ban
2013/12/27
0
7
无头浏览器 Puppeteer 初探

作者简介 轻声 蚂蚁金服数据前端 我们日常使用浏览器的步骤为:启动浏览器、打开一个网页、进行交互。而指的是我们使用脚本来执行以上过程的浏览器,能模拟真实的浏览器使用场景。 有了无头浏...

蚂蚁金服ProtoTeam
2017/10/17
0
0
Puppeteer 初探

我们日常使用浏览器或者说是有头浏览器时的步骤为:启动浏览器、打开一个网页、进行交互。 无头浏览器指的是我们使用脚本来执行以上过程的浏览器,能模拟真实的浏览器使用场景。 有了无头浏览...

赖小赖小赖
2017/10/19
0
0
python利用beautifulsoup+selenium自动翻页抓取网页内容

python利用beautifulsoup+selenium自动翻页抓取网页内容 Uncle Chen2016-12-11446 阅读 python技术爬虫 一、背景 记录一次周末在家速成的爬虫实现之旅。受人之托,想要把这个页面 http://bai...

Uncle Chen
2016/12/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

CentOS7防火墙firewalld操作

firewalld Linux上新用的防火墙软件,跟iptables差不多的工具。 firewall-cmd 是 firewalld 的字符界面管理工具,firewalld是CentOS7的一大特性,最大的好处有两个:支持动态更新,不用重启服...

dingdayu
今天
1
0
关于组件化的最初步

一个工程可能会有多个版本,有国际版、国内版、还有针对各种不同的渠道化的打包版本、这个属于我们日常经常见到的打包差异化版本需求。 而对于工程的开发,比如以前的公司,分成了有三大块业...

DannyCoder
今天
2
0
Spring的Resttemplate发送带header的post请求

private HttpHeaders getJsonHeader() { HttpHeaders headers = new HttpHeaders(); MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8"); ......

qiang123
昨天
3
0
Spring Cloud Gateway 之 Only one connection receive subscriber allowed

都说Spring Cloud Gateway好,我也来试试,可是配置了总是报下面这个错误: java.lang.IllegalStateException: Only one connection receive subscriber allowed. 困扰了我几天的问题,原来...

ThinkGem
昨天
27
0
学习设计模式——观察者模式

1. 认识观察者模式 1. 定义:定义对象之间一种一对多的依赖关系,当一个对象状态发生变化时,依赖该对象的其他对象都会得到通知并进行相应的变化。 2. 组织结构: Subject:目标对象类,会被...

江左煤郎
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部