新手问题 爬页面频率一高,服务器就返回 403,求破

imtinge · 2017年09月18日 · 最后由 imtinge 回复于 2017年09月18日 · 1029 次阅读

帮同学爬本地的一个新闻网站,需要获取标题、内容,发布日期和点击量

点击量是通过 js 生成的,

<script src="/count/index?id=2838670&amp;siteid=199"></script>

全地址

http://www.trs.gov.cn/count/index?id=2838670&siteid=199

通过连接地址,可以取到内容

document.write("195")

使用如下脚本也可以取到

pubdate, count_id = post.scan(/t(\d{8}_\d+)\./).first.first.split('_')

count_link = "http://www.xxx.cn/count/index?id=#{count_id}&siteid=#{site_id}"
begin
  html = Nokogiri::HTML(open(count_link, 'User-Agent' => 'ruby'))
  hits = html.text.scan(/\d+/).first
rescue => e
  puts "#{count_link}, #{e.message}"
  hits = 0
end

但一旦使用多线程访问 count_link 就会返回 403 错误,减少线程量,添加 sleep 可以降低出现 403 的几率, 一旦出现 403 使用浏览器访问也看不到点击量(之前使用 phantomjs 也出现过抓不到点击量的情况),我让外地的朋友帮我试了也看不到,看来并不是封了我的 IP, 这个 403 错误,会持续一段时间,时间到了以后,又可以正常的访问了

本来是爬数据,当然希望越快越好,但是一快就报 403,心碎,求破 先谢谢大家了。

1 楼 已删除

既然快了就 403,还是全站 403,说明目标站点服务器资源有限,你这都算是搞挂人家站点了,你的爬虫频率就应该在这个频率之下。

martin91 回复

不是全站,他点击量是单独的服务,可能他们定时会再拉起来;如果是在他这个频率之下的话,那我只能单线程跑了,时间太长了,,,

需要 登录 后方可回复, 如果你还没有账号请 注册新账号