Scrapy | 通過爬取豆瓣Top250電影信息來學習在中間件中應用隨機請求頭和代理ip

中間件的使用

    • 1.scrapyl中間件的分類和作用
      • 1.1 scrapy中間件的分類
      • 1.2 scrapy中間的作用:預處理request和response對象
    • 2.下載中間件的使用方法:
    • 3.定義實現隨機User-Agent的下載中間件
      • 3.1 實戰:爬取豆瓣Top250電影信息
      • 3.2 中間件使用實現隨機User-Agent
    • 4. 代理ip的使用
      • 4.1思路分析
      • 4.2 代碼實現
        • 代碼:base64.b64encode(auth.encode()).decode()
    • 5. 在中間件中使用selenium - 未實現 了解即可
      • 5.1分析網頁數據格式
      • 5.2 selenium中間件的使用 ?

  • 目標

1.應用scrapy中使用間件使用隨機UA的方法
2.應用scrapy中使用代理ip的的方法
3.應用scrapy.與selenium配合使用

1.scrapyl中間件的分類和作用

1.1 scrapy中間件的分類

根據scrapyi運行流程中所在位置不同分為:

1.下載中間件
2.爬蟲中間件

在這里插入圖片描述

1.2 scrapy中間的作用:預處理request和response對象

1.對header以及cookie進行更換和處理
2.使用代理ip等
3.對請求進行定制化操作,

但在scrapy默認的情況下兩種中間件都在middlewares.py一個文件中
爬蟲中間件使用方法和下載中間件相同,且功能重復,通常使用下載中間件

2.下載中間件的使用方法:

接下來我們對騰訊招聘爬蟲進行修改完善,通過下載中間件來學習如何使用中間件編寫一個 Downloader Middlewares和我們編寫一個pipeline一樣,定義一個類,然后在setting中開啟

1.在middlerware.py中定義中間件類
2.在中間件類中,重寫處理清求或者響應的方法
3.在settings文件中開啟中間件的使用

Downloader Middlewares默認的方法:process_request(self,request,spider):1.當每個requesti通過下載中間件時,該方法被調用。2.返回None值:沒有return也是返回None,該request對象傳遞給下載器,或通過引擎傳遞給其他權重低的process,_request方法3.返回Response對象:不再請求,把response返回給引繁4.返回Request對象:把request對象通過引擎交給調度器,此時將不通過其他權重低的process_request方法protess_response(self,request,response,spider):1.當下載器完成http請求,傳遞響應給引擎的時候調用2.返回Resposne:通過引擎交給爬蟲處理或交給權重更低的其他下載中間件的process_response方法3.返回Request對象:通過引擎交給調取器繼續請求,此時將不通過其他權重低的process_request方法在settings.py中配置開啟中間件,權重值越小越優先執行

3.定義實現隨機User-Agent的下載中間件

3.1 實戰:爬取豆瓣Top250電影信息

  • 網頁分析
    在這里插入圖片描述
    在這里插入圖片描述
  • 代碼

記得在settings.py設置User-Agent和ROBOTSTXT_OBEY,否則會報403錯誤

# items.py
# Define here the models for your scraped items
#
# See documentation in:
# https://docs.scrapy.org/en/latest/topics/items.htmlimport scrapyclass DoubanItem(scrapy.Item):# define the fields for your item here like:name = scrapy.Field()info = scrapy.Field()score = scrapy.Field()desc = scrapy.Field()pass

import scrapy
from douban.items import DoubanItemclass MovieSpider(scrapy.Spider):name = 'movie'allowed_domains = ['douban.com']start_urls = ['https://movie.douban.com/top250']def parse(self, response):node_list = response.xpath('//div[@class="info"]')# print(len(node_list))for node in node_list:item = DoubanItem()item['name'] = node.xpath('./div[1]/a/span[1]/text()').get()item['info'] = node.xpath('./div[@class="bd"]/p[1]/text()')

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

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

相關文章

