NO.2_python_scrapy_反爬蟲(隨機請求頭IP代理)取消鏈接去重

1.隨機請求頭

# -*- coding: utf-8 -*-
"""
所有請求頭的USER_AGENTS網址
http://www.useragentstring.com/pages/useragentstring.php?name=All
"""
import json
import random
import requestsUSER_AGENTS = ['Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36','Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML like Gecko) Chrome/44.0.2403.155 Safari/537.36','Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36','Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.1 Safari/537.36 Chrome 41.0.2227.0','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36','Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2226.0 Safari/537.36','Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2225.0 Safari/537.36',
]#從列表中隨機選擇一個
**User_Agent = random.choice(USER_AGENTS)**headers = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8','Accept-Language': 'en','User-Agent': User_Agent
}def testUserAgent():resp = requests.get("http://httpbin.org/user-agent", headers=headers)user_agent = json.loads(resp.text)['user-agent']#將返回的字符串loads為字典print(user_agent)def testProxy():proxies = {"https": "223.199.25.183:9999"}resp = requests.get("http://httpbin.org/ip", proxies=proxies)origin = json.loads(resp.text)['origin']print(origin)# https://www.xicidaili.com/nn/ 西刺代理
if __name__ == "__main__":testUserAgent()testProxy()

在middleware.py文件進行修改,

