文档章节

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

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

设置合理的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

没有更多内容

加载失败,请刷新页面

加载更多

下一页

[MicroPython]STM32F407开发板驱动OLED液晶屏

1.实验目的 1.学习在PC机系统中扩展简单I/O 接口的方法。 2.进一步学习编制数据输出程序的设计方法。 3.学习 F407 Micropython开发板控制OLED显示字符。 2.所需元器件 F407 Micropython开发板...

bodasisiter
21分钟前
0
0
php require和include 相对路径一个有趣的坑

以前总是被教育,不要使用相对路径,这样性能比较差,但是相对路径的问题不仅仅是性能哦,看下面这里例子 这是项目结构 .├── main.php├── t│ ├── t1.php│ └── t2.php└─...

anoty
21分钟前
9
0
x64技术之SSDT_Hook

测试环境: 虚拟机: Windows 7 64bit 过PG工具 驱动加载工具 PCHunter64 系统自带的计算器和任务管理器等 实现思路: 实际思路与win32的思路一样.都是替换SSDT表里边的函数地址.不过微软被搞怕...

simpower
22分钟前
0
0
TreeMap源码分析,看了都说好

一、简介 TreeMap最早出现在JDK 1.2中,是 Java 集合框架中比较重要一个的实现。TreeMap 底层基于红黑树实现,可保证在log(n)时间复杂度内完成 containsKey、get、put 和 remove 操作,效率很...

Java小铺
32分钟前
0
0
协变、逆变

概念 假设 A、B表示类型 ≤ 表示继承关系 f<⋅>表示类型转换 若A ≤ B,则 A是B的子类,B是A的超类 协变、逆变 什么是型变?型变(type variance)允许对类型进行子类型转换。 为了下面讲解先...

obaniu
38分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部