【深度學習】深度學習入門:從理論到實踐的全面指南

深度學習入門:從理論到實踐的全面指南 深度學習:開啟人工智能新時代的鑰匙一、深度學習的廣泛應用場景1.1 改變生活的深度學習應用1.2 行業變革案例深度解析案例一:深度學習檢測皮膚癌案例二:移動端OCR技術突破案例三:…

MySQL 數據庫操作完整指南

MySQL 數據庫操作完整指南 目錄 創建數據庫 連接數據庫 創建表 約束詳解 插入數據 查詢數據 多表聯合查詢 連接查詢 高級查詢 更新數據 刪除數據 視圖詳解 存儲過程詳解 函數詳解 觸發器 事務處理 索引優化 安全性管理 備份和恢復 性能優化 刪除表和數據庫 1. 創建數據庫 基…

Java面試復習:面向對象編程、Java 8新特性與Spring

Java面試復習:面向對象編程、Java 8新特性與Spring 面向對象編程 概念解析:面向對象編程(OOP)是將現實世界中的概念抽象為軟件模型的編程范式,包括封裝、繼承和多態。 核心原理: 封裝:通過訪…

藍牙數據通訊,實現內網電腦訪問外網電腦

最近突然想到了一個可以繞開單位安全管控軟件,讓單位內部辦公電腦連上外網的方法。大概是這個樣子,讓單位辦公電腦與自己的外網電腦進行藍牙配對,然后用配對成功的藍牙進行網絡數據交互。這里大家可能會想用一下藍牙的網絡共享功能&#xff0…

硬件面經-具身機器人通用技術要求

目錄 簡介 場景 技術面試 設計知識點 總結 簡介 最近機器人特別的火。所以收集了一些關于機器人的面試及要求 場景 目前具身機器人賽道可謂是十分火熱,全國大大小小崛起了幾十家具身機器人公司,國外比較出名的有波士頓動力,特斯拉等,國內目前比較火的就是宇樹,眾擎…

DeepSeek生成HTML5圖片拼接工具

讓DeepSeek生成一個HTML5圖片拼接工具,給的提示詞如下 提示詞(prompt) 幫我生成一個可以將兩張圖片拼接到一起的程序 支持橫向拼接和豎向拼接,可以用html5實現功能嗎? DeepSeek大概20秒左右就做好了,而且像這么簡單的功能的話也沒…

Java面試復習指南:Java基礎、面向對象編程與并發編程

Java面試復習指南:Java基礎、面向對象編程與并發編程 1. Java基礎 概念解析: Java是一種面向對象的編程語言,具有跨平臺的特性。 核心原理: JVM負責Java程序的跨平臺運行,通過字節碼來實現。 高頻面試問題: Java如何實現跨平臺&#xff…

LeeCode2566替換一個數字后的最大差值

項目場景: 給你一個整數 num 。你知道 Danny Mittal 會偷偷將 0 到 9 中的一個數字 替換 成另一個數字。 請你返回將 num 中 恰好一個 數字進行替換后,得到的最大值和最小值的差為多少。 注意: 當 Danny 將一個數字 d1 替換成另一個數字 …

李宏毅2025《機器學習》第三講-AI的腦科學

在之前的課程中探討了如何利用大模型構建AI Agent,本科將暫時放下應用層面的探索,拿起“手術刀”和“顯微鏡”,深入剖析LLM的“大腦”,帶您踏上一場“AI腦神經科學”的旅程。課程不討論模型的訓練過程,而是假設我們擁有一個已經訓練好的、功能完備的LLM。我們的目標是:理…

CVPR 2025 | 微米級光影CT精度!復旦騰訊優圖開源Real-IAD D3數據集

【導讀】 本文介紹了復旦聯合騰訊優圖發布高精度多模態數據集Real-IAD D,并基于此數據集提出了一種創新的多模態融合檢測方法,數據集已被CVPR 2025收錄,并開源。>>更多資訊可加入CV技術群獲取了解哦~ 目錄 一、Real-IAD D的創新之處…

