pyspider 中採用了 tornado 庫來做 http 請求,在請求過程中可以新增各種引數,例如請求鏈結超時時間,請求傳輸資料超時時間,請求頭等等,但是根據pyspider的原始框架,給爬蟲新增引數只能通過 crawl_config這個python字典來完成(如下所示),框架**將這個字典中的引數轉換成 task 資料,進行http請求。這個引數的缺點是不方便給每一次請求做隨機請求頭。
crawl_config =
這裡寫出給爬蟲新增隨機請求頭的方法:
1、編寫指令碼,將指令碼放置在 pyspider 的 libs 資料夾下,命名為 header_switch.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# created on 2017-10-18 11:52:26
import random
import time
class headersselector(object):
"""header 中缺少幾個字段 host 和 cookie
"""headers_1 = # 網上找的瀏覽器
headers_2 = # window 7 系統瀏覽器
headers_3 = # linux 系統 firefox 瀏覽器
headers_4 = # win10 系統 firefox 瀏覽器
headers_5 = # win10 系統 chrome 瀏覽器
headers_6 = # win10 系統瀏覽器
def __init__(self):
pass
def select_header(self):
n = random.randint(1, 6)
switch=
headers = switch[n]
return headers
其中,我只寫了6個請求頭,如果爬蟲的量非常大,完全可以寫更多的請求頭,甚至上百個,然後將 random的隨機範圍擴大,進行選擇。
2、在pyspider 指令碼中編寫如下**:
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
# created on 2017-08-18 11:52:26
from pyspider.libs.base_handler import *
from pyspider.addings.headers_switch import headersselector
import sys
defaultencoding = 'utf-8'
if sys.getdefaultencoding() != defaultencoding:
reload(sys)
sys.setdefaultencoding(defaultencoding)
class handler(basehandler):
crawl_config =
@every(minutes=24 * 60)
def on_start(self):
header_slt = headersselector()
header = header_slt.select_header() # 獲取乙個新的 header
程式設計客棧 headers=header) # 請求頭必須寫在 crawl 裡,cookies 從 response.cookies 中找
@config(age=24 * 60 * 60)
def index_page(self, response):
header_slt = headersselector()
header = header_slt.select_header() # 獲取乙個新的 header
其中最重要的就是在每個**函式 on_start,index_page 等等 當中,每次呼叫時,都會例項化乙個 header 選擇器,給每一次請求新增不一樣的 header。要注意新增的如下**:
header_slt = headersselector()
header = header_slt.select_header() # 獲取乙個新的 header
當使用 xhr 傳送 ajax 請求時會帶上 header,常被用來判斷是不是 ajax 請求, headers 要新增 才能抓取到內容。
確定了 url 也就確定了請求頭中的 host,需要按需新增,urlparse包裡給出了根據 url解析出 host的方法函式,直接呼叫netloc即可。
如果響應中有 cookie,就需要將 cookie 新增到請求頭中。
如果還有別的偽裝需求,自行新增。
如此即可實現隨機請求頭,完。
本文標題: pyspider中給爬蟲偽造隨機請求頭的例項
本文位址:
pyspider爬蟲框架 增量爬蟲
pyspider 爬蟲框架,基於puquery實現的.優勢 1.基於多執行緒非同步的任務排程方式 可以實現爬蟲的高併發爬取,注意使用 2.它提供了乙個wedui的爬蟲任務管理介面,可以實現爬蟲的停止,啟動,除錯,支援定時爬取任務 3.簡潔 4.支援動態 的爬取 requests urllib只能爬取...
python增量爬蟲pyspider
1.為了能夠將爬取到的資料存入本地資料庫,現在本地建立乙個mysql資料庫example,然後 在資料庫中建立一張 test,示例如下 drop table if exists test create table douban db id int 11 not null auto increment...
搭建 PySpider 爬蟲服務
1.環境準備 前置環境部署 在開始部署前,我們需要做一些前置準備 yum 更新 yum update y安裝開發編譯工具 yum install gcc gcc c y安裝依賴庫 yum install python pip python devel python distribute libxml...