美文网首页大牧夜话——爬虫篇
爬虫正传-江湖路远-0103-入乡随俗

爬虫正传-江湖路远-0103-入乡随俗

作者: 大牧莫邪 | 来源:发表于2018-05-14 23:38 被阅读0次

尽管已经可以行侠仗义,但是初入江湖的少侠依然少了很多江湖经验,完全不顾及别人的饭碗,疯狂的数据采集造成的压力引起了服务器地主们的注意,发现系统资源严重消耗,于是对服务器处理的用户请求进行了分析,发现了原来是有一个客户端在短时间无限制的发起了太多请求,于是对该客户端直接进行了屏蔽

散养的少侠

那么对于这样的情况,应该怎么进行操作呢,总管金古梁(金庸、古龙、梁羽生)的江湖系列,所有的少侠都是拿经历买经验,经验积累了自然就明白江湖套路了

我们通过大致模拟用户操作行为的习惯,完成对服务器检查的欺骗性伪装
既然程序自动操作会在短时间发起大量请求造成服务器压力,那么就让我们的爬虫程序每次请求之间间隔一定的时间再去执行
看下面的代码,我们采集新浪新闻数据
经过分析,新浪国内新闻列表是通过ajax进行数据请求和页面渲染的,请求地址如下:

[http://api.roll.news.sina.com.cn/zt_list?channel=news&cat_1=gnxw&cat_2==gdxw1||=gatxw||=zs-pl||=mtjj&level==1||=2&show_ext=1&show_all=1&show_num=22&tag=1&format=json&**page=7**&callback=newsloadercallback&_=1526055059562](http://api.roll.news.sina.com.cn/zt_list?channel=news&cat_1=gnxw&cat_2==gdxw1||=gatxw||=zs-pl||=mtjj&level==1||=2&show_ext=1&show_all=1&show_num=22&tag=1&format=json&page=7&callback=newsloadercallback&_=1526055059562)

PS:上述地址是从新浪服务器获取新闻数据时抓包得到的新闻数据请求地址
并根据目标数据分析,目标url地址的请求page参数范围是1~15
这也就意味着我们要对15个地址进行数据采集操作

现在是真正展现技术的时候了
工作目录:/home/damu/work_spider/spider_01/
创建爬虫程序:demo03_useropration.py

# coding:utf-8

import random, time

from urllib2 import urlopen

from urllib2 import Request

# 构建新闻请求地址列表

base_url =

“[http://api.roll.news.sina.com.cn/zt_list?channel=news&cat_1=gnxw&cat_2==gdxw1||=gatxw||=zs-pl||=mtjj&level==1||=2&show_ext=1&show_all=1&show_num=22&tag=1&format=json&page={}&callback=newsloadercallback&_=](http://api.roll.news.sina.com.cn/zt_list?channel=news&cat_1=gnxw&cat_2==gdxw1||=gatxw||=zs-pl||=mtjj&level==1||=2&show_ext=1&show_all=1&show_num=22&tag=1&format=json&page=%7b%7d&callback=newsloadercallback&_=1526055059562)” + str(int(time.time()*1000))

urllists = [base_url.format(n) for n in range(1, 16)]

# 构建请求头对象

headers = {

    “User-agent”: “...”

}

# 循环采集数据

for index, next_url in enumerate(urllists):

# 模仿用户行为每次请求之间间隔1~20秒钟

time.sleep(random.randint(1, 20))

    # 构建请求对象

    request = Request(next_url, headers=headers)    

    # 采集数据

response = urlopen(request)

# 转换文件内容编码,将unicode转换成中文

content = response.read()

content =

     content.encode(‘utf-8’).decode(’unicode_escape’)

    # 保存数据到文件中

    with open(str(index) + “.json”, “wb”) as f:

        f.write(content.encode(‘utf-8’))

执行上述程序,最终会采集到15个包含新闻数据的json文件
在此过程中,并没有用到爬虫相关的新技术,而是通过符合自然用户的操作习惯进行的一种模拟伪装操作,也是爬虫采集数据过程中必须要掌握的一种解决服务器反爬虫限制的手段!

小结:这一部分中最重要的是自然用户行为,因为爬虫本身需要频繁采集数据和自然用户浏览数据有相同之处,都是需要从服务器获取数据,只要爬虫程序伪造请求头就可以接入服务器,但是爬虫程序和自然用户不同的是程序执行速度要比自然人的执行速度快速太多,所以很容易被服务器维护人员剔除该类型请求,所以通过程序模拟人的行为也是一种需要掌握的方式。所以~亲爱的少侠,爬虫要掌握的不仅仅是攻城略地的技术,还需要掌握那么一丢丢社会学的知识吆

相关文章

  • 爬虫正传-江湖路远-0103-入乡随俗

    尽管已经可以行侠仗义,但是初入江湖的少侠依然少了很多江湖经验,完全不顾及别人的饭碗,疯狂的数据采集造成的压力引起了...

  • 爬虫正传-江湖路远-0100

    urllib2底层数据采集方式 1. 亚当和夏娃的故事 据传说,亚当是上帝创世第六天,根据自己的模样造出的第一个人...

  • 爬虫正传-江湖路远-0102-少侠师承何处

    少侠初入江湖,尚不知江湖险恶,入门级别的爬虫很快就被人识破,并对爬虫程序的发起IP地址进行了封锁WHY?因为少侠不...

  • 爬虫正传-江湖路远-0104-狡兔三窟

    那是一个繁忙的午后:?:最近忙什么呢,服务器大佬??:别提了,之前收拾了几个不懂事的小游侠,还没有消停几天,压力又...

  • 爬虫正传-江湖路远-0101-刀未佩妥,出门已是江湖

    1.1. 刀未佩妥,出门已是江湖——第一个爬虫程序 创建自己的爬虫工作目录,我个人工作目录位置: /home/da...

  • 爬虫正传-江湖路远-0105-谁的刀快谁就有理

    在web操作领域,为了减轻响应数据的体积和保证数据完整性的考虑,可以在浏览器允许的情况下,将数据压缩返回,压缩操作...

  • 2017-03-26

    江湖路远

  • 江湖路远

    “泉涸,鱼相与处于陆。相xu以湿,相濡以沫 ,不如相忘于江湖。” 很多年前,还在看武侠小说和电视剧的年纪。不知道什...

  • 江湖路远

    人在江湖,身不由己。是把自己的脑袋寄在裤腰带上拼的那一份快意恩仇。 小七离开江南三年了,已不再是当年的那个少年,只...

  • 江湖路远

    行走江湖多年 蓦然回首往昔 你会明白 爱和喜欢 是两种角色 你喜欢许多 到头来 你只爱一个 也会明白 好人很多 坏...

网友评论

    本文标题:爬虫正传-江湖路远-0103-入乡随俗

    本文链接:https://www.haomeiwen.com/subject/uxmsdftx.html