解決mysql左連接加where就不會保留左表中的全部數據的問題

在SQL中使用MySQL的LEFT JOIN操作時,如果加入了WHERE條件,確實會影響結果集的完整性,特別是如果你在WHERE條件中使用了JOIN的另一張表中的字段作為過濾條件。這是因為當你在WHERE子句中加入了對JOIN另一張表的過濾條件時,實際上你是在執行一個INNER JOIN(內連接)而非LEFT…

算法與數據結構:動態規劃DP

文章目錄 動態規劃算法全面解析一、核心思想與基本概念二、動態規劃與其他算法的區別三、動態規劃的解題步驟四、經典案例解析1. **斐波那契數列(Fibonacci)**2. **0-1背包問題(0-1 Knapsack)**3. **最長公共子序列(LC…

Coilcraft電感上的橫線是什么意思?電感有方向么?

通常我們會認為電容、電感、電阻這幾類無源器件沒有方向性,在布局和貼片時可以任意方向放置,也不會在PCB上增加絲印標識說明其方向。與此相互印證的是,電容表面無絲印,無法識別方向;電阻表面一般只有包含阻值大小的數字…

通過Docker掛載nginx并修改頁面

1:通過docker創建nginx: 首先關閉原來的Docker(防止端口號沖突) sudo nginx -s stop 直接啟動 Nginx 進程 sudo nginx 啟動nginx: docker run -di --namemynginx -p 80:80 nginx cd /etc/nginx docker run -d …

力扣1124. 表現良好的最長時間段

這一題我看到數據范圍是10^4,暗自竊喜能用雙重循環,看題目是典型的前綴和哈希。不過需要一個轉換將大于8小時的轉化為1,其他都為-1,方便計算,之前的題目中也有這種方法。 那這樣就簡單了 class Solution { public:int…

EDA2算法速通(編者崩潰版)

這個內容是用來回憶一下EDA2涉及的算法和解題的主要步驟: 有疑問或發現錯誤可以私信來討論 高級綜合概述 柏拉圖優化:這個是來判斷是否有哪些節點能完全被其他節點優化掉。比如(1,2)這個節點就可以完全優化(3,4&…

雷池waf配置第三方登錄-釘釘配置詳細教程

雷池waf配置第三方登錄-釘釘配置詳細教程 前往釘釘開放平臺https://open.dingtalk.com/ 選擇一個登錄方式登錄釘釘開放平臺 選擇一個自己所管理的組織 登錄成功后點擊我的后臺 選擇應用開發 在釘釘應用下點擊創建應用 填寫應用名稱和應用描述后點擊保存 點擊網頁…

神經網絡中的均方誤差(Mean Squared Error)詳解

引言 在機器學習和神經網絡領域,損失函數(Loss Function)是衡量模型預測值與真實值之間差異的關鍵指標。均方誤差(Mean Squared Error, MSE)作為一種經典的損失函數,因其簡單性、可解釋性和數學上的優良性…

day036-lsyncd實時同步服務與網站存儲架構

文章目錄 1. 實時同步工具2. lsyncd 實時同步服務2.1 環境準備2.2 rsync準備2.2.1 服務端檢查2.2.2 客戶端檢查2.2.3 備份測試 2.3 配置lsyncd2.3.1 安裝軟件2.3.2 編寫配置文件 2.4 測試 3. 案例-網站存儲架構3.1 rsync服務配置3.1.1 服務端配置3.1.2 客戶端配置 3.2 lsyncd服…

React Native WebView鍵盤難題:如何讓輸入框不被鍵盤遮擋?

寫在前面 “明明點擊了輸入框,鍵盤卻把內容頂得不見蹤影!” —— 這可能是React Native開發者使用WebView時最頭疼的問題之一。 想象一下:你的App內嵌了一個網頁表單,用戶興奮地準備填寫信息,結果鍵盤彈出后&#xf…