#將多個請求頭放在一個列表中
User_Agent = ['請求頭1''請求頭2''請求頭3'...]
#需要使用的時候從列表中隨機抽取一個請求頭,代碼如下
```python
class user_agentdownloadmiddleware(Object):def process_request(self,request,spider):User_Agent = random.chioce(self.User_Agent)request.headers['User_Agent'] = User_Agent

在setting.py中進行修改

將配置文件中的downloadmiddleware取消注銷即可

取消鏈接去重

def parse():...#此處的dont_filter即為去重的函數,將其設置為True則表示不要去重復的鏈接進行去重,即可以對同一個鏈接進行反復地請求并且獲得數據yield scrapy.Request(self.start_urls[0],dont_filter = True)...

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/257141.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/257141.shtml
英文地址,請注明出處:http://en.pswp.cn/news/257141.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Cobub無碼埋點關鍵技術的實現

隨著大數據時代的到來,數據采集也已經變的越來越重要。前端埋點作為一個比較成熟的數據接入手段被廣泛應用著。目前埋點分為兩種方式,有碼與無碼埋點。有碼埋點比較容易理解,即調用SDK的API,在代碼中插入埋點的相關代碼&#xff0…

Dedesql數據庫類詳解(二次開發必備教程)(轉)

http://www.dedecms.com/help/development/2009/1028/1076.html 織夢DedeCMS的二次開發不僅僅是會寫寫織夢的標簽,會制作織夢的模板。很多時候,我們需要對織夢DedeCMS的數據庫進行查詢、插入、刪除等等之類的操作,進行這一類的操作之前&#…

裝系統換固態硬盤方法

1、將買回的固態硬盤直接換上電腦的原先機械硬盤 2、或者將自己的光驅拆卸,將固態硬盤裝上去 3、電腦進入boss 界面,找到boot(引導)欄,找到自己的u盤,進入后先分區,然后再重啟, 然后再進入BOSS進入U盤里&…

學習筆記(02):Python網絡編程并發編程-assert斷言的用途

立即學習:https://edu.csdn.net/course/play/24458/296228?utm_sourceblogtoedu 異常處理 1.異常的捕捉 try:正常需要運行的代碼except 可能出現的錯誤 as e:出現這種錯誤需要運行的代碼...except Exception as e:捕捉未知的錯誤,并且將需要運行的代碼放于此處el…

ionic tab顯示到頂部去了

添加配置調整顯示位置 .config(function($stateProvider, $urlRouterProvider,$ionicConfigProvider) {$ionicConfigProvider.platform.ios.tabs.style(standard);$ionicConfigProvider.platform.ios.tabs.position(bottom);$ionicConfigProvider.platform.android.tabs.style(…

EasyUI加載外部頁面需要使用html片段

最后總結&#xff0c;如果使用easyui中加載外部界面的組件&#xff0c;例如&#xff1a;panel,window&#xff0c;dailog,tabs等。請確保引入的界面是一個html片段。html片段正確的寫法再次提醒不要出現<html><head><body>三個標簽。 http://www.cnblogs.com…

留言板

本軟件是作為部門內員工之間留言及發送消息使用。 系統必須通過口令驗證&#xff0c;登錄進入。方法是從數據庫內取出用戶姓名和口令的數據進行校驗。 系統包含四部分功能 1 登錄&#xff1a;驗證用戶名與口令&#xff0c;保存會話信息&#xff0c;進入主界面。 界面顯示代碼 &…

c++的32位和64位類型符的位數

看一下結果&#xff1a;WIN32下&#xff1a;sizeof(char):1sizeof(short):2sizeof(int):4sizeof(long):4sizeof(long long):8sizeof(unsigned int):4sizeof(float):4sizeof(double):8sizeof(pointer):4請按任意鍵繼續. . .x64下&#xff1a;sizeof(char):1sizeof(short):2sizeo…

ORA-00980與PL/SQL程序編譯出錯

今天碰到一個有意思的問題。為了降低統計分析數據庫的計算和磁盤空間壓力。我們使用了將遠程數據庫中數據通過DBLINK和SYNONYM的形式來緩解當前統計數據庫所面臨的問題。工作實施的比較順利。但是統計人員發現有幾個執行統計的PL/SQL過程和包&#xff08;PACKAGE&#xff09;失…

學習筆記(03):Python實戰編程-sys模塊

立即學習:https://edu.csdn.net/course/play/19711/255505?utm_sourceblogtoedu sys是一個系統的環境交互模塊&#xff0c;是唯一一個可以與操作系統有關的模塊 #codingutf-8 import sysprint(sys.modules) print(sys.)

spring+mybatis實現讀寫分離

springmore-core springibatis實現讀寫分離 特點 無縫結合springibatis&#xff0c;對于程序員來說&#xff0c;是透明的 除了修改配置信息之外&#xff0c;程序的代碼不需要修改任何東西 支持spring的容器事務規則:基于spring配置的容器事務讀寫事務到主庫只讀事務到從庫如果沒…

DEV C++如何不需要通過建項目可以調試程序

1點擊文件 2、開始寫一段類的程序 #include<iostream>using namespace std;class Point //點類定義 { int x,y; //點的x和y坐標public: void lnitPoint(int,int); //設置坐標 int GetX(){ return x;} //取x坐標 int GetY() {return y;} //取y坐標 void …

創建數據庫

先創建數據庫&#xff1a; CREATE DATABASE SCUTCS; 接著&#xff0c;創建表&#xff1a; CREATE TABLE STUDENT ( SNO CHAR(7) NOT NULL, SNAME VARCHAR(8) NOT NULL, SEX CHAR(2) NOT NULL, BDATE DATE NOT NULL, HEIGHT DEC(5,2) DEFAULT 000.00, PRIMARY KEY(SNO) ); 然后插…

2017-2018-1 20155301 《信息安全系統設計基礎》第7周學習總結

2017-2018-1 20155301 《信息安全系統設計基礎》第7周學習總結 教材學習內容總結 作為我們處理器實現的運行實例&#xff0c;因為受x86-64指令集的啟發&#xff0c;它被俗稱為“x86”&#xff0c;所以我們稱我們的指令集為“Y86-64”&#xff0c;與“x86-64”相比&#xff0c;Y…

[學習筆記]面向對象VS面向過程

1.編程范式 為了實現同一個任務不同的編程方式類別稱為編程范式 2.面向過程編程 面向過程從上到下運行&#xff0c;將一個大問題分解成小問題&#xff0c;再將小問題繼續分解成足夠簡單在一定范圍內可以解答的小問題為止&#xff01;3.面向對象編程 面向對象簡稱為OOP&#x…

批處理系統和分時系統各具有什么特點?為什么分時系統的響應比較快?

批處理系統的特點如下 優點&#xff1a;系統的吞吐率較高。 &#xff08;作業的調度由系統控制&#xff0c;并允許幾道程序同時投入運行&#xff0c;只要合理的搭配作業&#xff08;例如把計算量大的作業和I/O量大的作業搭配&#xff09;就可以充分利用系統的資源&#xff09; …

怎么解決word敲空格刪掉后面的字的問題

將word左下角的改寫改為插入&#xff0c;或者筆記本的按下insert的按鈕

Dubbo原理解析-監控

Dubbo發布代碼中&#xff0c;自帶了一個簡易的監控中心實現。對于一般的小業務這個監控中心應該能夠滿足需求&#xff0c;對于那些大業務量的大公司一般都會有自己的監控中心&#xff0c;更加豐富的功能如常用的報警短信通知等等。這章講解分析使得讀者能夠了解一般的監控中心實…

學習筆記(04):Python網絡編程并發編程-什么是socket

立即學習:https://edu.csdn.net/course/play/24458/296233?utm_sourceblogtoedu 1.什么是網絡編程&#xff1f; 答&#xff1a;網絡編程也叫做socket編程即套接字編程&#xff0c;基于遵循socket套接字的規定進行的編程 2.什么是socket&#xff1f; 答&#xff1a;socket就是…

mysql 獲取自增主鍵

MyBatis 3.2.6插入時候獲取自增主鍵方法有二以MySQL5.5為例&#xff1a;方法1&#xff1a;<insert id"insert" parameterType"Person" useGeneratedKeys"true" keyProperty"id">insert into person(name,pswd) values(#{name},#…