1. 程式人生 > >記錄我的爬蟲之路2-- headers的修改 && 控制訪問頻率

記錄我的爬蟲之路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'
   

這裡的引數是怎麼來的呢?我們先用瀏覽器手工開啟有道翻譯的介面:
在這裡插入圖片描述

這裡就是我們的瀏覽器提交的時候的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. 方法二: 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

在這裡插入圖片描述