记录我的爬虫之路2-- headers的修改 && 控制访问频率

咳咳,人生真的是一波三折,落落起起,大概是9.14那天晚上好像,我前面的同学准备出国,临时放弃保研,然后名额顺延到我了,这几天就在疯狂复习数据结构,也没怎么看爬虫,昨天刚保研面试完,不知道结果怎么样,但愿一切都好吧!今天来学学爬虫,昨晚买了两本书, 一本是python编程的入门实战,一本是关于数据挖掘的~ 然后在知乎上找到了scrapy的教程,这几天先打算学一学~ 人生的下一个阶段,要比以前更努力才是啊!


一. 修改headers

——————————————————————————————————————————————————

1. 方法一: 通过字典的形式参数传给request:

因为咱们的爬虫访问网站留下的useragent是pythonxxx,人一看就知道是爬虫了~万一网站采取反爬措施呢?咱们该怎么办呢?今天就介绍一下 userAgent的修改→修改headers
用上个博客的爬取有道翻译的例子:

下面我们用定义一个爬虫函数的过程来讲解一下:

1.1 填写你要爬取的url

def Translation(input):
    input = str(input)   #用户的输入参数
    url="http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule"

1.2 填写你要传入的data (每个网站可能格式不同,具体怎么填写请参照上一篇博文)

    data={}  #data是一个字典
    data['from'] = 'AUTO'
    data['to'] = 'AUTO'
    data['i'] = input     #要翻译的东西是用户的输入参数
    data['smartresult'] = 'dict'
    data['client'] = 'fanyideskweb'
    data['salt'] = '1536132624880'
    data['sign'] =  '84d7547f78c9455a6ad3067cc86baa0d'
    data['doctype'] = 'json'
    data['version']= '2.1'
    data['keyfrom'] = 'fanyi.web'
    data['action']= 'FY_BY_CLICKBUTTION'
    data['typoResult']= 'false'

    data = urllib.parse.urlencode(data).encode('utf-8')
    #data必须是x-www-form-urlencoded格式。所以需要用这个函数来编码成url

1.3 修改headers

 head={}
    head['User-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'
   

这里的参数是怎么来的呢?我们先用浏览器手工打开有道翻译的界面:
记录我的爬虫之路2-- headers的修改 && 控制访问频率_第1张图片

这里就是我们的浏览器提交的时候的User-Agent啦,我们可以通过修改这个,模拟成浏览器访问~

1.4 将url data head依次赋值给req

req = urllib.request.Request(url, data, head)

response = urllib.request.urlopen(req)

response = response.read().decode('utf-8')

response= json.loads(response)  #s表示字符串,载入字符串变成字典

result = str(response['translateResult'][0][0]['tgt'])

print(input, '的翻译是:', result)

1.5 调用

UserIn = str(input('请输入您要翻译的内容:\n'))
Translation(UserIn)

记录我的爬虫之路2-- headers的修改 && 控制访问频率_第2张图片

2. 方法二: request生成之后,add_header():

只需要把上文的1.3步骤换成如下即可:

    # 方法2. request生成之后,add_header()动态追加
    req = urllib.request.Request(url, data)
    req.add_header('User-Agent',  'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36')

——————————————————————————————————————————————————

二. 控制访问频率: – 增加访问间隔 – time

2.1 引入time 模块

import time

只需要在调用的时候更改一下间隔:

while True:
    UserIn = str(input('\n请输入您要翻译的内容:(输入ESC退出程序)\n'))
    if(UserIn != 'ESC'):
        Translation(UserIn)
        time.sleep(5)   #休眠5秒钟
    else:
        break

记录我的爬虫之路2-- headers的修改 && 控制访问频率_第3张图片

你可能感兴趣的:(PythonSpiders)