设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
查看: 6405|回复: 2
打印 上一主题 下一主题

听说你好不容易写了个爬虫,结果没抓几个就被封了?

[复制链接]

169

主题

1

好友

733

积分

版主

Rank: 7Rank: 7Rank: 7

跳转到指定楼层
楼主
发表于 2018-7-18 16:44:16 |只看该作者 |倒序浏览

近来知乎上如雨后春笋般冒出了大把大把的爬虫教程。这是好事,学了 Python 基础的同学们可以很轻松地搜出许多练手的例子。不过我不是针对谁,我是说网上绝大多数的爬虫教程,其实都缺乏可操作性。

是的,也包括我自己写过的。

主要原因有两点:
教程是死的,网站是活的。页面会改版,接口会更新。一个爬虫教程的案例三个月之后还能有效已经是万幸了。比如我自己教程里的查天气案例,接口改动过很多次,数据也早就不更新。但发出去的文章被转发几次后就很难再维护更新了。我也只能在自己的论坛上发布更新消息和问题答疑:【Python 第43课】 查天气(1)。但凡数据比较有价值的网站,一定都会有反爬措施,既是对数据的保护,也是避免机器流量干扰到正常用户的体验。所以光是写个网络请求,几乎不可能成功拿到数据。反爬措施千千万,应对反爬的手段万万千,这就是个不停斗智斗勇的过程,不存在一个教程就教会的万金油方法。
反爬里面最常见的一种手段就是,判断你的请求频率。如果你短时间内发送了大量的请求,甭管你是不是人,先封你账号或 IP 一段时间再说。所以,这就成了一个矛盾的地方:爬得太快会被封,爬得太慢又很耗时间。一般教程也许会说句:想要提升抓取效率并且降低被封的风险,可以使用代理 IP。然而这话说着倒轻松,网上免费的代理 IP 也不少,但每次找来能用的却没几个。总不至于每次为了写点小练习还去花钱买很多付费代理吧。况且现如今你真要买,也还未必能顺利买到可用的。

于是我们决定自己动手,一劳永逸地解决这个老大难问题:实现一个自动获取可用代理 IP 的接口。

基本思路还是从网上的几大免费平台获取 IP 地址,不同的是我们定期去检测 IP 的可用性。在调用接口时,提供可用性最高的 IP 地址列表。

网页上列出了几十个最新的推荐 IP,只是临时找几个做测试,可直接访问查看。

网页地址:http://lab.crossincode.com/proxy/

API 接口地址:http://lab.crossincode.com/proxy/get/

请求方法:GET

频率限制:不高于3秒1次

请求示例:

获取 5 个 IP

http://lab.crossincode.com/proxy/get/?num=5

获取 5 个 HTTPS 的 IP

http://lab.crossincode.com/proxy/get/?num=5&head=https

返回结果示例:
  1. {
  2.   "proxies": [
  3.     {
  4.       "http": "117.90.0.225:9000"
  5.     },
  6.     {
  7.       "http": "186.154.146.26:8080"
  8.     },
  9.     {
  10.       "http": "175.155.25.27:808"
  11.     },
  12.     {
  13.       "http": "124.88.67.52:843"
  14.     },
  15.     {
  16.       "http": "119.5.0.7:808"
  17.     }
  18.   ],
  19.   "code": 1
  20. }
复制代码
于是,在你做爬虫练习时,只要通过接口获取几个 IP,作为你请求的 proxy,即可大大提高抓取的效率。目前我们自己的爬虫项目都在使用此接口。

不过仍然要说明,即使经过多次验证,也无法保证一个 IP 的绝对可用性。不同时间不同地域不同网络都有可能导致请求超时或失效。所以你的代码中也还是需要自己做好相应的异常处理。这是个概率问题,工具的作用只是尽可能提高概率。

我们不生产 IP,我们只是互联网的搬运工。

完整的接口参数说明,以及项目的源代码,可在公众号(Crossin的编程教室)后台回复 IP 获取。



════

其他文章及回答:
喏,你们要的 PyCharm 快速上手指南 编程新手:看懂很多示例,却依然写不好一个程序 给伸手党的福利:Python 新手入门引导 如何用100行Python代码做出魔性声控游戏“八分音符酱” 学习编程的过程中可能会走哪些弯路,有哪些经验可以参考?你是如何自学 Python 的?
Crossin的编程教室
微信公众号ID:crossincode网站:crossincode.com


回复

使用道具 举报

0

主题

0

好友

6

积分

新手上路

Rank: 1

沙发
发表于 2018-8-14 19:32:55 |只看该作者
我觉得可以  , 简单的顶一下
回复

使用道具 举报

5

主题

0

好友

145

积分

注册会员

Rank: 2

板凳
发表于 2019-6-21 15:33:06 |只看该作者
是不是代理的问题呢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-11-24 13:12 , Processed in 0.024236 second(s), 21 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部